Действительно, это возможно.Я бы пошел на это, разделив переменные на глобальные переменные для всего инвентаря (например, шлюза - он одинаков для всех или группы серверов) и для каждого сервера.Вы можете сделать это, создав файл со списком инвентаря и списком переменных:
inventory/
my_vms/
hosts
group_vars/
all.yml
south-dc.yml
north-dc.yml
host_vars/
my_vm_1.yml
my_vm_2.yml
Файл hosts
содержит список серверов (виртуальные машины в вашем случае).Он может содержать что-то вроде:
[all]
my_vm_1
my_vm_2
[south-dc]
my_vm_1
[north-dc]
my_vm_2
Каталог host_vars
содержит YAML-файлы с переменными, названными в честь хостов в файле hosts
, т.е. если вы называете свой сервер как my_vm_1
, файл будет называться my_vm_1.yml
group_vars
аналогичен host_vars
, но вы предоставляете переменные, которые являются общими для группы хостов.Специальная группа all
предоставляет глобальные переменные для всех хостов.
Все глобальные переменные могут быть помещены в all.yml
.Например, вы можете поместить их в этот файл:
disk_size_gb: 50
disk_type: thin
hardware_memory_mb: 8192
hardware_num_cpus: 4
Все переменные для каждого хоста будут затем идти в файл инвентаризации host_vars:
vm_fqdn_name: mcdlnxevtp01.menarini.net
vm_name: MCDLNXEVTP01
Таким образом, вы обеспечите последовательный способ категоризацииваш инвентарь дает вам возможность очистить ваш код
Затем вы можете использовать его, просто позвонив по номеру
ansible-playbook -i inventory/my_vms -l my_vm_1 playbook.yml
Если вы хотите запустить playbook для группы серверов, просто запустите его с помощью -l <groupname>
или -l all
для всех серверов в инвентаре.
PS: Вам не нужно помещать серверы в группу [all]
.Это специальная группа, которая содержит все серверы в инвентаре.