Разбор переменных в ANSI инвентаризации в Python - PullRequest
1 голос
/ 29 марта 2019

Я пытаюсь проанализировать переменные ANSIBLE, используя python, указанный в файле инвентаризации, как показано ниже:

[webservers]
foo.example.com type=news
bar.example.com type=sports

[dbservers]
mongodb.local type=mongo region=us
mysql.local type=mysql region=eu

Я хочу иметь возможность проанализировать type=news для хоста foo.example.com в веб-серверах иtype=mongo region=us для хоста mongodb.local под dbservers.Любая помощь в этом с благодарностью

Ответы [ 3 ]

1 голос
/ 29 марта 2019

Игра ниже

- name: List type=news hosts in the group webservers
  debug:
    msg: "{{ hostvars[item].inventory_hostname }}"
  loop: "{{ groups['webservers'] }}"
  when: hostvars[item].type == "news"

- name: List type=mongo and region=us hosts in the group dbservers
  debug:
    msg: "{{ hostvars[item].inventory_hostname }}"
  loop: "{{ groups['dbservers'] }}"
  when:
    - hostvars[item].type == "mongo"
    - hostvars[item].region == "us"

дает:

"msg": "foo.example.com"
"msg": "mongodb.local"
0 голосов
/ 29 марта 2019

Если книга воспроизведения будет запущена на хосте:

foo.example.com

вы можете получить "type = news", просто указав "{{type}}". Если вы хотите использовать в условиях «когда», то просто указав «тип» Если playbook будет запущен на хосте:

mongodb.local

тогда значение «type» в этом случае автоматически будет = «mongo», а «region» автоматически будет = «us»

Значения переменных, если они определены в указанном вами файле hosts, будут автоматически определены на указанных хостах

Таким образом, книга воспроизведения может быть выполнена на всех хостах, и если вы получите значение для «type», например:

- debug:
     msg: "{{type}}"

На каждом из хостов вы получите свои уникальные значения, которые определены в файле хостов

Я не уверен, что правильно понял вопрос, но если это означало, что на хосте foo.example.com необходимо было получить список серверов из группы «веб-серверы», имеющих «type = news» тогда ответ уже дан.

0 голосов
/ 29 марта 2019

Вместо того, чтобы заново изобретать колесо, я предлагаю вам взглянуть на , как ansible itsef анализирует INI-файлы, чтобы превратить их в объект инвентаризации

Вы также можете легко получить этоинформация в формате json с очень простой пьесой (как предложено @vladimirbotka), или переписать свой инвентарь в yaml , который будет намного проще проанализировать с помощью любого внешнего инструмента

inventory.yaml

---
all:
  children:
    webservers:
      hosts:
        foo.example.com:
          type: news
        bar.example.com:
          type: sports
    dbservers:
      hosts:
        mongodb.local:
          type: mongo
          region: us
        mysql.local:
          type: mysql
          region: eu
...