2016-10-21 2 views
0

Я пытаюсь вызвать игру-версию v2.1 (notifications.yml) из другой пьесы с помощью оператора include. Я хотел бы указать тег, а также передать параметр для вызываемого playbook (изнутри учебника, в котором есть загружаемая программа). Я смог заставить это работать без тега, но не может заставить его работать с тегом. Это возможно даже (без параметров командной строки), и если да, то синтаксис/правильный способ достижения этой цели:вызов незанятой пьесы с тегом и параметром

main.yml

- include: playbooks/notifications.yml 
    tags: ['slack'] 
    slack_msg: "test" 

notifications.yml

--- 
- connection: local 
    hosts: 127.0.0.1 
    tasks: 
    - name: Send notification message via Slack 
     tags: 
     - slack 
     local_action: 
     module: slack 
     domain: changed.slack.com 
     token: "{{ slack_token }}" 
     msg: "{{ slack_msg }}" 
     channel: "{{ slack_channel }}" 
     username: "{{ slack_username }}" 

    - name: Send notification message via Email 
     tags: 
     - email 
     local_action: 
     module: mail 
     host: "smtp.gmail.com" 
     port: "587" 
     username: '[email protected]' 
     password: 'changed' 
     to: "changed <[email protected]>" 
     subject: 'Ansible-report' 
     body: 'System {{ ansible_hostname }} has been successfully provisioned. User {{ ansible_user_id }}' 
+1

Итак, вы хотите запустить это, только если указанный тег указан во время работы main.yml? – Shasha99

+0

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

+0

Передайте вместо этого переменную и используйте ее в уведомлении. YML. Я не думаю, что теги могут быть переданы для включения. – Shasha99

ответ

5

Сначала я расскажу немного о том, как теги работают, когда мы используем include/role.

Тегов должны быть указаны при выполнении пьес с использованием --tags и все задачи, поступающие по указанным тегам будут выполняться независимо от того, являются ли они определены в главном файле или ролях/включено files.However там Вот некоторые интересные факты следует отметить:

main.yml

--- 
- hosts: all 
    tasks: 
    - include: includeFile.yml tags=t1 

    - debug: msg="Inside main file" 
     tags: 
     - t2 

includeFile.yml

- debug: msg="task 1 in includeFile" 
    tags: 
    - t1 

- debug: msg="task 2 in includeFile" 
    tags: 
    - t2 

- debug: msg="task 3 in includeFile" 
    tags: 
    - t3 

1. ansible-playbook -i hosts main.yml --tags "t1" 

Теперь, так как этот тег используется первая задача в main.yml, который в том числе файл, поэтому все задачи, определенные в includeFile.yml будет выполняться без дальнейшей проверки тегов в includeFile.yml.

Обратите внимание, что задача в includeFile.yml также использует этот тег, но это не означает, что будет выполняться только эта конкретная задача.


2. ansible-playbook -i hosts main.yml --tags "t2" 

В этом случае, так как первая задача (включить) в main.yml не использует этот тег. это не означает, что никакая задача includeFile.yml не будет выполнена, includeFile.yml будет дополнительно искать указанный тег. И, следовательно, будет выполнена вторая задача main.yml и вторая задача includeFile.yml.


3. ansible-playbook -i hosts main.yml --tags "t3" 

В настоящее время в этом случае только третья задача includeFile.yml будет выполняться (та же логика, как описано во второй точке).



Теперь возвращаясь к вашему вопросу:

Мы можем упомянуть теги только во время выполнения анзибль-PlayBook команд, используя --tags.Так что пока мы не можем передавать теги, включая файл.

Однако, если вы отметите какой-либо тег (который присутствует во включенном файле) во время запуска загрузочной книги, вы пройдете ... но тогда будут выполняться только задачи (в основном файле), которые используют этот конкретный тег. Таким образом, этот вариант не выглядит выполнимым в вашем случае, потому что вам нужно будет пометить все задачи, присутствующие в главном файле, чтобы заставить вас работать.

Так, как мы обсуждали в комментариях, лучше передать фиктивную переменную этому включенному файлу и выполнить задачи условно. Но вы также можете использовать теги, если ваша постановка задачи задана в соответствии с тем, что мы обсуждали выше.

Примечание: Теги могут быть полезны при работе с ролями/включают. Если вы не хотите запускать некоторые задачи, которые могут присутствовать в главной пьесе или в прикрепленной роли/включить, теги прекрасно подходят в этом случае (для этого мы используем теги -skip при работе с загружаемой программой для воспроизведения).

Заключительное примечание. Основная цель использования тегов - иметь динамический контроль над тем, какие задачи должны выполняться в этом конкретном прогоне. Если вы будете жестко закодировать тег (переход к включению), тогда цель будет потеряна.

+1

спасибо за то, что вы вместе –

Смежные вопросы