返回
Ansible 中使用条件运行 `import_playbook`
Linux
2024-03-20 17:26:57
使用条件运行 Ansible 中的 import_playbook
在使用 Ansible 编写 Playbook 时,你可能会遇到需要在特定条件下执行任务的情况。例如,你可能希望在仅适用于特定操作系统的机器上运行某些任务。
**子
Ansible 提供了 import_playbook
任务,允许你从另一个 Playbook 中导入任务。但是,如果你希望在特定条件下运行 import_playbook
,你可能会遇到错误。
例如,假设你希望在条件仅适用于 RHEL 8 机器时从 import_playbook
运行 run_tasks_only_on_rhel8.yml
:
- import_playbook: "{{playbook_folder}}/run_tasks_only_on_rhel8.yml"
when: ansible_facts['distribution_major_version'] == "8"
执行此 Playbook 会产生以下错误:
条件检查 'ansible_facts['distribution_major_version'] == "8"' 失败。错误是:评估条件(ansible_facts['distribution_major_version'] == "8")时出错:'dict 对象' 没有属性 'distribution_major_version'
**子
为了使用条件运行 import_playbook
任务,你需要使用正确的条件语法:
- import_playbook: "{{playbook_folder}}/run_tasks_only_on_rhel8.yml"
when: ansible_distribution_major_version == "8"
在这里,ansible_distribution_major_version
是正确的变量名,用于获取 RHEL 的主要版本号。
**子
- 确保在 Playbook 中定义了变量
playbook_folder
,其中包含要导入的 Playbook 文件夹的路径。 - 条件语句应放在下一行,缩进两格。
- 如果条件为 false,则不会运行
import_playbook
任务。 - 建议使用具体条件语句,如
ansible_distribution_major_version == "8"
, 以避免在其他发行版上运行任务时出错。
**子
- 为什么我的
import_playbook
任务没有运行?- 确保条件语句正确,变量定义正确,并且
playbook_folder
变量包含了正确的路径。
- 确保条件语句正确,变量定义正确,并且
- 我可以在
import_playbook
中使用任何条件吗?- 是的,你可以使用任何有效的 Ansible 条件表达式。
- 如何调试
import_playbook
条件?- 使用
-vvv
选项运行 Playbook 以获取详细的输出。它将显示条件检查的结果。
- 使用
- 我可以嵌套条件吗?
- 是的,你可以通过使用
or
和and
运算符嵌套条件。
- 是的,你可以通过使用
- 可以在
import_playbook
中传递参数吗?- 是的,可以使用
extra_vars
选项传递参数。
- 是的,可以使用