如何解决多台主机上的localhost中的Ansible Perform Tasks
我正在计划一个Ansible剧本,该剧本将查询Windows主机上特定.exe文件的版本号,然后在Windows主机上安装的版本与Ansible控制器Linux机器上存储的最新版本(“ localhost” ”),并将diff版本部署到Windows主机。
我的剧本看起来像:
- hosts: winClients
gather_facts: False
tasks:
- name: check exe file version
win_file_version:
path: C:\my.exe
register: exe_file_version
- name: Set client version
set_fact:
winClientExeVersion: "{{ exe_file_version.win_file_version.file_version }}"
然后,在localhost上,我有每个版本的文件夹,我想在最新版本和winClients上的版本之间生成差异。版本存储在本地主机上的版本号命名的文件夹中,例如MyVersions/1.0.0.0/abc.exe,abc.dll,aaa.txt,...
和MyVersions/1.0.0.1/abc.exe,...
等。我有一个特殊的文件夹MyVersions/LatestVersion/
,其中始终包含最新版本。所以我需要类似的东西:
- hosts: localhost
gather_facts: False
tasks:
- name: check latest version on server using PEV
shell: peres -v /home/user/MyVersions/LatestVersion/My.exe | awk '{print $3}'
register: latest_file_version
- name: Set server version
set_fact:
serverLatestVersion: "{{ latest_file_version.stdout }}"
- name: If versions differ,generate diff between client and latest versions to temp DiffFolder,then delete empty folders
shell: rsync -rvcm --compare-dest=../{{hostvars.winClients.winClientExeVersion}} . ../DiffFolder && find ../DiffFolder -depth -type d -empty -delete
args:
chdir: /home/user/MyVersions/LatestVersion
when: serverLatestVersion != hostvars.winClients.winClientExeVersion
然后我使用win_copy
将生成的差异复制到Windows客户端。
现在,当winClients
仅代表一个特定客户端时,所有这些工作正常。
我的问题是,如何对一组客户进行处理,即如果winClients
代表一组而不是一台特定的计算机?当其版本号与服务器上的最新版本不同时,如何根据其先前检索的版本号分别为每个客户端生成diff(每个客户端可能安装了不同的版本)?
winClients
上部将为每个客户端分配版本号,问题在于localhost
任务及其when
条件。
解决方法
事实证明这很简单:with_items
可以解决问题,以后也可以在when
中引用它。
示例:
- hosts: localhost
gather_facts: False
tasks:
- name: Notify if versions differ
debug:
msg: "client and server versions differ: Server: {{ serverLatestVersion}},Client: {{ hostvars[item]['winClientExeVersion'] }}"
with_items: "{{ groups['clients'] }}"
when: serverLatestVersion != hostvars[item]['winClientExeVersion']
这将循环遍历clients
组中的客户端,对于每个版本与服务器版本不同的客户端,请在debug中进行通知。
可以根据when
条件,对只需要对相关客户端执行的每个任务(复制,rsync等)使用类似的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。