Hi Kai,
Thank You so much for your help. The loop works with your suggestions
except it seems to run a duplicate task and create a duplicate guest. This
is with a test of 2 ESX hosts. Is there a way to work around it?
This is what I have in my inventory:
[esxi]
esxi1
esxi4
# ansible-playbook --limit esxi cr_guests.yml
PLAY [all]
*********************************************************************
TASK [setup]
*******************************************************************
ok: [esxi4]
ok: [esxi1]
TASK [vsphere_guest]
***********************************************************
An exception occurred during task execution. To see the full traceback, use
-vvv. The error was: pysphere.resources.vi_exception.VIException: [Task
Error]: Another task is already in progress.
failed: [esxi1] (item=({u'esx_host': u'esxi1'}, u'vm1')) => {"failed":
true, "item": [{"esx_host": "esxi1"}, "vm1"], "module_stderr": "Traceback
(most recent call last):\n File
\"/tmp/ansible_R7ozs3/ansible_module_vsphere_guest.py\", line 1909, in
<module>\n main()\n File
\"/tmp/ansible_R7ozs3/ansible_module_vsphere_guest.py\", line 1897, in
main\n state=state\n File
\"/tmp/ansible_R7ozs3/ansible_module_vsphere_guest.py\", line 1454, in
create_vm\n vm.set_extra_config(vm_extra_config)\n File
\"/usr/lib/python2.7/site-packages/pysphere/vi_virtual_machine.py\", line
1589, in set_extra_config\n
FaultTypes.TASK_ERROR)\npysphere.resources.vi_exception.VIException: [Task
Error]: Another task is already in progress.\n", "module_stdout": "",
"msg": "MODULE FAILURE"}
changed: [esxi4] => (item=({u'esx_host': u'esxi1'}, u'vm1'))
An exception occurred during task execution. To see the full traceback, use
-vvv. The error was: TypeError: Value of unknown type: <class
'pysphere.resources.vi_exception.VIException'>, [Task Error]: The attempted
operation cannot be performed in the current state (Powered off).
failed: [esxi4] (item=({u'esx_host': u'esxi4'}, u'vm3')) => {"failed":
true, "item": [{"esx_host": "esxi4"}, "vm3"], "module_stderr": "Traceback
(most recent call last):\n File
\"/tmp/ansible_lt4K1b/ansible_module_vsphere_guest.py\", line 1909, in
<module>\n main()\n File
\"/tmp/ansible_lt4K1b/ansible_module_vsphere_guest.py\", line 1815, in
main\n module.exit_json(changed=state_result)\n File
\"/tmp/ansible_lt4K1b/ansible_modlib.zip/ansible/module_utils/basic.py\",
line 1799, in exit_json\n File
\"/tmp/ansible_lt4K1b/ansible_modlib.zip/ansible/module_utils/basic.py\",
line 388, in remove_values\n File
\"/tmp/ansible_lt4K1b/ansible_modlib.zip/ansible/module_utils/basic.py\",
line 388, in <genexpr>\n File
\"/tmp/ansible_lt4K1b/ansible_modlib.zip/ansible/module_utils/basic.py\",
line 399, in remove_values\nTypeError: Value of unknown type: <class
'pysphere.resources.vi_exception.VIException'>, [Task Error]: The attempted
operation cannot be performed in the current state (Powered off).\n",
"module_stdout": "", "msg": "MODULE FAILURE"}
changed: [esxi1] => (item=({u'esx_host': u'esxi4'}, u'vm3'))
changed: [esxi4] => (item=({u'esx_host': u'esxi4'}, u'vm4'))
changed: [esxi1] => (item=({u'esx_host': u'esxi4'}, u'vm4'))
changed: [esxi1] => (item=({u'esx_host': u'esxi4'}, u'vm5'))
changed: [esxi4] => (item=({u'esx_host': u'esxi4'}, u'vm5'))
to retry, use: --limit @/root/learn/ansible/cr_guests.retry
PLAY RECAP
*********************************************************************
esxi4 : ok=1 changed=0 unreachable=0 failed=1
esxi1 : ok=1 changed=0 unreachable=0 failed=1
Thanks,
Alex
On Friday, February 10, 2017 at 12:01:20 PM UTC-8, Alex Lien wrote:
>
> I am running ansible version 2.2.0.0. I have several free ESXi hosts. I
> would like to create multiple specific guests on each of the free ESXi
> hosts. I have tried to use with_dict with guests variables, hoping to loop
> through an arbitrary pre-defined set of ESXi hosts and guests list. But I
> am getting error:
>
> fatal: [esxi1]: FAILED! => {"failed": true, "msg": "the field 'args' has
> an invalid value, which appears to include a variable that is undefined.
> The error was: 'list object' has no attribute 'vmname'
>
> Is there a way to have the playbook loop through the list of esxi hosts
> and guests list.
>
> ---
> - hosts: all
> connection: local
>
> vars:
> esxi_user: root
> esxi_password: passwordxyz
> guests:
> esxi1:
> - vmname: vm1
> esxi4:
> - vmname: vm3
> - vmname: vm4
> - vmname: vm5
>
> tasks:
> - vsphere_guest:
> vcenter_hostname: "{{ item.key }}"
> username: "{{ esxi_user }}"
> password: "{{ esxi_password }}"
> guest: "{{ item.value.vmname }}"
> state: powered_on
> vm_extra_config:
> vcpu.hotadd: yes
> mem.hotadd: yes
> notes: This is a test VM
> vm_disk:
> disk1:
> size_gb: 20
> type: thin
> datastore: store4
> vm_nic:
> nic1:
> type: vmxnet3
> network: VM01
> network_type: standard
> vm_hardware:
> memory_mb: 2048
> num_cpus: 2
> osid: centos64Guest
> scsi: lsi
> vm_cdrom:
> type: client
> esxi:
> datacenter: ha-datacenter
> hostname: "{{ item.key }}"
> with_dict: "{{ guests }}"
>
--
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 post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/9d906d1a-b3f4-40a4-8faf-10ca98569faf%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.