返回

Ansible 中使用条件运行 `import_playbook`

Linux

使用条件运行 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 以获取详细的输出。它将显示条件检查的结果。
  • 我可以嵌套条件吗?
    • 是的,你可以通过使用 orand 运算符嵌套条件。
  • 可以在 import_playbook 中传递参数吗?
    • 是的,可以使用 extra_vars 选项传递参数。