Назад | Перейти на главную страницу

Переопределение ansible_skip_tags в playbook

Мне удалось управлять контрольной переменной 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 уже проанализирован на этом этапе.