我试图在完成另一组主机上的一组任务之前,在远程主机上运行一个脚本。具体来说,我试图在本地 yum 存储库上执行一个脚本,以同步存储库,然后在一组主机上运行 yum 更新。本地存储库服务器不能与要更新的主机位于同一清单列表中,那么我该如何实现这一点?如能得到任何帮助,我将不胜感激。
答案1
我会查看可能的答案。选择最适合您情况的答案
解决方案 1:2 次播放
ansible playbook 可以包含多个按顺序运行的 play。您可以将操作分成两个 play。如果您有多个任务要执行,或者有多个主机需要进行同步(即集群...),那么这可能会更方便。
- name: sync my local yum repo
hosts: my_local_yum_repo_host
tasks:
- name: dummy task to sync repo
debug:
msg: sync repo
- name: update my hosts
hosts: my_hosts_to_upgrade
tasks:
- name: run the upgrade
yum:
name: '*'
state: latest
解决方案 2:委托和 run_once
在这种情况下,我们将所有内容放在同一个剧本中,并使用代表团和run_once
播放一次以更新列表中的所有主机
- name: update my hosts
hosts: my_hosts_to_upgrade
tasks:
- name: dummy task to sync repo
debug:
msg: sync repo
delegate_to: my_local_yum_repo_host
run_once: true
- name: run the upgrade
yum:
name: '*'
state: latest