Мне удалось управлять контрольной переменной Ansible, которую вы обычно указываете в командной строке с помощью set_fact
модуль; Такие как
- name: Use a default SSH key for this playbook
set_fact: ansible_ssh_private_key_file={{ whatever_default_location }}
when: ansible_ssh_private_key_file is not defined
Но я не могу расширить пропущенные теги, предоставленные --skip-tags
параметр командной строки. Следующая пьеса
---
- hosts: localhost
tasks:
- set_fact: ansible_skip_tags={{ ansible_skip_tags + ['foo'] }}
- debug: msg="Foo"
tags:
- foo
дает мне следующий результат:
PLAY [localhost] ******************************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************************************************************************************************************
ok: [localhost]
TASK [set_fact] *******************************************************************************************************************************************************************************************************************************
ok: [localhost]
TASK [debug] **********************************************************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "Foo"
}
PLAY RECAP ************************************************************************************************************************************************************************************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0
в то время как ожидаемый результат достигается с использованием --skip-tags foo
в командной строке:
PLAY [localhost] ******************************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************************************************************************************************************
ok: [localhost]
TASK [set_fact] *******************************************************************************************************************************************************************************************************************************
ok: [localhost]
PLAY RECAP ************************************************************************************************************************************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0
Есть ли способ указать дополнительные пропущенные теги в playbook?
Нет ansible_skip_tags
устанавливается параметрами командной строки очень рано и не может быть изменен. Я считаю, что он используется при первоначальном разборе плейбука и, как таковой, не может быть определен из самого плейбука. Обратите внимание на следующее:
---
- hosts: localhost
connection: local
gather_facts: false
tasks:
- set_fact: ansible_skip_tags="{{ ansible_skip_tags }} + ['foo']"
- debug: var=ansible_skip_tags
Это должно изменить переменную, а затем распечатать измененную версию, однако ...
$ ansible-playbook -i "localhost," test.yml --skip-tags=bar -v
PLAY [localhost] ********************************************************************
TASK [set_fact] *********************************************************************
ok: [localhost] => {"ansible_facts": {"ansible_skip_tags": ["bar", "foo"]}, "changed": false}
TASK [debug] ************************************************************************
ok: [localhost] => {
"ansible_skip_tags": [
"bar"
]
}
PLAY RECAP **************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0
Как видите, хотя кажется, что переменная была успешно изменена, при ее печати значение фактически не было изменено. Даже если бы это изменилось, я думаю, что уже слишком поздно, чтобы быть полезным, поскольку playbook уже проанализирован на этом этапе.