Adding ansible-playbook --list-tags myplaybook.yaml

1,082 views
Skip to first unread message

Michael Nelson

unread,
Mar 7, 2014, 10:31:45 AM3/7/14
to ansible...@googlegroups.com
Hi!

Just a heads-up that I'm thinking of adding a --list-tags option to ansible-playbook. Let me know if there's a reason why that wouldn't be a good idea, or it's not needed etc.

My use-case is that I'd like to know in advance whether a tag is included in the playbook, rather than running the playbook and erroring. I can currently work around this by parsing the error output of `ansible-playbook --tags random-hash myplaybook`, but I'd like a nicer way :)

More background for anyone interested:

I'm using ansible to make writing juju-charms [1] much more fun. juju has a number of lifecycle hooks that are run as a service relates to other services (eg., an app server to a database backend). These hooks can be written in anything you like, but we've created some helpers so that when a specific hook is called, it just results in a local ansible playbook being run using the --tags hook-name . So all the state can be declared with all the goodness of playbooks and/or roles, rather than bash scripts or python code.

Currently as a charm author, you need to register the ansible-supported hook names by default [2], but I'd like to make that transparent.

Any feedback welcome, I'll get started on a pull-request if I don't hear back.
Thanks

[1] https://juju.ubuntu.com/charms/
[2] eg https://github.com/absoludity/charm-bootstrap-ansible/blob/master/hooks/hooks.py
[3] http://micknelson.wordpress.com/2013/11/08/juju-ansible-simpler-charms/

Michael Nelson

unread,
Mar 7, 2014, 10:52:27 AM3/7/14
to ansible...@googlegroups.com


On Friday, 7 March 2014 16:31:45 UTC+1, Michael Nelson wrote:
Hi!

Just a heads-up that I'm thinking of adding a --list-tags option to ansible-playbook. Let me know if there's a reason why that wouldn't be a good idea, or it's not needed etc.

My use-case is that I'd like to know in advance whether a tag is included in the playbook, rather than running the playbook and erroring. I can currently work around this by parsing the error output of `ansible-playbook --tags random-hash myplaybook`, but I'd like a nicer way :)

Actually, I've just taken a look at the code and seen that, given that I'm already using python helpers for the ansible support, I could just use ansible.playbook.Play().compare_tags() directly. So no change needed :)

Michael Nelson

unread,
Apr 16, 2014, 3:38:42 AM4/16/14
to ansible...@googlegroups.com
Just getting back to this - it seems quite complicated to get the tags
for a playbook... here's the helper function that I have:

{{{
def get_tags_for_playbook(playbook_path):
"""Return all tags within a playbook."""
# utils imported first to avoid circular import failure.
import ansible.utils
import ansible.callbacks
import ansible.playbook
stats = ansible.callbacks.AggregateStats()
callbacks = ansible.callbacks.PlaybookRunnerCallbacks(stats)
runner_callbacks =
ansible.callbacks.PlaybookRunnerCallbacks(stats)
playbook = ansible.playbook.PlayBook(playbook=playbook_path,

callbacks=callbacks,

runner_callbacks=runner_callbacks,
stats=stats)
myplay = ansible.playbook.Play(playbook, ds=playbook.playbook[0],

basedir=os.path.dirname(playbook_path))

_, playbook_tags = myplay.compare_tags([])
playbook_tags.remove('all')
return playbook_tags
}}}

Perhaps it is worth a feature request - let me know if this should be
easier or if I've missed something above?

Thanks.
-Michael

Michael DeHaan

unread,
Apr 16, 2014, 10:19:02 PM4/16/14
to ansible...@googlegroups.com
So yeah.

There's been interest in adding such before, my requirement is usually that it uses the Playbook API to do these things.

Some things are going to require a minor bit of refactoring to make some of that later.

I generally want to avoid special code specific to /usr/bin/ansible commands that are not contained in playbook API code.

I'd generally think needing the stats class would be "not it".

Workaround for now has been to just specify an invalid tag and it will list available tags, so that is pretty close, but it happens
as a result of a "live" run, so I understand that's not quite what you want.

Example:

ansible-playbook foo.yml --list-tags NotATagNameJustShowMeTheTags




--
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/CABgyWipybYRJGkwt4MgXgOZcWNEE4bYOiZZeuac8PeTCApebzw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Michael DeHaan

unread,
Apr 16, 2014, 10:19:18 PM4/16/14
to ansible...@googlegroups.com
Sorry that --list-tags was meant to be just "--tags"

ansible-playbook foo.yml --tags NotATagNameJustShowMeTheTags

Andriy Podanenko

unread,
Jan 19, 2015, 11:06:19 AM1/19/15
to ansible...@googlegroups.com
Are there any activity for this ?
It is really must have feature because of impossibility to get all tags within huge playbooks, developed by large team.

четвер, 17 квітня 2014 р. 05:19:18 UTC+3 користувач Michael DeHaan написав:
Reply all
Reply to author
Forward
0 new messages