On Mon, 28 Feb 2022 at 22:44, Jeremy Tourville <[email protected]>
wrote:

> Hi everyone
> I am trying to use Ansible for the first time with an API.  Normally, I
> have learned to manage LInux servers with ansible where you are connecting
> to the device(s) using SSH and an inventory file.
>
> I have been following this guide(s) to help provide some automation for
> oVirt virtualization.
> https://www.redhat.com/sysadmin//deployment-ansible-design
> https://www.redhat.com/sysadmin/deployment-ansible-automation
> https://www.redhat.com/sysadmin/deployment-ansible-playbooks
>
> I have generally copied what the author did except that I customized it
> for my environment.
> When I try to run the playbook I am getting errors.  My first question is
> what should the host parameter be listed as?  Shouldn't it be the oVirt
> manager? I see the article author chose to use localhost and I'm not sure
> why. Can someone explain?  I'm still trying to get my head wrapped around
> it and understand what's happening.
>
> My file structre is as follows:
> [student@workstation ansible]$ tree
>
> ├── many-vms.yml
> └── vars
>     ├── passwords.yml
>     ├── permissions.csv
>     ├── pwfile.txt
>     ├── vmflavours.csv
>     ├── vms.csv
>     └── vmtemplates.csv
>
> Here is my playbook:
> ---
> - name: Create Many VMs
>   hosts: localhost
>   connection: local
>   gather_facts: false
>   tasks:
>
>   # Check if all config files exist
>     - name: Check if passwords.yml exists
>       stat:
>         path: vars/passwords.yml
>       register: passwordsfile
>
>     - name: Check if file vms.csv exists
>       stat:
>         path: vars/vms.csv
>       register: vmsfile
>
>     - name: Check if file vmtemplates.csv exists
>       stat:
>         path: vars/vmtemplates.csv
>       register: vmtemplatesfile
>
>     - name: Check if file vmflavours.csv exists
>       stat:
>         path: vars/vmflavours.csv
>
>       register: vmflavoursfile
>     - name: Check if file permissions.csv exists
>       stat:
>         path: vars/permissions.csv
>       register: permissionsfile
>
>   # Check if there is a missing config file terminates the play
>     - name: Terminate the play is any variable file is missing
>       fail: msg="Variable file is missing"
>       when: passwordsfile.stat.exists is undefined or vmsfile.stat.exists
> is undefined or vmtemplatesfile.stat.exists is undefined or
> vmflavoursfile.stat.exists is undefined or permissionsfile.stat.exists is
> undefined
>
>   # Parse Config files
>     - name: Parse vms.csv file
>       read_csv:
>         path: vars/vms.csv
>         key: name
>       register: vms
>
>   # All the variables are null, then terminate the play.
>     - name: Test variables used to deploy multiple VMs
>       fail: msg="Please enter either site or system"
>       when: site is undefined and system is undefined
>
>   # Iterate Over the first and second plays based upon the non-null variabl
>     - name: Deploy VMs for certain site
>       shell:
>         cmd: ansible-playbook -e "vmchoice={{ item.value.name }}"
> --vault-password-file vars/pwfile.txt vars/passwords.yml
>       loop: "{{ vms.dict|dict2items }}"
>       ignore_errors: yes
>       when: item.value.site==site and site is defined and system is
> undefined
>
>     - name: Deploy VMs for certain system
>       shell:
>         cmd: ansible-playbook -e "vmchoice={{ item.value.name }}"
> --vault-password-file vars/pwfile.txt vars/passwords.yml


You supplied a file called passwords.yml as the playbook. That sounds
problematic, and indeed causes a failure.

BTW using ansible to run ansible through shell commands doesn't seem like
the easiest strategy to me..



