You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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"

原理说明

  1. win_chocolatey_facts模块会在目标Windows机器上收集所有已安装的Chocolatey包信息,并将其存储在ansible_chocolatey.packages变量中——这个变量是一个字典,键为Chocolatey包名,值为对应的包详情。
  2. 每个升级任务中的when条件会检查当前包名是否存在于ansible_chocolatey.packages的键集合中:
    • 若存在,说明包已安装,执行升级操作;
    • 若不存在,直接跳过该任务,不会自动安装包。

这种方式既保留了你需要的单独任务详细输出,又实现了仅升级已安装包的需求。

内容的提问来源于stack exchange,提问作者neohoddr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 21:09:55