How do you avoid running same roles multiple times when including playbooks?

110 views
Skip to first unread message

jacek.sni...@agilone.com

unread,
Aug 19, 2016, 5:50:21 PM8/19/16
to Ansible Project
Short version:
Why does Ansible keep running '-include: mysql-cluster.yml' whenever it encounters it? Can't it recognize this was already executed once?

Long version:
I am trying to find a good way to organize Ansible scripts so that they meet these requirements:
- Developers can run their project and not worry about running any dependencies manually
- Have a master playbook describing our whole infrastructure (site.yml) and not call dependencies multiple times even though they already run.
 
We're running a mid size setup with site.yml that is a list of other playbooks that we include. 
# file: site.yml
# This is a top level playbook representing everything in Polaris.
# It includes subplaybooks for independent collections of modules that may be deployed together.

# Infrastructure
- include: cdh5.yml
- include: memcached.yml
- include: myAPI_1.yml
- include: myAPI_2.yml

( and so on )

The myAPI_1 and myAPI_2 playbook look like this:
file: myAPI_1.yml
---

- include: mysql-cluster.yml

- name: Memcached - Setup
  hosts: memcached
  roles:
    - memcached
  tags:
    - memcached

- name: My API 1 - Setup
  hosts: myapis
  roles:
    - repository
    - oracle-java
    - myAPIs/myAPI_1
   tags:
    - myAPI_1



When running site.yml, how do I avoid calling running MySQL-cluster playbook twice? Once included via myAPI_1, second time via myAPI_2.
For developers, I want them to be able to run myAPI_1.yml and not worry about running any other dependencies.

I tried doing this with TAGS, so developers would always launch site.yml with '--tags=myAPI1' but for a large site.yml this takes a long time and leaves a lot irrelevant logging.

Using meta dependencies works only for roles, not playbooks.

Dick Davies

unread,
Aug 20, 2016, 6:28:45 AM8/20/16
to ansible list
Use a when: clause, or make the included files tasks idempotent.
> --
> 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 post to this group, send email to ansible...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/bdf52ade-9cbb-45fa-8b03-fc789aa515f7%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

Jacek Sniecikowski

unread,
Aug 22, 2016, 2:17:33 PM8/22/16
to Ansible Project, di...@hellooperator.net
So basically I will need to set facts for every major playbook once it succeeds and then check for it?
I thought Ansible was idempotent in this way by default
Reply all
Reply to author
Forward
0 new messages