如何判断Ansible playbook是由ansible-pull执行而不是ansible-playbook

81次阅读
没有评论

问题描述

有用户想要通过一个when条件来判断当playbook由ansible-pull执行时满足条件。

解决方案

请注意以下操作注意版本差异及修改前做好备份。
有两种方法可以测试playbook是否通过ansible-pull应用:

方法1:检查ansible_connection

在playbook中可以通过检查ansible_connection变量来判断是否是通过ansible-pull执行的。然而,这种方法并不是在所有情况下都适用,因为本地连接(local)也可能会在playbook中被常规使用,导致判断不准确。

以下是在playbook中如何使用这种方法的步骤:

  1. 打开你的Ansible playbook文件。
  2. 在需要进行判断的任务中,使用when条件来检查ansible_connection是否为local,如果是则表示是通过ansible-pull执行的。

示例:

---
- name: Example playbook
  hosts: all
  tasks:
    - name: Some task
      debug:
        msg: "This task is executed via ansible-pull."
      when: ansible_connection == "local"

方法2:传递额外变量

另一种方法是在使用ansible-pull命令执行playbook时,通过传递额外的变量来标识是通过ansible-pull执行的。

以下是如何在执行ansible-pull命令时传递额外变量的步骤:

  1. 打开终端或命令行界面。
  2. 使用以下命令执行ansible-pull,并通过--extra-vars选项传递额外变量,例如:ansible-pull --extra-vars "ansible_pull=true" playbook.yml

示例:

ansible-pull --extra-vars "ansible_pull=true" playbook.yml

在playbook中,你可以使用传递的变量来判断是否是通过ansible-pull执行的。

示例:

---
- name: Example playbook
  hosts: all
  tasks:
    - name: Some task
      debug:
        msg: "This task is executed via ansible-pull."
      when: ansible_pull == "true"

请注意,以上两种方法都有其适用范围和限制。选择哪种方法取决于你的具体情况和需求。

参考文献
Ansible Documentation – Conditionals

请始终确保在实际应用之前先进行适当的测试,以确保所选方法在你的环境中正常工作。

正文完