Скрипт инвентаризации AWX анализирует скрипт оболочки как YAML - PullRequest
0 голосов
/ 23 октября 2019

Я использую 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.

...