Update docs for --tags default, and add some tests (#70939)
Change: - Clarify that not passing `--tags` will cause `ansible_run_tags` to default to `["all"]`. - Add some extra coverage around `ansible_run_tags` Test Plan: - New integration and unit tests Tickets: - Fixes #69619 Signed-off-by: Rick Elrod <rick@elrod.me>
This commit is contained in:
parent
b1cb2553af
commit
14dc4de424
5 changed files with 77 additions and 1 deletions
|
@ -74,7 +74,7 @@ ansible_collection_name
|
||||||
The name of the collection the task that is executing is a part of. In the format of ``namespace.collection``
|
The name of the collection the task that is executing is a part of. In the format of ``namespace.collection``
|
||||||
|
|
||||||
ansible_run_tags
|
ansible_run_tags
|
||||||
Contents of the ``--tags`` CLI option, which specifies which tags will be included for the current run.
|
Contents of the ``--tags`` CLI option, which specifies which tags will be included for the current run. Note that if ``--tags`` is not passed, this variable will default to ``["all"]``.
|
||||||
|
|
||||||
ansible_search_path
|
ansible_search_path
|
||||||
Current search path for action plugins and lookups, i.e where we search for relative paths when you do ``template: src=myfile``
|
Current search path for action plugins and lookups, i.e where we search for relative paths when you do ``template: src=myfile``
|
||||||
|
|
|
@ -318,6 +318,9 @@ class CLI(with_metaclass(ABCMeta, object)):
|
||||||
# process tags
|
# process tags
|
||||||
if hasattr(options, 'tags') and not options.tags:
|
if hasattr(options, 'tags') and not options.tags:
|
||||||
# optparse defaults does not do what's expected
|
# optparse defaults does not do what's expected
|
||||||
|
# More specifically, we want `--tags` to be additive. So we cannot
|
||||||
|
# simply change C.TAGS_RUN's default to ["all"] because then passing
|
||||||
|
# --tags foo would cause us to have ['all', 'foo']
|
||||||
options.tags = ['all']
|
options.tags = ['all']
|
||||||
if hasattr(options, 'tags') and options.tags:
|
if hasattr(options, 'tags') and options.tags:
|
||||||
tags = set()
|
tags = set()
|
||||||
|
|
49
test/integration/targets/tags/ansible_run_tags.yml
Normal file
49
test/integration/targets/tags/ansible_run_tags.yml
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
---
|
||||||
|
- name: verify ansible_run_tags work as expected
|
||||||
|
hosts: testhost
|
||||||
|
gather_facts: False
|
||||||
|
tasks:
|
||||||
|
- debug:
|
||||||
|
var: ansible_run_tags
|
||||||
|
tags:
|
||||||
|
- always
|
||||||
|
|
||||||
|
- debug:
|
||||||
|
var: expect
|
||||||
|
tags:
|
||||||
|
- always
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- ansible_run_tags == ['all']
|
||||||
|
when: expect == 'all'
|
||||||
|
tags:
|
||||||
|
- always
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- ansible_run_tags|sort == ['tag1', 'tag3']
|
||||||
|
when: expect == 'list'
|
||||||
|
tags:
|
||||||
|
- always
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- ansible_run_tags == ['untagged']
|
||||||
|
when: expect == 'untagged'
|
||||||
|
tags:
|
||||||
|
- always
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- ansible_run_tags|sort == ['tag3', 'untagged']
|
||||||
|
when: expect == 'untagged_list'
|
||||||
|
tags:
|
||||||
|
- always
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- ansible_run_tags == ['tagged']
|
||||||
|
when: expect == 'tagged'
|
||||||
|
tags:
|
||||||
|
- always
|
|
@ -47,3 +47,24 @@ export LC_ALL=en_US.UTF-8
|
||||||
# Run templated tags
|
# Run templated tags
|
||||||
[ "$("${COMMAND[@]}" --tags tag3 | grep -F Task_with | xargs)" = \
|
[ "$("${COMMAND[@]}" --tags tag3 | grep -F Task_with | xargs)" = \
|
||||||
"Task_with_always_tag TAGS: [always] Task_with_templated_tags TAGS: [tag3]" ]
|
"Task_with_always_tag TAGS: [always] Task_with_templated_tags TAGS: [tag3]" ]
|
||||||
|
|
||||||
|
# Run tagged
|
||||||
|
[ "$("${COMMAND[@]}" --tags tagged | grep -F Task_with | xargs)" = \
|
||||||
|
"Task_with_tag TAGS: [tag] Task_with_always_tag TAGS: [always] Task_with_unicode_tag TAGS: [くらとみ] Task_with_list_of_tags TAGS: [café, press] Task_with_csv_tags TAGS: [tag1, tag2] Task_with_templated_tags TAGS: [tag3]" ]
|
||||||
|
|
||||||
|
# Run untagged
|
||||||
|
[ "$("${COMMAND[@]}" --tags untagged | grep -F Task_with | xargs)" = \
|
||||||
|
"Task_with_always_tag TAGS: [always] Task_without_tag TAGS: []" ]
|
||||||
|
|
||||||
|
# Skip 'always'
|
||||||
|
[ "$("${COMMAND[@]}" --tags untagged --skip-tags always | grep -F Task_with | xargs)" = \
|
||||||
|
"Task_without_tag TAGS: []" ]
|
||||||
|
|
||||||
|
# Test ansible_run_tags
|
||||||
|
ansible-playbook -i ../../inventory ansible_run_tags.yml -e expect=all "$@"
|
||||||
|
ansible-playbook -i ../../inventory ansible_run_tags.yml -e expect=all --tags all "$@"
|
||||||
|
ansible-playbook -i ../../inventory ansible_run_tags.yml -e expect=list --tags tag1,tag3 "$@"
|
||||||
|
ansible-playbook -i ../../inventory ansible_run_tags.yml -e expect=list --tags tag1 --tags tag3 "$@"
|
||||||
|
ansible-playbook -i ../../inventory ansible_run_tags.yml -e expect=untagged --tags untagged "$@"
|
||||||
|
ansible-playbook -i ../../inventory ansible_run_tags.yml -e expect=untagged_list --tags untagged,tag3 "$@"
|
||||||
|
ansible-playbook -i ../../inventory ansible_run_tags.yml -e expect=tagged --tags tagged "$@"
|
||||||
|
|
|
@ -83,6 +83,9 @@ class TestTaggable(unittest.TestCase):
|
||||||
def test_evaluate_tags_special_all_in_only_tags(self):
|
def test_evaluate_tags_special_all_in_only_tags(self):
|
||||||
self.assert_evaluate_equal(True, ['tag'], ['all'], ['untagged'])
|
self.assert_evaluate_equal(True, ['tag'], ['all'], ['untagged'])
|
||||||
|
|
||||||
|
def test_evaluate_tags_special_all_in_only_tags_and_object_untagged(self):
|
||||||
|
self.assert_evaluate_equal(True, [], ['all'], [])
|
||||||
|
|
||||||
def test_evaluate_tags_special_all_in_skip_tags(self):
|
def test_evaluate_tags_special_all_in_skip_tags(self):
|
||||||
self.assert_evaluate_equal(False, ['tag'], ['tag'], ['all'])
|
self.assert_evaluate_equal(False, ['tag'], ['tag'], ['all'])
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue