# Matrixtest-IaC-Ansible This ansible playbook creates a three node cluster in openstack. In this case a microk8s cluster. The following tasks is executed by this playbook. - Creates a custom security group with rules to accept traffic between the nodes. - Create an os volume from the debian-12 image. - Create an snap volume to be used as an LVM volume for easy resize and mounted on /lib/snap. - Query all security groups in the project. - Create an network port for each node and use a selection of the queried security groups. - Create an instance with os volume, snap volume and port attached and a custom cloudinit config. Install ansible on a host with access to the openstack api endpoints. Run "ansible-galaxy -vv collection install openstack.cloud" to install the ansible openstack.cloud plugin. Auth is provided to the playbook by environment variables. Source the rc file of app credentials for the desired openstack project. To apply the config run "ansible-playbook main.yaml" ## Cloudinit config. Cloudinit does the following tasks. - Install tools for LVM2,XFS and the Chronyd ntp sevice. - Configure Chronyd to use netnod.se as a source. - Configure a lvol_snap LVM volume and format it with XFS. - Add a mount record of the lvm volume in fstab and verifies it. ## Expansion of volume by online resize To expand the attached snap volume first query the api version of the volume endpoint from the management node and set the new size of the volume. - curl -L https://v2.api.dco.safedc.net:8776/ | jq '.versions[1].version' # Returns 3.60 - openstack --os-volume-api-version 3.60 volume set --size 30 6f1a238d-f746-4604-92c9-0985ad4b83fd From inside the instance run the following commands. - sudo pvresize /dev/sdb - sudo lvresize -l +100%FREE snapvg/lvol_snap - sudo xfs_growfs /dev/snapvg/lvol_snap Now we have expanded the mounted device with zero downtime.