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.

Reply via email to