У меня есть несколько десятков хостов, которые представляют собой смесь CentOS 6 и 7. Недавно я начал использовать Ansible, чтобы управлять ими, но я все еще новичок.
Как и у всех, мне периодически необходимо обновлять пакеты на этих машинах, особенно из соображений безопасности. Однако я не хочу обновлять все пакеты на них, только определенные, которые могут отличаться от машины к машине, в зависимости от ее ролей. Я использовал Ansible ням команда, с состояние = последнееи список конкретных пакетов для обновления этих хостов в прошлом, но только сегодня я заметил, что при запуске этого на хосте, если один из перечисленных пакетов не установлен на этом компьютере, он будет установлен.
Мне нужен способ предоставить Ansible список пакетов, а затем для каждого хоста он будет действовать: - если пакет присутствует, обновите его до последней версии; - если пакета нет, ничего не делать.
Есть ли практический способ сделать это?
Если вы хотите обновить только часть пакетов доступными обновлениями, вы можете попробовать @wurtel. Вам нужно будет зарегистрировать установленные пакеты следующим образом:
- name: Get installed packages.
command: rpm -qa --qf "%{NAME}\n"
register: installed_packages
Затем вы можете определить набор Теоретический фильтр и обновите все пакеты, определенные в списке пакетов, которым разрешено обновлять packages_to_update
.
- name: Update subset of packages.
yum:
name: "{{ item }}"
state: latest
with_items:
- {{ installed_packages | intersect(packages_to_update) }}
Все это кажется немного сложным для обновления yum?
почему бы просто не использовать для этого локальную команду, пока Ansible не разрешит эту опцию?
Такой простой сценарий подойдет.
---
- hosts: dev-systems
remote_user: admin
become: yes
tasks:
- name: Update installed packages.
command: /usr/bin/yum update -y {{item}}
with_items:
- package1
- package2
- package3
- package-etc
Я только что протестировал это и использовал два пакета. тот, который нуждался в обновлении, и тот, который не был установлен. Конечным результатом был обновленный пакет без установленного другого.