--- - name: setup mirror vm hosts: 127.0.0.1 tasks: - name: mirbr0 network exists command: "virsh net-dumpxml mirbr0 > /dev/null 2>&1" check_mode: yes changed_when: false ignore_errors: true register: net_exists - name: storage pool exists command: "virsh pool-dumpxml mirror > /dev/null 2>&1" check_mode: yes changed_when: false ignore_errors: true register: pool_exists - name: mirror vm exists command: "virsh dumpxml mirror > /dev/null 2>&1" check_mode: yes changed_when: false ignore_errors: true register: vm_exists - name: create directory for vm file: path: "{{ playbook_dir }}/vm/disks" state: directory recurse: yes - name: fetch ubuntu iso get_url: url: https://releases.ubuntu.com/20.04.3/ubuntu-20.04.3-live-server-amd64.iso dest: "{{ playbook_dir }}/vm/ubuntu20_04.iso" # Installing VMs from Ready Images # https://www.x386.xyz/index.php/2021/01/06/kvm-on-ubuntu-server-1/ - name: create ubuntu iso seed command: cmd: > cloud-localds --network-config {{ playbook_dir }}/templates/network {{ playbook_dir }}/vm/seed.qcow2 {{ playbook_dir }}/templates/user-data creates: "{{ playbook_dir }}/vm/seed.qcow2" - name: create mirbr0 bridge network command: "virsh {{ item }}" loop: - net-define {{ playbook_dir }}/templates/network.xml - net-autostart mirbr0 - net-start mirbr0 when: not net_exists.rc == 0 - name: create storage pool command: "virsh {{ item }}" loop: - pool-define-as mirror dir --target="{{ playbook_dir }}/vm/disks" - pool-build mirror - pool-autostart mirror - pool-start mirror when: not pool_exists.rc == 0 # hardcoded to 10G since modification would require change to user-data - name: create virtual disks command: cmd: "virsh vol-create-as mirror {{ item.name }} {{ item.size }}" creates: "{{ playbook_dir }}/vm/disks/{{ item.name }}" loop: - { name: mirror_root1.qcow2, size: 10G } - { name: mirror_root2.qcow2, size: 10G } - { name: mirror_disk1.qcow2, size: 10G } - { name: mirror_disk2.qcow2, size: 10G } - { name: mirror_disk3.qcow2, size: 10G } - { name: mirror_disk4.qcow2, size: 10G } - name: create vm command: > virt-install --name=mirror --memory=2048 --vcpus=1 --boot uefi --os-type linux --os-variant ubuntu20.04 --disk path={{ playbook_dir }}/vm/seed.qcow2,device=cdrom --disk vol=mirror/mirror_root1.qcow2 --disk vol=mirror/mirror_root2.qcow2 --disk vol=mirror/mirror_disk1.qcow2 --disk vol=mirror/mirror_disk2.qcow2 --disk vol=mirror/mirror_disk3.qcow2 --disk vol=mirror/mirror_disk4.qcow2 --network bridge=mirbr0 --graphics vnc,port=5911,listen=127.0.0.1 --noautoconsole when: not vm_exists.rc == 0 # get user to set net.ipv4.ip_forward = 1 ? # in the vm to disable cloud-init run # sudo touch /etc/cloud/cloud-init.disabled # wait ? seconds (hope that vm is made in foreground) # copy over pub key into /root/.ssh/authorized_keys # add line to ssh config that allows ssh as root - name: setup mirror vm hosts: 192.168.123.2 tasks: - name: setup system import_role: name: "../roles/system" - name: setup mirror import_role: name: "../roles/mirror" - name: setup other services import_role: name: "../roles/{{ item }}" loop: - ftp - nginx - rsync # - mirrormanager