Hey all,
I have two roles that are included in my site.yml and the goal is to execute the second role as soon as the first role completes. I have added a task to generate a dynamic inventory in the first role that the second role can use. I have a job Template in Ansible Tower and the first role executes cleanly but job Template completes without the second role executing.
What am I missing?
- name: VMware-windows create role
hosts: localhost
gather_facts: no
roles:
- vmware-windows
vars_files:
-
./roles/vmware-windows/vars/{{ vc_location }}.yml
-
./roles/vmware-windows/vars/{{ network }}.yml
-
name: Windows-post role
hosts: windows
gather_facts: no
roles:
-
windows-post
Thanks!
You need to make sure you use proper indentation. Your roles list needs to be indented two spaces like your vars_files.
Is it possible also that your sourcing of those the vars_files from within your role is overwriting the value of “windows” such that there is no inventory for the second play? Why do you source those vars files? The vmware-windows role will do that automatically.
- name: VMware-windows create role
hosts: localhost
gather_facts: no
roles:
- vmware-windows
this vars_files should not be needed
vars_files:
-
./roles/vmware-windows/vars/{{ vc_location }}.yml
-
./roles/vmware-windows/vars/{{ network }}.yml
-
name: Windows-post role
hosts: windows
gather_facts: no
roles:
-
windows-post
I presume that your vmware-windows role in the first play creates the host group called “windows” that you use as the inventory in your second play?
Walter
Hi, Walter,
That is correct. I am, the vmware-windows role is the first play and creates the host_group “windows” to be used as inventory in the second play.
Right now, the second role is not indented but let me give that a go this morning. I’m presuming to indent the entire block starting with the hyphen
( - name: … )?
Regarding the vars_files, use import statements in the vars/main.yml of the first role? I have multiple vars files under vars/ that are specific to the vcenters
and vlans. Using vars_files and variables in the Ansible Tower Survey gives the Admins a way to customize the builds to the environment (which works well!).
Thank you!
Does the vmware-windows role need the vars defined from the vars_files? If so then the role itself should include them inside it’s task file(s). Move the vars_files inside tasks/main.yml. Anything the role does after that will get the value of those vars definitions.
The vmware-windows role will see the values of network and vc_location that come into the playbook executing the role. I presume they come in as extra_vars from command line or ansible tower.
Walter
Initially, I set up the Ansible Playbook outside of using a role, a plays/, vars/, group_vars/, and collections/ directories. Yes, the network and vc_locations were being passed
in as extra_vars in Anbible Tower via a Survey.
As things have grown, I recently converted that work over to an Ansible role. The conversion worked well and things run accordingly through Ansible Tower. The site.yml is what
is used including the vars_files sans the second role. Now I am working on including the second role for post-processing needs of the deployed vms.
Yes, the vmware-windows role needs variables defined for the vcenter, vlans, etc. Currently, I have multiple ymls built out holding the vars such as:
vlan1.yml, vlan2.yml, etc.
vcenter1.yml, vcenter2.yml, etc.
Doing it like this, I can have a prompt in the Survey for the Admins to customize the deployment. I think I am following you, I can move those yml files over to tasks/ in the first role.
I did indent the second role, having to remove the hyphen from “name.” In doing so, I received two warning:
"[WARNING]: While constructing a mapping from /tmp/bwrap_ … /project/vmware-windows- role/provision.yml, line 3, column 3, found a duplicate dict key (name). Using last defined value only
Windows would be the inventory for the second role
[WARNING]: Could not match supplied host pattern, ignoring: windows
Thanks!
I have perused your reply but can’t dig into it right at the moment. I will get back to it. Hopefully others also will chime in.
Walter
Hi, Walter,
I have everything running as it should. It was my mistake. I didn’t intend the full block in the initial email I sent this morning, only the block for the second role.
The dynamic inventory is generated in the first role and passed to the second, and the end-to-end deployment of instances on VMware now works smoothly.
I haven’t had time to look at restructuring the vars yet but thanks for the input.
Really appreciate it!
Thanks again!