Как запускать задачи ansible только при использовании указанного тега c? - PullRequest
1 голос
/ 03 августа 2020
• 1000 1001 *

Я бы хотел условно включить задачи для начальной установки и настройки и запускать их только после передачи тега initial-install.

Например:

# main.yml 
- include: initial_install.yml
  when: tag 'initial-install' specified

- include: initial_configuration.yml
  when: tag 'initial-install' specified

- include: configure.yml

Это упрощенный пример, но если я смогу это понять, я смогу организовать свой список задач в формате, который не запускает ненужные задачи, если playbook не запускается для начальной установки, с тег initial-install.

1 Ответ

1 голос
/ 03 августа 2020

На самом деле существует механизм полной маркировки для вас уже в Ansible.

  • Вы можете запускать только задачи с одним или несколькими тегами (s ):

    ansible-playbook play.yml --tags "some,tags,here"
    

    Где указанные теги являются разделенным запятыми списком всех тегов, которые вы хотите запустить.

  • Или укажите тег (ы), которые вы хотите пропустить

    ansible-playbook play.yml --skip-tags "some,tags,here"
    

И вы просто указываете свои теги в виде списка для любой задачи, которая вам нужна:

- include: initial_install.yml
  tags: initial-install

- include: initial_configuration.yml
  tags: initial-install

- include: configure.yml
  tags:
    - setup
    - reconfiguration
    - else

В вашем случае учтите, что

Добавление тегов: к игре или статически импортированным задачам и ролям эти теги добавляются ко всем содержащимся в них задачам.

Источник: https://docs.ansible.com/ansible/latest/user_guide/playbooks_tags.html#tag -наследование

Также есть набор специальных тегов :

  • always, есть всегда запускается, если специально не пропущено через --skip-tags always
  • never, никогда не запускается, если специально не запрашивается другой тег этой задачи

И набор специальных ключевых слов

  • * 105 3 *, если вы хотите настроить таргетинг на все задачи с тегами в --tags или --skip-tags
  • untagged, если вы хотите настроить таргетинг на все задачи без тегов в --tags или --skip-tags
  • all, если вы хотите настроить таргетинг на все задачи в --tags или --skip-tags

Их можно использовать в вашем случае:

- include: initial_install.yml
  tags:
    - initial-install
    - never

- include: initial_configuration.yml
  tags: 
    - initial-install
    - never

- include: configure.yml
  tags:
    - setup
    - reconfiguration
    - else
  • Запуск этого примера через обычный
    ansible-playbook play.yml
    
    не запустит две первые задачи, но запустит последнюю.
  • Запуск с
    ansible-playbook play.yml --tags "initial-install,all"
    
    запустит все три задачи.

Учитывая сценарий:

- hosts: all
  gather_facts: no  
        
  tasks:
    - debug: 
        msg: initial_install.yml
      tags:
        - initial-install
        - never

    - debug: 
        msg: initial_configuration.yml
      tags: 
        - initial-install
        - never

    - debug: 
        msg: configure.yml
      tags:
        - setup
        - reconfiguration
        - else

Это дает следующие результаты:

  • $ ansible-playbook play.yml 
    
    PLAY [all] **********************************************************************************************************************
    
    TASK [debug] ********************************************************************************************************************
    ok: [localhost] => {
        "msg": "configure.yml"
    }
    
    PLAY RECAP **********************************************************************************************************************
    localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    
  • $ ansible-playbook play.yml --tags "initial-install,all"
    
    PLAY [all] **********************************************************************************************************************
    
    TASK [debug] ********************************************************************************************************************
    ok: [localhost] => {
        "msg": "initial_install.yml"
    }
    
    TASK [debug] ********************************************************************************************************************
    ok: [localhost] => {
        "msg": "initial_configuration.yml"
    }
    
    TASK [debug] ********************************************************************************************************************
    ok: [localhost] => {
        "msg": "configure.yml"
    }
    
    PLAY RECAP **********************************************************************************************************************
    localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...