在Ansible中如何在特定主机上运行任务

47次阅读
没有评论

问题描述

正在编写一个 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 委派关键字来实现在特定主机上运行任务的目标。根据你的实际需求和清单设置,选择适合你情况的方法即可。

请注意,这里提供的解决方案是基于你的问题描述和已有的回答数据。具体操作可能因为版本变化或其他因素而略有不同,建议在实施前做好充分的准备和备份工作。

正文完