我的库存文件保持相同的主机逻辑数,但ansible_host的数量可能不同:
案例1,三个逻辑,主持三个ansible_hosts
all:
hosts:
db:
ansible_host: db.example.com
apps:
ansible_host: app.example.com
proxy:
ansible_host: proxy.example.com
案例2,三个逻辑,主持一个ansible_host
all:
hosts:
db: &ahost
ansible_host: allinone.example.com
apps:
<<: *ahost
proxy:
<<: *ahost
在我的剧本中,有一些适用于所有人的常见任务, 喜欢 yum
- name: "Install OS packages"
yum: pkg={{item}} state=installed
with_items:
- p1
- p2
- ... (quite a lot)
它们可能在运行时发生碰撞,因为ansible试图以并行方式运行它们,这会导致yum会话锁定。
我想知道如何告诉ansible跳过在 apps 上安装os软件包 代理一旦在案例2中已经在 db 上启动了yum。 (除了摆脱平行主义外)
答案 0 :(得分:0)
您可以利用Ansible File模块。在Install OS Packages
步之前,您可以创建一个临时文件。
- name: "Create temporary file to lock yum"
file:
path: /tmp/yum.lock
state: present
接下来,您将创建一个任务以检查锁定文件是否存在。一旦它在第一次连接期间创建,我们期望它存在。
- name: "Check if yum lock file exists"
stat:
path: /tmp/yum.lock
register: yum_lock
然后,修改你的任务:
- name: "Install OS packages"
yum: pkg={{item}} state=installed
when: yum_lock.stat.exists == False
with_items:
- p1
- p2
- ... (quite a lot)
最后,添加清理任务以删除yum lock文件。
- name: "Delete temporary file to lock yum"
file:
path: /tmp/yum.lock
state: absent