запускать задание, только если тег НЕ указан - PullRequest
0 голосов
/ 29 января 2019

Скажем, я хочу запускать задачу только в том случае, если в списке тегов, заданных в командной строке, указан НЕ , даже если указаны другие теги.Из них только последний будет работать, как я ожидаю, во всех ситуациях:

- hosts: all
  tasks:
    - debug:
        msg: 'not TAG (won't work if other tags specified)'
      tags: not TAG

    - debug:
        msg: 'always, but not if TAG specified (doesn't work; always runs)'
      tags: always,not TAG

    - debug:
        msg: 'ALWAYS, but not if TAG in ansible_run_tags'
      when: "'TAG' not in ansible_run_tags"
      tags: always

Попробуйте его с различными вариантами CLI, и вы, надеюсь, поймете, почему я нахожу это немного озадачивающим:

ansible-playbook tags-test.yml -l HOST
ansible-playbook tags-test.yml -l HOST -t TAG
ansible-playbook tags-test.yml -l HOST -t OTHERTAG

Вопросы: а) это ожидаемое поведение?и (b) есть ли лучший способ или какая-то логика, которую я упускаю?

Я удивлен, что мне пришлось копаться в (недокументированной, AFAICT) переменной ansible_run_tags.


Поправка: было предложено опубликовать мой фактический вариант использования.Я использую ansible для запуска обновлений системы в системах семейства Debian.В конце я пытаюсь уведомить, требуется ли перезагрузка , если не был указан тег reboot, и в этом случае вызвать перезагрузку (и ждать, пока система вернется к работе).Вот соответствующий фрагмент:

- name: check and perhaps reboot
  block:
  - name: Check if a reboot is required
    stat:
      path: /var/run/reboot-required
      get_md5: no
    register: reboot
    tags: always,reboot

  - name: Alert if a reboot is required
    fail:
      msg: "NOTE: a reboot required to finish uppdates."
    when:
      - ('reboot' not in ansible_run_tags)
      - reboot.stat.exists
    tags: always

  - name: Reboot the server
    reboot:
      msg: rebooting after Ansible applied system updates
    when: reboot.stat.exists or ('force-reboot' in ansible_run_tags)
    tags: never,reboot,force-reboot

Я думаю, что мой первоначальный вопрос (ы) все еще имеет свои достоинства, но я также готов принять альтернативные методы выполнения этой же функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...