Hi there,
I would like to bring this up again. Does somebody have an idea on this?
Jörg Kastning schrieb am Dienstag, 1. März 2022 um 11:16:36 UTC+1:
>
> Hey folks,
>
> I'm using the vmware_guest module to clone virtual machines (VMs) from a
> template and customizing them. When running the same playbook with the same
> parameters/values again while the VMs already exist I would expect that
> there is nothing to do and task status would just be 'OK'. Instead the task
> status is 'Changed' every time I run the playbook.
>
> Now, I'm in doubt wether I hold it wrong or is vmware_guest not idempotent?
>
> Here are my `{defaults,tasks}/main.yml`, playbook and output of the
> playbook run:
>
>
> ~~~
> $ cat defaults/main.yml
> ---
> # defaults file for vsphere_provision_lab
> vsphere_provision_lab_vc_hostname: "vcenter.example.com"
> vsphere_provision_lab_vc_username: "[email protected]"
> vsphere_provision_lab_vc_password: "ThatsASecret"
> vsphere_provision_lab_vc_datacenter: "DC"
> vsphere_provision_lab_vc_cluster: "vSphere-Cluster"
> vsphere_provision_lab_vc_datastore: "DS1"
> vsphere_provision_lab_vc_folder: "/ha-datacenter/vm"
>
> vsphere_provision_lab_guests:
> vm1:
> vm_template: rhel8-en
> vm_ram_mb: 512
> vm_vcpu: 1
> vm_net: VLAN123
> vm_ip: 192.168.0.1
> vm_netmask: 255.255.255.0
> vm_gateway: 192.168.0.254
> vm_domain: sub.example.com
> vm_hostname: host1
> vm_dns_servers:
> - 192.168.0.2
> - 192.168.0.3
> vm_dns_suffix:
> - sub.example.com
> - sub2.example.com
> - sub3.example.com
> vm_second_hdd: false
> vm_second_hdd_size_gb: ""
> vm_second_hdd_type: ""
> vm_second_hdd_datastore: ""
> vm_scsi_controller: ""
> vm_unit_number: ""
> vm_scsi_type: ''
>
> vm2:
> vm_template: rhel8-en
> vm_ram_mb: 1024
> vm_vcpu: 2
> vm_net: VLAN123
> vm_ip: 192.168.0.5
> vm_netmask: 255.255.255.0
> vm_gateway: 192.168.0.254
> vm_domain: sub.example.com
> vm_hostname: host2
> vm_dns_servers:
> - 192.168.0.2
> - 192.168.0.3
> vm_dns_suffix:
> - sub.example.com
> - sub2.example.com
> - sub3.example.com
> vm_second_hdd: true
> vm_second_hdd_size_gb: "10"
> vm_second_hdd_type: "thin"
> vm_second_hdd_datastore: "DS1"
> vm_scsi_controller: "1"
> vm_unit_number: "1"
> vm_scsi_type: 'paravirtual'
>
> $ cat tasks/main.yml
> ---
> # tasks file for vsphere_provision_lab
> - name: Clone virtual machines from RHEL template and customize
> vmware_guest:
> hostname: "{{ vsphere_provision_lab_vc_hostname }}"
> username: "{{ vsphere_provision_lab_vc_username }}"
> password: "{{ vsphere_provision_lab_vc_password }}"
> datacenter: "{{ vsphere_provision_lab_vc_datacenter }}"
> cluster: "{{ vsphere_provision_lab_vc_cluster }}"
> datastore: "{{ vsphere_provision_lab_vc_datastore }}"
> validate_certs: no
> state: present
> folder: "{{ vsphere_provision_lab_vc_folder }}"
> template: "{{ item.value.vm_template }}"
> name: "{{ item.key }}"
> hardware:
> memory_mb: "{{ item.value.vm_ram_mb }}"
> num_cpus: "{{ item.value.vm_vcpu }}"
> networks:
> - name: "{{ item.value.vm_net }}"
> ip: "{{ item.value.vm_ip }}"
> netmask: "{{ item.value.vm_netmask }}"
> gateway: "{{ item.value.vm_gateway }}"
> wait_for_ip_address: True
> customization:
> domain: "{{ item.value.vm_domain }}"
> hostname: "{{ item.value.vm_hostname }}"
> dns_servers: "{{ item.value.vm_dns_servers }}"
> dns_suffix: "{{ item.value.vm_dns_suffix }}"
> delegate_to: localhost
> with_dict: "{{ vsphere_provision_lab_guests }}"
>
> - name: Add disks to virtual machine using name
> vmware_guest_disk:
> hostname: "{{ vsphere_provision_lab_vc_hostname }}"
> username: "{{ vsphere_provision_lab_vc_username }}"
> password: "{{ vsphere_provision_lab_vc_password }}"
> datacenter: "{{ vsphere_provision_lab_vc_datacenter }}"
> validate_certs: no
> name: "{{ item.key }}"
> disk:
> - size_gb: "{{ item.value.vm_second_hdd_size_gb }}"
> type: "{{ item.value.vm_second_hdd_type }}"
> datastore: "{{ item.value.vm_second_hdd_datastore }}"
> scsi_controller: "{{ item.value.vm_scsi_controller }}"
> unit_number: "{{ item.value.vm_unit_number }}"
> scsi_type: "{{ item.value.vm_scsi_type }}"
> with_dict: "{{ vsphere_provision_lab_guests }}"
> when: item.value.vm_second_hdd is defined and
> item.value.vm_second_hdd|bool == true
>
> $ cat vsphere_provision_rhel_lab.yml
> ---
> - hosts: localhost
> connection: local
> gather_facts: no
> vars_files:
> - /some/path/vault.vars
> - roles/vsphere_provision_lab/vars/rhel.yml
>
> roles:
> - vsphere_provision_lab
> ~~~
>
> The first playbook run produces the following output:
>
> ~~~
> $ ansible-playbook --ask-vault-pass vsphere_provision_rhel_lab.yml
> Vault password:
>
> PLAY [localhost]
> ***********************************************************************************************************************************************************************************************************************
>
> TASK [vsphere_provision_lab : Clone virtual machines from RHEL template
> and customize]
> *************************************************************************************************************************************************
> changed: [localhost -> localhost] => (item=...)
> changed: [localhost -> localhost] => (item=...)
>
> TASK [vsphere_provision_lab : Add disks to virtual machine using name]
> *****************************************************************************************************************************************************************
> skipping: [localhost] => (item=...)
> changed: [localhost] => (item=...)
>
> PLAY RECAP
> *****************************************************************************************************************************************************************************************************************************
> localhost : ok=2 changed=2 unreachable=0
> failed=0 skipped=0 rescued=0 ignored=0
>
> # NOW I START A SECOND RUN
>
> $ ansible-playbook --ask-vault-pass vsphere_provision_rhel_lab.yml
> Vault password:
>
> PLAY [localhost]
> ***********************************************************************************************************************************************************************************************************************
>
> TASK [vsphere_provision_lab : Clone virtual machines from RHEL template
> and customize]
> *************************************************************************************************************************************************
> changed: [localhost -> localhost] => (item=...)
> changed: [localhost -> localhost] => (item=...)
>
> TASK [vsphere_provision_lab : Add disks to virtual machine using name]
> *****************************************************************************************************************************************************************
> skipping: [localhost] => (item=...)
> ok: [localhost] => (item=...)
>
> PLAY RECAP
> *****************************************************************************************************************************************************************************************************************************
> localhost : ok=2 changed=1 unreachable=0
> failed=0 skipped=0 rescued=0 ignored=0
> ~~~
>
> I truncated the output for a better overview here. But I checked locally
> that the values for the task 'vsphere_provision_lab : Clone virtual
> machines from RHEL template and customize' are the same in both runs and
> the VMs exist before the second run starts. Why is the status 'changed' and
> not 'ok' as I would expect?
>
> Kind regards,
> Joerg
>
--
You received this message because you are subscribed to the Google Groups
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/8d8e6618-9bf6-43d3-8157-09964f713131n%40googlegroups.com.