首页 > 解决方案 > 仅在一台服务器上运行 Ansible 任务 - AWS

问题描述

我的 ansible 任务在我的所有 api_servers 中运行,我将其限制为仅在一个 IP(api_server 之一)上运行我添加了 run_once: true 但它没有帮助。

好心提醒。编辑 :

下面的工作吗?我有 10 个 app_servers 实例正在运行,我希望任务仅在一个 app_server 上运行

run_once: true
when:
    - inventory_hostname == groups['app_servers'][0]

我的库存文件在哪里

[app_servers]
prod_app_[1:4]

标签: amazon-web-servicesansible

解决方案


我会这样写我的剧本:

 ---
 # Run on all api_servers
 - hosts: api_servers
   tasks:
   - name: do something on all api_servers
     #...

 # Run only on one api_server e.q. api_server_01
 - hosts: api_server_01
   tasks:
   - name: Gather data from api_server_01 
     #...

另一种选择是使用when:或运行带有该--limit选项的剧本

---
- hosts: all
  tasks:
  - name: do something only when on api_server_01
    #...
    when: inventory_hostname == "api_server_01"

编辑:在这里,您将在一个示例中看到所有选项:

---
- hosts: all
  tasks:
  - debug: msg="run_once"
    run_once: true
  - debug: msg=all
  - debug: msg="run on the first of the group"
    when: inventory_hostname == groups['app_servers'][0]

# Option with separated hosts, this one will be faster if gather_facts is not tuned.
- hosts: app_servers[0]
  tasks:
  - debug: msg="run on the first of the group"

推荐阅读