Executing multiple roles in succession

233 views
Skip to first unread message

Christopher Bachmeyer

unread,
Nov 9, 2022, 5:30:45 PM11/9/22
to Ansible Project
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!

Rowe, Walter P. (Fed)

unread,
Nov 10, 2022, 7:23:04 AM11/10/22
to ansible...@googlegroups.com
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
--
Walter Rowe, Division Chief
Infrastructure Services, OISM
Mobile: 202.355.4123

--
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 ansible-proje...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/907f209c-2a3a-465e-95a3-ae82c8f27d0bn%40googlegroups.com.

Christopher Bachmeyer

unread,
Nov 10, 2022, 9:54:17 AM11/10/22
to Ansible Project
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! 

Rowe, Walter P. (Fed)

unread,
Nov 10, 2022, 10:26:41 AM11/10/22
to ansible...@googlegroups.com
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
--
Walter Rowe, Division Chief
Infrastructure Services, OISM
Mobile: 202.355.4123

Christopher Bachmeyer

unread,
Nov 10, 2022, 12:28:57 PM11/10/22
to Ansible Project
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!

Rowe, Walter P. (Fed)

unread,
Nov 10, 2022, 12:55:06 PM11/10/22
to ansible...@googlegroups.com
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
--
Walter Rowe, Division Chief
Infrastructure Services, OISM
Mobile: 202.355.4123

Chris Bachmeyer

unread,
Nov 10, 2022, 10:14:52 PM11/10/22
to ansible...@googlegroups.com
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!

You received this message because you are subscribed to a topic in the Google Groups "Ansible Project" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/ansible-project/QkK5JoKYg5c/unsubscribe.
To unsubscribe from this group and all its topics, send an email to ansible-proje...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/365BF4EA-2EA0-4463-BB85-FCC10F52C006%40nist.gov.
Reply all
Reply to author
Forward
0 new messages