仅选择 ansible 组中的 1 个节点

2 ansible

我有一个 ansible 清单文件,如下所示:

[database]
172.29.225.95 is_master=true
172.29.225.93 is_master=false
172.29.225.94 is_master=false
Run Code Online (Sandbox Code Playgroud)

我只想在主节点上运行我的剧本,172.29.225.95但是 Ansible 中是否有一种方法可以简单地选择一个我想在其上运行剧本的节点?

我试过一个肮脏的黑客。它只是在我的库存文件中添加一个新条目并仅使用该组。

[database-master]
172.29.225.95
Run Code Online (Sandbox Code Playgroud)

进而

- name: Perform Health Checks.
  hosts: database-master
  tasks:
    - name: Check Postgres cluster status.
      shell: /usr/efm-2.0/bin/efm cluster-status efm
      register: output
Run Code Online (Sandbox Code Playgroud)

但我觉得这只是一种解决方法,而不是一个可靠的解决方案。所以只与[database]组一起工作,我可以让 Ansible 只运行剧本172.29.225.95吗?

小智 5

我想您可以使用 ansible-playbook 可执行文件的 --limit 选项,如文档中所述


Mic*_*her 5

您可以在您的任务中使用run_once选项。这告诉您的 playbook 仅在您组的第一个主机上运行任务。如果您有一个特定的主机可以运行它,您可以将它与delegate_to结合使用

所以在你的例子中,这看起来像这样,而 database-master 只是你主人主机名的占位符:

tasks:
  - name: Check Postgres cluster status.
    shell: /usr/efm-2.0/bin/efm cluster-status efm
    run_once: true
    delegate_to: database-master 
    register: output
Run Code Online (Sandbox Code Playgroud)

另请参阅官方ansible 文档