tions:- name: Getting the IDs for the VMs running under the user
sudo: True
sudo_user: oneadmin
shell: onevm list | grep {{ item.value.login_name }} | awk 'BEGIN {FS=" "}{print $1}'
with_dict: disable_users_account
register: VMIDs_per_user
ignore_errors: yes
tags:
- delete_VMs
- name: Delete the VMs running under the user
sudo: True
sudo_user: oneadmin
command: onevm delete {{ item.stdout }}
with_items: VMIDs_per_user.results
tags:
- delete_VMs
674
675
onevm delete 674
onevm delete 675
And right now it is not working because it is executing: onevm delete 674 675 , which it does not work because the command does not admit to pass more than one argument.
Therefore, my question is, do you know how to get item by item from the item.stdout so you can execute a command for each item on the item.stdout.
Thanks in advance,
Esteban
- name: Getting the IDs for the VMs running under the user
sudo: True
sudo_user: oneadmin
shell: onevm list | grep {{ item.value.login_name }} | awk 'BEGIN {FS=" "}{print $1}'
with_dict: disable_users_account
register: VMIDs_per_user
ignore_errors: yes
tags:
- delete_VMs
- name: Delete the VMs running under the user
sudo: True
sudo_user: oneadmin
command: onevm delete {{ item }}
with_items: "{{VMIDs_per_user.stdout_lines}}"
tags:
- delete_VMs
But I got the following error:
ansible-playbook -i inventory/production site.yml -vvvvvvv --limit opennebula --tags=delete_VMs
Traceback (most recent call last):
File "/usr/bin/ansible-playbook", line 324, in <module>
sys.exit(main(sys.argv[1:]))
File "/usr/bin/ansible-playbook", line 264, in main
pb.run()
File "/usr/lib/python2.7/site-packages/ansible/playbook/__init__.py", line 310, in run
play = Play(self, play_ds, play_basedir, vault_password=self.vault_password)
File "/usr/lib/python2.7/site-packages/ansible/playbook/play.py", line 194, in __init__
self._tasks = self._load_tasks(self._ds.get('tasks', []), load_vars)
File "/usr/lib/python2.7/site-packages/ansible/playbook/play.py", line 669, in _load_tasks
loaded = self._load_tasks(data, mv, role_params, default_vars, included_become_vars, list(included_additional_conditions), original_file=include_filename, role_name=new_role)
File "/usr/lib/python2.7/site-packages/ansible/playbook/play.py", line 650, in _load_tasks
(k,v) = t.split("=", 1)
ValueError: need more than 1 value to unpack
Also tried with stdout split, I don't remember now the exactly thing that I tried it but it did not work.
This is my ansible version:
ansible --version
ansible 1.9.1
configured module search path = None
Thanks in advance,
Esteban
with_items: "{{VMIDs_per_user.stdout_lines}}"
TASK: [ON4_project_managment | Delete the VMs running under the user] *********
fatal: [m-opennebula4] => with_items expects a list or a set
shell: onevm delete {{ item.stdout.split('\n') }}
shell: onevm delete "{{ item.stdout.split('\n') }}"
shell: onevm delete {{ item.stdout.split("\n") }}
shell: onevm delete {{ item.stdout.splitlines() }}
with_items: "{{VMIDs_per_user.stdout_lines}}"
failed: [m-opennebula4] => (item={u'cmd': u'onevm list | grep testing-admin | awk \'BEGIN {FS=" "}{print $1}\'', u'end': u'2015-07-08 15:26:43.028904', u'stderr': u'', u'stdout': u'685\n686', u'changed': True, u'rc': 0, 'item': {'value': {'login_name': 'testing-admin'}, 'key': 'user'}, u'warnings': [], u'delta': u'0:00:00.778189', 'invocation': {'module_name': u'shell', 'module_args': u'onevm list | grep testing-admin | awk \'BEGIN {FS=" "}{print $1}\''}, 'stdout_lines': [u'685', u'686'], u'start': u'2015-07-08 15:26:42.250715'}) => {"changed": true, "cmd": "onevm delete [u'685', u'686']", "delta": "0:00:01.095980", "end": "2015-07-08 15:26:44.508902", "item": {"changed": true, "cmd": "onevm list | grep testing-admin | awk 'BEGIN {FS=\" \"}{print $1}'", "delta": "0:00:00.778189", "end": "2015-07-08 15:26:43.028904", "invocation": {"module_args": "onevm list | grep testing-admin | awk 'BEGIN {FS=\" \"}{print $1}'", "module_name": "shell"}, "item": {"key": "user", "value": {"login_name": "testing-admin"}}, "rc": 0, "start": "2015-07-08 15:26:42.250715", "stderr": "", "stdout": "685\n686", "stdout_lines": ["685", "686"], "warnings": []}, "rc": 255, "start": "2015-07-08 15:26:43.412922", "warnings": []}
stdout: VM named [u685 not found.
command delete: argument 0 must be one of range, vmid_list
stdout_lines': [u'685', u'686'] and "stdout": "685\n686", "stdout_lines": ["685", "686"] . The problem is that it is taking the [" characteres as [u and I don't know how to remove that.