--- - name: create k8s vms with_items: "{{ vm_name_suffixes }}" loop_control: loop_var: vm_number block: - name: set vm_name ansible.builtin.set_fact: vm_name: "{{ vm_name_prefix }}{{ vm_number }}" - name: create root vhd from template ansible.builtin.shell: cmd: | qemu-img create \ -b {{ root_vhd_pool_dir }}/{{ vhd_template }} \ -F qcow2 \ -f qcow2 \ {{ root_vhd_pool_dir }}/{{ vm_name }}_vda.qcow2 creates: "{{ root_vhd_pool_dir }}/{{ vm_name }}_vda.qcow2" register: root_vhd_created # TODO check this template copy - name: copy network files to hypervisor host when: root_vhd_created is changed ansible.builtin.template: src: eno1.network.j2 dest: /tmp/eno1_{{ vm_name }}.network - name: customize root vhd when: root_vhd_created is changed ansible.builtin.shell: # TODO check virt customize command # TODO select host vars for vm_number for password and ssh string cmd: | virt-customize -a {{ root_vhd_pool_dir }}/{{ vm_name }}_vda.qcow2 \ --format qcow2 \ --hostname {{ vm_name }}.{{ vm_domain }} \ --copy-in /tmp/eno1_{{ vm_name }}.network:/etc/systemd/network/10-eno1.network \ --append-line "/etc/hosts:127.0.1.1 {{ vm_name }}.{{ vm_domain }} {{ vm_name }}" --password ladmin:password:{{ hostvars[vm_name]['ansible_become_pass'] }} \ --root-password password:{{ hostvars[vm_name]['ansible_root_pass'] }} \ --password-crypto sha512 \ --ssh-inject "ladmin:string:{{ hostvars[vm_name]['ssh_public_key_data'] }}" - name: create container storage vhd ansible.builtin.shell: cmd: | qemu-img create -f qcow2 {{ containers_vhd_pool_dir }}/{{ vm_name }}_vdb.qcow2 64G creates: "{{ containers_vhd_pool_dir }}/{{ vm_name }}_vdb.qcow2" - name: create nvme data storage vhd ansible.builtin.shell: cmd: | qemu-img create -f qcow2 {{ data_nvme_vhd_pool_dir }}/{{ vm_name }}_vdc.qcow2 64G creates: "{{ data_nvme_vhd_pool_dir }}/{{ vm_name }}_vdc.qcow2" - name: create hdd data storage vhd ansible.builtin.shell: cmd: | qemu-img create -f qcow2 {{ data_hdd_vhd_pool_dir }}/{{ vm_name }}_vdd.qcow2 4T creates: "{{ data_hdd_vhd_pool_dir }}/{{ vm_name }}_vdd.qcow2" - name: list vms community.libvirt.virt: command: list register: vm_list - name: define vm community.libvirt.virt: command: define autostart: true name: "{{ vm_name }}" xml: "{{ lookup('template', 'vm_template.xml.j2') }}" # TODO check in list logic when: not (vm_list contains {{ vm_name }}) - name: start vm community.libvirt.virt: state: started name: "{{ vm_name }}"