Ansible basi c Dynami c Инвентарь - PullRequest
       105

Ansible basi c Dynami c Инвентарь

0 голосов
/ 07 августа 2020

Я пытаюсь закодировать базовый 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 инвентарь, который обеспечивает вышеуказанные результаты?

1 Ответ

0 голосов
/ 03 сентября 2020

Это решение для создания Dynami c Инвентарь:

#!/usr/bin/python3

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, Loader=yaml.FullLoader)
        for hostgroup in host['host_groups']:
            if hostgroup not in groups.keys():
                groups[ hostgroup ] = { 'hosts': [] }
            groups[ hostgroup ]['hosts'].append( host['hostname'] )

print(json.dumps(groups))
...