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 On Wed, Apr 16, 2014 at 3:38 AM, Michael Nelson <[email protected]>wrote: > On Fri, Mar 7, 2014 at 4:52 PM, Michael Nelson <[email protected]> > wrote: > > > > > > 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 :) > > > > 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 > > -- > 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 post to this group, send email to [email protected]. > 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. > -- 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 post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/CA%2BnsWgw6%3DqNYyJXcrdPYM%2B%2Bqg4vL_6GuAa-e%2BZiKBkYG7haWNA%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
