Сначала я расскажу немного о том, как теги работают, когда мы используем 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 при работе с загружаемой программой для воспроизведения).
Заключительное примечание. Основная цель использования тегов - иметь динамический контроль над тем, какие задачи должны выполняться в этом конкретном прогоне. Если вы будете жестко закодировать тег (переход к включению), тогда цель будет потеряна.
Итак, вы хотите запустить это, только если указанный тег указан во время работы main.yml? – Shasha99
Я хотел узнать, могу ли я указать тег в main.yml, чтобы он вызывал задачу, помеченную этим тегом в файле уведомлений.yml. Я ищу теперь использовать условные выражения, чтобы это сделать, хотя я все равно хотел бы узнать, возможно ли это с помощью тегов (я считаю, что использование тегов в main.yml неверно). –
Передайте вместо этого переменную и используйте ее в уведомлении. YML. Я не думаю, что теги могут быть переданы для включения. – Shasha99