Я использую AWX 8.0.0.0 с Ansible 2.8.6. Я добавил в AWX под Inventory script
новый скрипт:
#!/bin/sh
curl -s GET "https://myserver/inventory" -H "accept: application/json" --user $INVENTORY_CREDENTIALS &> /dev/stdout
#eof
Этот скрипт хорошо работает, когда я использую его локально с ansible-playbook -i inventory.sh ...
, переменная действительно заменяется - я вижу запрос насервер. Результатом является инвентаризация JSON (данные поступают из БД в бэкэнде). Он правильно сформирован (сгенерирован)
Когда я добавляю пользовательский сценарий в качестве инвентаря и запускаю задание синхронизации, задание «успешно», но инвентарь пуст. Когда я смотрю в журнал работы - он показывает следующий вывод:
1.779 INFO Updating inventory 3: test
2.072 INFO Reading Ansible inventory source: /tmp/awx_1302_0cicirws/tmpsgddb_k3
2.074 INFO Using VIRTUAL_ENV: /var/lib/awx/venv/ansible
2.074 INFO Using PATH: /var/lib/awx/venv/ansible/bin:/var/lib/awx/venv/awx/bin:/opt/rh/rh-postgresql10/root/usr/bin:/var/lib/awx/venv/awx/bin:/var/lib/awx/venv/awx/bin:/opt/rh/rh-postgresql10/root/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
2.074 INFO Using PYTHONPATH: /var/lib/awx/venv/ansible/lib/python2.7/site-packages:
2.807 ERROR ansible-inventory 2.8.6
2.808 ERROR config file = /etc/ansible/ansible.cfg
2.808 ERROR configured module search path = [u'/var/lib/awx/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
2.808 ERROR ansible python module location = /usr/lib/python2.7/site-packages/ansible
2.808 ERROR executable location = /usr/bin/ansible-inventory
2.808 ERROR python version = 2.7.5 (default, Aug 7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
2.808 ERROR Using /etc/ansible/ansible.cfg as config file
2.808 ERROR host_list declined parsing /tmp/awx_1302_0cicirws/tmpsgddb_k3 as it did not pass it's verify_file() method
2.808 ERROR auto declined parsing /tmp/awx_1302_0cicirws/tmpsgddb_k3 as it did not pass it's verify_file() method
2.808 ERROR [WARNING]: Skipping 'curl -s GET "https://myserver/inventory" -H
2.808 ERROR "accept' as this is not a valid group definition
2.808 ERROR
2.808 ERROR Parsed /tmp/awx_1302_0cicirws/tmpsgddb_k3 inventory source with yaml plugin
2.808 INFO Processing JSON output...
2.809 INFO Loaded 0 groups, 0 hosts
2019-10-23 17:29:24,999 DEBUG awx.main.models.inventory Going to update inventory computed fields, pk=3
2019-10-23 17:29:25,038 DEBUG awx.main.models.inventory Finished updating inventory computed fields, pk=3, in 0.035 seconds
2.897 INFO Inventory import completed for test in 1.1s
Я знаю, что вывод AWX немного странный, потому что он обнаруживает некоторый вывод в строке скручивания ипомечает это как ошибку. Он вызывает URL, и результат имеет тот же размер и 200 ОК. Но я не понимаю, где ошибка. Есть ли другой способ синтаксического анализа выходных данных JSON, чтобы получить информацию из ответа JSON, но я не знаю другого инструмента для проверки файла инвентаризации (ошибки кажутся не синтаксическими, а семантическими).
Также забавно - когда я удаляю заголовок accept из curl, AWX не работает во время синхронизации. Я пытаюсь загрузить YAML. Но серверная часть всегда возвращает «Content-type: application / json». Это странно для меня.
Я не уверен, в чем проблема - и я все еще не уверен, является ли это выводом JSON или самим сценарием. Локально работает, например ansible-inventory -i inventory.sh --graph
показывает все из удаленного инвентаря JSON.