diff --git a/ansible-kvm-vms/playbooks/create_vms.yml b/ansible-kvm-vms/playbooks/create_vms.yml index 3f4e8b7..02d0b98 100644 --- a/ansible-kvm-vms/playbooks/create_vms.yml +++ b/ansible-kvm-vms/playbooks/create_vms.yml @@ -9,6 +9,14 @@ - kvm_host_setup tasks: + - name: Provision each VM + include_role: + name: os_config + vars: + vm_name: "{{ item.name }}" + os_type: "{{ item.os_type }}" + loop: "{{ vms }}" + - name: Launch each VM include_role: name: vm_provision diff --git a/ansible-kvm-vms/roles/os_config/tasks/main.yml b/ansible-kvm-vms/roles/os_config/tasks/main.yml index 0466a21..84e17bf 100644 --- a/ansible-kvm-vms/roles/os_config/tasks/main.yml +++ b/ansible-kvm-vms/roles/os_config/tasks/main.yml @@ -1,5 +1,7 @@ --- +--- - name: Generate Cloud-init config template: - src: "{{ 'user-data-coreos.yaml.j2' if os_type in ['coreos', 'flatcar'] else 'user-data.yaml.j2' }}" + src: user-data.yaml.j2 dest: "/tmp/{{ vm_name }}_user-data" + diff --git a/ansible-kvm-vms/roles/os_config/templates/user-data.yaml.j2 b/ansible-kvm-vms/roles/os_config/templates/user-data.yaml.j2 index 98210bb..3650d65 100644 --- a/ansible-kvm-vms/roles/os_config/templates/user-data.yaml.j2 +++ b/ansible-kvm-vms/roles/os_config/templates/user-data.yaml.j2 @@ -1,8 +1,7 @@ #cloud-config users: - name: {{ vm_user }} - passwd: {{ vm_password | password_hash('sha512') }} + sudo: ALL=(ALL) NOPASSWD:ALL ssh_authorized_keys: - {{ lookup('file', vm_ssh_public_key | replace('~', lookup('env', 'HOME'))) }} - sudo: ALL=(ALL) NOPASSWD:ALL lock_passwd: false diff --git a/ansible-kvm-vms/roles/vm_provision/tasks/main.yml b/ansible-kvm-vms/roles/vm_provision/tasks/main.yml index b0b67fa..21a45fd 100644 --- a/ansible-kvm-vms/roles/vm_provision/tasks/main.yml +++ b/ansible-kvm-vms/roles/vm_provision/tasks/main.yml @@ -41,17 +41,6 @@ args: creates: "{{ vm_images_dir }}/{{ vm_name }}.qcow2" -- name: Customize VM image (Inject User/SSH/Sudo) - shell: | - virt-customize -a {{ vm_images_dir }}/{{ vm_name }}.qcow2 \ - --run-command "useradd -m -G wheel {{ vm_user }}" \ - --password {{ vm_user }}:password:{{ vm_password }} \ - --ssh-inject {{ vm_user }}:file:{{ vm_ssh_public_key | replace('~', lookup('env', 'HOME')) }} && \ - touch {{ vm_images_dir }}/{{ vm_name }}.customized - become: yes - args: - creates: "{{ vm_images_dir }}/{{ vm_name }}.customized" - - name: Provision VM using virt-install shell: | virt-install \ @@ -64,7 +53,8 @@ --network network=default \ --graphics none \ --noautoconsole \ - --boot uefi + --boot uefi \ + --cloud-init user-data=/tmp/{{ vm_name }}_user-data args: creates: "/etc/libvirt/qemu/{{ vm_name }}.xml" become: yes