问题描述
正在编写一个 Ansible playbook 来管理备份,并且想要实现两个不同的任务:
- name: 配置本地机器进行备份
cron:
cron_file: /etc/cron.d/backup
hour: 4
minute: 0
job: /root/do_backup.sh
state: present
name: backup
- name: 配置备份服务器以备新机器
shell:
cmd: "mkdir /backups/{{inventory_hostname}}"
他想知道是否可以告诉 Ansible 第二个任务是要在清单中的另一台机器上执行的。
解决方案
请注意以下操作可能涉及到版本差异,建议在实施前做好备份。
最佳解决方案
在 Ansible 中,你可以使用不同的方法来确保特定任务在特定主机上执行。
方法1:使用 when
条件
如果你的 “other_host” 在 playbook 的清单中,你可以使用 when
关键字来实现。这将仅在 “other_host” 上运行该任务一次。
- name: 配置备份服务器以备新机器
shell:
cmd: "mkdir /backups/{{inventory_hostname}}"
when: inventory_hostname == "other_host"
上述示例中,任务使用 when
条件来判断是否是 “other_host”,如果是则执行任务。
方法2:使用 delegate_to
委派关键字
如果你的 playbook 的清单中不包括 “other_host”,你可以使用 delegate_to
关键字来指定在哪台主机上运行任务。
- name: 配置备份服务器以备新机器
shell:
cmd: "mkdir /backups/{{inventory_hostname}}"
delegate_to: other_host_ip
在上述示例中,delegate_to
关键字将任务委派给指定的主机(使用 IP 或 DNS 名称)。这将在 playbook 清单中的每个主机上运行任务,但实际执行任务的是 “other_host”。
无论你选择哪种方法,都可以实现在特定主机上运行任务的需求。
需要注意的是,如果你使用的是 Ansible 2.5 版本及更早版本,可能需要考虑版本差异。建议查阅对应版本的官方文档以获取更详细的信息。
总结
在 Ansible 中,你可以通过使用 when
条件或者 delegate_to
委派关键字来实现在特定主机上运行任务的目标。根据你的实际需求和清单设置,选择适合你情况的方法即可。
请注意,这里提供的解决方案是基于你的问题描述和已有的回答数据。具体操作可能因为版本变化或其他因素而略有不同,建议在实施前做好充分的准备和备份工作。