Как определить хеш (dict) в файле инвентаризации?
Я могу определить хэш (dict), как показано ниже в group_vars/all:
region_subnet_matrix:
site1:
region: "{{ aws_region }}"
subnet: "subnet-xxxxxxx"
zone: "{{aws_region}}a"
site2:
region: "{{ aws_region }}"
subnet: "subnet-xxxxxxx"
zone: "{{aws_region}}b"
но для жизни я не мог понять, как определить его в файле hosts
[all:vars]
region_subnet_matrix="{
site1:
region: "{{ aws_region }}"
subnet: "subnet-xxxxxxx"
zone: "{{aws_region}}a"
site2:
region: "{{ aws_region }}"
subnet: "subnet-xxxxxxx"
zone: "{{aws_region}}b"
}"
Я знаю, что это было неправильно, но я не знаю правильный путь. Может кто-нибудь просветить меня, пожалуйста?
2 ответа
Когда я читаю исходный код Ansible, значения переменных в файлах инвентаризации оцениваются "ast.literal_eval()" Python. Таким образом, вы можете описывать переменные dict в файлах инвентаря однострочными литералами Python.
Ваш пример может выглядеть так:
[all:vars]
region_subnet_matrix={'site1': {'subnet': 'subnet-xxxxxxx', 'region': '{{ aws_region }}', 'zone': '{{aws_region}}a'}, 'site2': {'subnet': 'subnet-xxxxxxx', 'region': '{{ aws_region }}', 'zone': '{{aws_region}}b'}}
Убедитесь, что никакие переменные не оцениваются в этом примере.
NB: я не знаю, такое определение переменных инвентаризации официально разрешено.
Вы не можете использовать dict в файле инвентаря, потому что он использует ini
формат. Предпочтительная практика в Ansible - не хранить переменные в основном файле инвентаризации. Переменные хоста и группы могут храниться в отдельных файлах относительно файла инвентаризации.
Предполагая, что путь к файлу инвентаризации: /etc/ansible/hosts
Если хост назван переменными 'testserver' в файле YAML в следующем месте, он будет доступен для хоста: /etc/ansible/host_vars/testserver
,
Данные в этом файле могут выглядеть так:
region_subnet_matrix:
site1:
region: "{{ aws_region }}"
subnet: "subnet-xxxxxxx"
zone: "{{aws_region}}a"
site2:
region: "{{ aws_region }}"
subnet: "subnet-xxxxxxx"
zone: "{{aws_region}}b"
Узнайте больше здесь.