Как получить разницу между дисками до и после добавления нового диска
Я готовлю сборник сценариев для поиска недавно отсканированного жесткого диска из vmware. Я использовал приведенную ниже фильтрацию, чтобы получить номер «нет». жестких дисков:
before_add: "{{ hostvars[inventory_hostname].ansible_devices.keys() | select('string') | list }}"
ВЫХОД-['sr0', 'sda', 'sdb', 'sdc', 'dm-2', 'dm-3', 'dm-0', 'dm-1']
затем добавьте новый жесткий диск, используя модуль vmware_guest_disk, а затем я запустил модуль настройки, чтобы получить последний номер. дисков
after_add: "{{ hostvars[inventory_hostname].ansible_devices.keys() | select('string') | list }}"
ВЫХОД: ['sr0', 'sda', 'sdb', 'sdc', 'sdd', 'dm-2', 'dm-3', 'dm-0', 'dm-1']
Поскольку управляемый хост является удаленным узлом, я не могу думать о поиске и фильтрации различий. Подскажите пожалуйста, как получить разницу: "SDD"
1 ответ
Добавление пользовательских фактов — это то, что вам нужно. Это служит самой цели хранения постоянных пользовательских фактов. Например, создайте каталог для пользовательских фактов и отобразите переменную ansible_local .
- name: Create directory for ansible custom facts
ansible.builtin.file:
state: directory
recurse: true
path: /etc/ansible/facts.d
- debug:
var: ansible_local
Переменная ansible_local должна быть пустым словарем, если вы ранее не настроили пользовательские факты.
ansible_local: {}
Установите переменные before_add и after_add и отобразите разницу
- set_fact:
before_add: "{{ ansible_local.devices.general.before_add|
default([]) }}"
after_add: "{{ hostvars[inventory_hostname].ansible_devices.keys()|
select('string')|list }}"
- debug:
msg: "{{ after_add|difference(before_add) }}"
Когда вы запускаете игру в первый раз, переменная before_add будет пустым списком, и задача отладки должна отображать все устройства, например
msg:
- loop1
- nvme0n1
...
Здесь начинается самая важная часть хранения постоянного пользовательского факта. Например, скопируйте словарь в файл
- name: Install custom devices fact
ansible.builtin.copy:
content: |
{"general": {"before_add": {{ after_add }} }}
dest: /etc/ansible/facts.d/devices.fact
Когда вы снова запустите игру, настройка должна прочитать ansible_local.
ansible_local:
devices:
general:
before_add:
- loop1
- nvme0n1
...
и не должно быть никакой разницы между before_add и after_add
msg: []
Если вы добавите устройство, отладка должна отобразить разницу, например
msg:
- sda
Но, разница будет пустой, если вы вытащите устройство. Если вы хотите видеть как добавленные, так и удаленные устройства, используйте symmetric_difference вместо разницы , например
- debug:
msg: "{{ after_add|symmetric_difference(before_add) }}"