Правильный способ определения переменных по умолчанию для всех хостов в Ansible
Есть определение [all:vars]
в моем файле инвентаризации следующим образом:
[all:vars]
ansible_shell_type=bash
ansible_user=certain_user
ansible_ssh_common_args="-o ConnectionAttempts=10"
Я планирую переместить такие переменные в ansible.cfg
установить значения по умолчанию для всех хостов. Будет ли это просто работать аналогичным образом или есть какие-то обстоятельства, которые следует учитывать? Какие еще альтернативы можно удалить [all:vars]
из инвентарного файла?
3 ответа
ansible.cfg
это файл конфигурации, а не инвентарь, вы не можете поместить туда переменные.
[all:vars]
синтаксис для определения групповых переменных для группы (специальная группа all
в этом случае) внутри инвентарного файла.
Если вы хотите отделить определение переменной от основного файла инвентаризации (что, кстати, является предпочтительной практикой!), Вы можете прочитать эту главу: Разделение данных, относящихся к хосту и группе.
Выдержка:
В дополнение к хранению переменных непосредственно в файле инвентаризации, переменные хоста и группы могут храниться в отдельных файлах относительно файла инвентаризации.
Предполагая, что путь к файлу инвентаризации:
/etc/ansible/hosts
Если хост называется "foosball" и в группах "raleigh" и "webservers", переменные в файлах YAML в следующих местах будут доступны хосту:
/etc/ansible/group_vars/raleigh # can optionally end in '.yml', '.yaml', or '.json' /etc/ansible/group_vars/webservers /etc/ansible/host_vars/foosball
Попробуйте переместить переменные в /group_vars/all, чтобы добиться того же результата поддерживаемым способом.
Конечно, вы можете определить эти значения в ansible.cfg
, они просто имеют разные имена, поэтому заранее обратитесь к руководству:
ansible_shell_type
можно определить какexecutable
вansible.cfg
ansible_user
какremote_user
ansible_ssh_common_args
какssh_args
Значения, установленные в файле конфигурации, будут применяться ко всем хостам, если они не переопределены конкретными настройками.