Я пытаюсь закодировать базовый c Inventory, который считывает существующие файлы YAML из HOST_VAR и генерирует этот шаблон, который я могу использовать для подключения ко всем хостам через указанный IP-адрес ansilble_host:
---
all:
children:
routers:
children:
PE:
hosts:
R1:
ansible_host: 192.168.99.1
R3:
ansible_host: 192.168.99.3
R4:
ansible_host: 192.168.99.4
OSPF:
hosts:
R2:
ansible_host: 192.168.99.2
Это сценарий python:
#!/usr/bin/env python
import json
import yaml
import glob
groups = {}
for hostfilename in glob.glob('./host_vars/*.yml'):
with open(hostfilename, 'r') as hostfile:
host = yaml.load(hostfile)
for hostgroup in host['host_groups']:
if hostgroup not in groups.keys():
groups[ hostgroup ] = { 'hosts': {} }
groups[ hostgroup ]['hosts'] = { host['host_fqdn'] : { "ansible_host" : host['mgmt_ip'] }}
print(json.dumps(groups))
Я всегда получал эту ошибку или что-то подобное:
[WARNING]: * Failed to parse /home/sp-user/cisco-config-generator/inventory with script plugin: You defined a group
'PE' with bad data for the host list: {u'hosts': {u'R1': {u'ansible_host': u'192.168.99.2'}}}
File "/usr/lib/python2.7/site-packages/ansible/inventory/manager.py", line 280, in parse_source
plugin.parse(self._inventory, self._loader, source, cache=cache)
File "/usr/lib/python2.7/site-packages/ansible/plugins/inventory/script.py", line 161, in parse
raise AnsibleParserError(to_native(e))
[WARNING]: * Failed to parse /home/sp-user/cisco-config-generator/inventory with yaml plugin: We were unable to read
either as JSON nor YAML, these are the errors we got from each: JSON: No JSON object could be decoded Syntax Error
while loading YAML. mapping values are not allowed in this context The error appears to be in '/home/sp-user/cisco-
config-generator/inventory': line 9, column 51, but may be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be: for hostfilename in glob.glob('./host_vars/*.yml'):
^ here
Вопрос:
Может ли кто-нибудь дать мне пример того, как создать динамический c инвентарь, который обеспечивает вышеуказанные результаты?