Ansible Dynami c инвентарь в формате JSON не анализируется - PullRequest
0 голосов
/ 06 мая 2020

Я попытался написать сценарий инвентаризации Dynami c в python, который выглядит следующим образом:

[root@satellite code]# python3 dynamic_inventory.py --list > hosts
[root@satellite code]# cat hosts
{"k8s-master": ["k8s-master.example.com"], "k8s-worker": ["worker-1.example.com", "worker-2.example.com"], "satellite": ["satellite.example.com"], "all": ["satellite.example.com", "worker-2.example.com", "k8s-master.example.com", "worker-1.example.com"], "Centos7": ["k8s-master.example.com", "worker-1.example.com", "worker-2.example.com", "satellite.example.com"]}

Теперь, когда я пытаюсь использовать инвентарь, я получаю следующие ошибки:

[root@satellite code]# ansible-playbook -i hosts sample.yaml
[WARNING]: Skipping 'Centos7' as this is not a valid group definition
[WARNING]: Skipping 'k8s-worker' as this is not a valid group definition
[WARNING]: Skipping 'satellite' as this is not a valid group definition
[WARNING]: Skipping 'k8s-master' as this is not a valid group definition
[WARNING]: Skipping 'all' as this is not a valid group definition
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'

PLAY [all] *************************************************************************************************************************************************************
skipping: no hosts matched

PLAY RECAP *************************************************************************************************************************************************************

Тоже пробовал:

[root@satellite code]# ansible-playbook -i dynamic_inventory.py sample.yaml
[WARNING]:  * Failed to parse /root/code/dynamic_inventory.py with ini plugin: /root/code/dynamic_inventory.py:1: Expected key=value host variable assignment, got: os
[WARNING]: Unable to parse /root/code/dynamic_inventory.py as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'

PLAY [all] *************************************************************************************************************************************************************
skipping: no hosts matched

PLAY RECAP *************************************************************************************************************************************************************

Скрипт извлекает имена хостов из MySQL DB в формат JSON. Я не нашел никаких плагинов в официальных документах ansible. Может ли кто-нибудь помочь, как go об этом? Есть ли способ отобразить вывод скрипта в формате ini.

1 Ответ

0 голосов
/ 06 мая 2020

Я попытался изменить скрипт на исполняемый и получил следующее:

[root@satellite code]# ansible-playbook -i dynamic_inventory.py sample.yaml
[WARNING]:  * Failed to parse /root/code/dynamic_inventory.py with script plugin: problem running /root/code/dynamic_inventory.py --list ([Errno 8] Exec format error)
[WARNING]:  * Failed to parse /root/code/dynamic_inventory.py with ini plugin: /root/code/dynamic_inventory.py:1: Expected key=value host variable assignment, got: os

Обратите внимание, что на этот раз он использовал плагин скрипта, «Ошибка формата Exe c» возникла из-за того, что моя система по умолчанию установила python2. Добавил шебанг (#! / Usr / bin / python3) в файл, и он сработал:

[root@satellite code]# ansible-playbook -i dynamic_inventory.py sample.yaml
[DEPRECATION WARNING]: The TRANSFORM_INVALID_GROUP_CHARS settings is set to allow bad characters in group names by default, this will change, but still be user
configurable on deprecation. This feature will be removed in version 2.10. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details

PLAY [all] *************************************************************************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************************************************************
fatal: [worker-1.example.com]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname worker-1.example.com: Name or service not known", "unreachable": true}
fatal: [worker-2.example.com]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname worker-2.example.com: Name or service not known", "unreachable": true}
fatal: [k8s-master.example.com]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname k8s-master.example.com: Name or service not known", "unreachable": true}
fatal: [satellite.example.com]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", "unreachable": true}

PLAY RECAP *************************************************************************************************************************************************************
k8s-master.example.com    : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0
satellite.example.com     : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0
worker-1.example.com      : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0
worker-2.example.com      : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0

...