Ansible:将所有软件包升级到最新版本,除了 foo、bar 之外

标签 ansible

如何编写 Ansible playbook 来升级除 Java 和 PostgreSQL 之外的所有 Ubuntu 软件包?

通过以下任务,我可以将所有软件包升级到最新版本:

- name: Upgrade all packages to the latest version
  apt:
    name: "*"
    state: latest

有没有办法添加要忽略更新/升级的软件包列表?

更新:

感谢 Vladimir 的回答,我更新了 Ansible Playbook:

---
- hosts: DEP-GEOSRV1
  become: yes
  tasks: 

  - name: disable upgrade of java & postgresql
    dpkg_selections:
      name: openjdk-8-jre
      selection: hold
    dpkg_selections:
      name: postgresql-9.3
      selection: hold
    dpkg_selections:
      name: postgresql-server-dev-9.3
      selection: hold

  - name: Upgrade all packages to the latest version except java & postgresql
    apt:
      name: "*"
      force_apt_get: true
      state: latest

不确定此剧本是否正确。有人可以确认一下吗?

最佳答案

设置selection: hold对于特定的包。例如

- dpkg_selections:
    name: openjdk-8-jre
    selection: hold

FWIW。请参阅example .

关于Ansible:将所有软件包升级到最新版本,除了 foo、bar 之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58712192/

相关文章:

docker - 使用 Ansible docker_service 模块将服务部署到 swarm

php - 使用 ansible 运行 php 脚本会抛出错误

ansible - 不同环境的独立 Ansible Vaults?

git - Vagrant shell 和 ansible 配置因 bitbucket 失败

Ansible 处理程序仅在更改时运行 : true

linux - ansible如何输入私钥密码

python - Ansible Python API - 如何获取在 vars_files、host_vars、group_vars 中定义的变量

ansible - (Ansible) 如何在模板/Jinja2 中获取一组主机的所有库存变量作为列表?

linux - Ansible 跳过我的标签

loops - 如何在ansible循环中跳过空值