>       loop: "{{ vms.dict|dict2items }}"
>       ignore_errors: yes
>       when: item.value.system==system and site is undefined and system is
> defined
>
> [student@workstation ansible]$ ansible-playbook -e "system=ansible"
> many-vms.yml
>
> PLAY [Create Many VMs]
> ********************************************************************************************************************************************************************************************
>
> TASK [Check if passwords.yml exists]
> ******************************************************************************************************************************************************************************
> ok: [localhost]
>
> TASK [Check if file vms.csv exists]
> *******************************************************************************************************************************************************************************
> ok: [localhost]
>
> TASK [Check if file vmtemplates.csv exists]
> ***********************************************************************************************************************************************************************
> ok: [localhost]
>
> TASK [Check if file vmflavours.csv exists]
> ************************************************************************************************************************************************************************
> ok: [localhost]
>
> TASK [Check if file permissions.csv exists]
> ***********************************************************************************************************************************************************************
> ok: [localhost]
>
> TASK [Terminate the play is any variable file is missing]
> *********************************************************************************************************************************************************
> skipping: [localhost]
>
> TASK [Parse vms.csv file]
> *****************************************************************************************************************************************************************************************
> ok: [localhost]
>
> TASK [Test variables used to deploy multiple VMs]
> *****************************************************************************************************************************************************************
> skipping: [localhost]
>
> TASK [Deploy VMs for certain site]
> ********************************************************************************************************************************************************************************
> skipping: [localhost] => (item={'key': 'ansible01', 'value': {'name':
> 'ansible01', 'vmflavour': 'small_vm', 'type': 'small', 'site': 'Default',
> 'cluster': 'Default', 'class': 'server', 'os': 'rhel_8x64', 'nic': 'eth0',
> 'ip': '172.30.50.50', 'gw': '172.30.50.1', 'mask': '255.255.255.0',
> 'system': 'ansible', 'fqdn': 'ansible01.idm.nac-issa.org', 'dns1':
> '172.30.50.5', 'dns2': '172.30.50.8', 'dns_domain': 'idm.nac-issa.org'}})
> skipping: [localhost] => (item={'key': 'ansible02', 'value': {'name':
> 'ansible02', 'vmflavour': 'small_vm', 'type': 'small', 'site': 'Default',
> 'cluster': 'Default', 'class': 'server', 'os': 'rhel_8x64', 'nic': 'eth0',
> 'ip': '172.30.50.50', 'gw': '172.30.55.1', 'mask': '255.255.255.0',
> 'system': 'ansible', 'fqdn': 'ansible02.idm.nac-issa.org', 'dns1':
> '172.30.50.5', 'dns2': '172.30.50.8', 'dns_domain': 'idm.nac-issa.org'}})
> skipping: [localhost] => (item={'key': 'ansible03', 'value': {'name':
> 'ansible03', 'vmflavour': 'small_vm', 'type': 'small', 'site': 'Default',
> 'cluster': 'Default', 'class': 'server', 'os': 'rhel_8x64', 'nic': 'eth0',
> 'ip': '172.30.50.50', 'gw': '172.30.60.1', 'mask': '255.255.255.0',
> 'system': 'ansible', 'fqdn': 'ansible03.idm.nac-issa.org', 'dns1':
> '172.30.50.5', 'dns2': '172.30.50.8', 'dns_domain': 'idm.nac-issa.org'}})
> skipping: [localhost] => (item={'key': 'ansible04', 'value': {'name':
> 'ansible04', 'vmflavour': 'small_vm', 'type': 'small', 'site': 'Default',
> 'cluster': 'Default', 'class': 'server', 'os': 'rhel_8x64', 'nic': 'eth0',
> 'ip': '172.30.50.50', 'gw': '172.30.65.1', 'mask': '255.255.255.0',
> 'system': 'ansible', 'fqdn': 'ansible04.idm.nac-issa.org', 'dns1':
> '172.30.50.5', 'dns2': '172.30.50.8', 'dns_domain': 'idm.nac-issa.org'}})
> skipping: [localhost] => (item={'key': 'ansible05', 'value': {'name':
> 'ansible05', 'vmflavour': 'small_vm', 'type': 'small', 'site': 'Default',
> 'cluster': 'Default', 'class': 'server', 'os': 'rhel_8x64', 'nic': 'eth0',
> 'ip': '172.30.50.50', 'gw': '172.30.70.1', 'mask': '255.255.255.0',
> 'system': 'ansible', 'fqdn': 'ansible05.idm.nac-issa.org', 'dns1':
> '172.30.50.5', 'dns2': '172.30.50.8', 'dns_domain': 'idm.nac-issa.org'}})
> skipping: [localhost] => (item={'key': 'ansible06', 'value': {'name':
> 'ansible06', 'vmflavour': 'small_vm', 'type': 'small', 'site': 'Default',
> 'cluster': 'Default', 'class': 'server', 'os': 'rhel_8x64', 'nic': 'eth0',
> 'ip': '172.30.50.50', 'gw': '172.30.75.1', 'mask': '255.255.255.0',
> 'system': 'ansible', 'fqdn': 'ansible06.idm.nac-issa.org', 'dns1':
> '172.30.50.5', 'dns2': '172.30.50.8', 'dns_domain': 'idm.nac-issa.org'}})
> skipping: [localhost] => (item={'key': 'ansible07', 'value': {'name':
> 'ansible07', 'vmflavour': 'small_vm', 'type': 'small', 'site': 'Default',
> 'cluster': 'Default', 'class': 'server', 'os': 'rhel_8x64', 'nic': 'eth0',
> 'ip': '172.30.50.50', 'gw': '172.30.80.1', 'mask': '255.255.255.0',
> 'system': 'ansible', 'fqdn': 'ansible07.idm.nac-issa.org', 'dns1':
> '172.30.50.5', 'dns2': '172.30.50.8', 'dns_domain': 'idm.nac-issa.org'}})
> skipping: [localhost] => (item={'key': 'ansible08', 'value': {'name':
> 'ansible08', 'vmflavour': 'small_vm', 'type': 'small', 'site': 'Default',
> 'cluster': 'Default', 'class': 'server', 'os': 'rhel_8x64', 'nic': 'eth0',
> 'ip': '172.30.50.50', 'gw': '172.30.85.1', 'mask': '255.255.255.0',
> 'system': 'ansible', 'fqdn': 'ansible08.idm.nac-issa.org', 'dns1':
> '172.30.50.5', 'dns2': '172.30.50.8', 'dns_domain': 'idm.nac-issa.org'}})
> skipping: [localhost] => (item={'key': 'ansible09', 'value': {'name':
> 'ansible09', 'vmflavour': 'small_vm', 'type': 'small', 'site': 'Default',
> 'cluster': 'Default', 'class': 'server', 'os': 'rhel_8x64', 'nic': 'eth0',
> 'ip': '172.30.50.50', 'gw': '172.30.90.1', 'mask': '255.255.255.0',
> 'system': 'ansible', 'fqdn': 'ansible09.idm.nac-issa.org', 'dns1':
> '172.30.50.5', 'dns2': '172.30.50.8', 'dns_domain': 'idm.nac-issa.org'}})
> skipping: [localhost] => (item={'key': 'ansible10', 'value': {'name':
> 'ansible10', 'vmflavour': 'small_vm', 'type': 'small', 'site': 'Default',
> 'cluster': 'Default', 'class': 'server', 'os': 'rhel_8x64', 'nic': 'eth0',
> 'ip': '172.30.50.50', 'gw': '172.30.95.1', 'mask': '255.255.255.0',
> 'system': 'ansible', 'fqdn': 'ansible01.idm.nac-issa.org', 'dns1':
> '172.30.50.5', 'dns2': '172.30.50.8', 'dns_domain': 'idm.nac-issa.org'}})
>
> TASK [Deploy VMs for certain system]
> ******************************************************************************************************************************************************************************
> failed: [localhost] (item={'key': 'ansible01', 'value': {'name':
> 'ansible01', 'vmflavour': 'small_vm', 'type': 'small', 'site': 'Default',
> 'cluster': 'Default', 'class': 'server', 'os': 'rhel_8x64', 'nic': 'eth0',
> 'ip': '172.30.50.50', 'gw': '172.30.50.1', 'mask': '255.255.255.0',
> 'system': 'ansible', 'fqdn': 'ansible01.idm.nac-issa.org', 'dns1':
> '172.30.50.5', 'dns2': '172.30.50.8', 'dns_domain': 'idm.nac-issa.org'}})
> => {"ansible_loop_var": "item", "changed": true, "cmd": "ansible-playbook
> -e \"vmchoice=ansible01\" --vault-password-file vars/pwfile
> vars/passwords.yml", "delta": "0:00:00.647153", "end": "2022-02-28
> 15:30:13.735822", "item": {"key": "ansible01", "value": {"class": "server",
> "cluster": "Default", "dns1": "172.30.50.5", "dns2": "172.30.50.8",
> "dns_domain": "idm.nac-issa.org", "fqdn": "ansible01.idm.nac-issa.org",
> "gw": "172.30.50.1", "ip": "172.30.50.50", "mask": "255.255.255.0", "name":
> "ansible01", "nic": "eth0", "os": "rhel_8x64", "site": "Default", "system":
> "ansible", "type": "small", "vmflavour": "small_vm"}}, "msg": "non-zero
> return code", "rc": 4, "start": "2022-02-28 15:30:13.088669", "stderr":
> "ERROR! A playbook must be a list of plays, got a <class
> 'ansible.parsing.yaml.objects.AnsibleMapping'> instead\n\nThe error appears
> to be in '/home/student/ansible/vars/passwords.yml': line 1, column 1, but
> may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe
> offending line appears to be:\n\n\n$ANSIBLE_VAULT;1.1;AES256\n^ here",
> "stderr_lines": ["ERROR! A playbook must be a list of plays, got a <class
> 'ansible.parsing.yaml.objects.AnsibleMapping'> instead", "", "The error
> appears to be in '/home/student/ansible/vars/passwords.yml': line 1, column
> 1, but may", "be elsewhere in the file depending on the exact syntax
> problem.", "", "The offending line appears to be:", "", "",
> "$ANSIBLE_VAULT;1.1;AES256", "^ here"], "stdout": "", "stdout_lines": []}
>
> ...REPEAT THE SAME FAILURE FOR THE NEXT 9 SYSTEMS...
> ...ignoring
>
> PLAY RECAP
> ********************************************************************************************************************************************************************************************************
> localhost                  : ok=7    changed=1    unreachable=0
>  failed=0    skipped=3    rescued=0    ignored=1
>
> --
> 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/7f0a7eb5-993f-4451-b2fb-ad6e54092189n%40googlegroups.com
> <https://groups.google.com/d/msgid/ansible-project/7f0a7eb5-993f-4451-b2fb-ad6e54092189n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
-- 
Sent from a mobile device - please excuse the brevity, spelling and
punctuation.

-- 
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/CAL8fbwMgSqq2DVZ8HxVJO26sCw3x9ChXKQbpjonbFE2GZn_a_A%40mail.gmail.com.

Reply via email to