如何修改Ansible Playbook实现仅更新已安装的Chocolatey包?
解决方法
要实现仅升级已安装的Chocolatey包,你需要先收集目标机器上已安装的Chocolatey包信息,再通过when条件判断每个包是否已安装,仅对已安装的包执行升级操作。
修改后的Playbook代码
--- - hosts: all tasks: - name: 收集已安装的Chocolatey包信息 win_chocolatey_facts: - name: Update putty on Windows machines win_chocolatey: name: putty state: latest when: "'putty' in ansible_chocolatey.packages" - name: Update WinSCP on Windows machines win_chocolatey: name: winscp state: latest when: "'winscp' in ansible_chocolatey.packages" - name: Update Notepad++ on Windows machines win_chocolatey: name: notepadplusplus state: latest when: "'notepadplusplus' in ansible_chocolatey.packages" - name: Update SQL Server Management Studio on Windows machines win_chocolatey: name: sql-server-management-studio state: latest when: "'sql-server-management-studio' in ansible_chocolatey.packages" - name: Update Firefox on Windows machines win_chocolatey: name: firefox state: latest when: "'firefox' in ansible_chocolatey.packages" - name: Update Google Chrome on Windows machines win_chocolatey: name: googlechrome state: latest when: "'googlechrome' in ansible_chocolatey.packages" - name: Update Brave Browser on Windows machines win_chocolatey: name: brave state: latest when: "'brave' in ansible_chocolatey.packages" - name: Update 7zip on Windows machines win_chocolatey: name: 7zip state: latest when: "'7zip' in ansible_chocolatey.packages" - name: Update TreeSize Free on Windows machines win_chocolatey: name: treesizefree state: latest when: "'treesizefree' in ansible_chocolatey.packages" - name: Update Wireshark on Windows machines win_chocolatey: name: wireshark state: latest when: "'wireshark' in ansible_chocolatey.packages" - name: Update PowerBI data gateway on Windows machines win_chocolatey: name: powerbigateway state: latest when: "'powerbigateway' in ansible_chocolatey.packages" - name: Update RVTools on Windows machines win_chocolatey: name: rvtools state: latest when: "'rvtools' in ansible_chocolatey.packages"
原理说明
win_chocolatey_facts模块会在目标Windows机器上收集所有已安装的Chocolatey包信息,并将其存储在ansible_chocolatey.packages变量中——这个变量是一个字典,键为Chocolatey包名,值为对应的包详情。- 每个升级任务中的
when条件会检查当前包名是否存在于ansible_chocolatey.packages的键集合中:- 若存在,说明包已安装,执行升级操作;
- 若不存在,直接跳过该任务,不会自动安装包。
这种方式既保留了你需要的单独任务详细输出,又实现了仅升级已安装包的需求。
内容的提问来源于stack exchange,提问作者neohoddr
相关产品推荐
相关产品推荐

