У меня есть эта независимая структура инвентаря:
inventory/
group_vars/
host_vars/
/my_host1/
/my_host2/
aws/
config
credentials
some.conf
Когда я запускаю ansible playbook, я получаю эту ошибку:
ERROR! We were unable to read either as JSON nor YAML, these are the errors we got from each:
JSON: Expecting value: line 1 column 2 (char 1)
Syntax Error while loading YAML.
did not find expected <document start>
The error appears to be in '/home/user/src/my-ansible/inventory/host_vars/my_host2/aws/config': line 2, column 1, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
[default]
region = eu-central-1
^ here
Он пытается прочитать файл config
в каталоге aws
как файл конфигурации хоста YAML. Если я переименую его во что-то вроде config.txt
, он его проигнорирует.
Есть ли способ убедиться, что ansible распознает это как простой файл, вместо того, чтобы пытаться прочитать его как какую-то нестандартную конфигурацию? Или я должен просто указать .conf
и покончить с этим?
@Zeitounator Например ansible-playbook workflows/playbooks/deploy-stage.yml -e "target=my_host2" --skip-tags=restore
. Он запускается из моего корневого каталога проекта ansible. Где у него есть директория инвентаря и директория рабочих процессов (плейбуки с ролями).
Другой вопрос: что файлы конфигурации, не связанные с инвентаризацией, делают внутри вашей инвентаризации? Это похоже на вашу основную проблему. Они должны быть в каталоге files
или templates
рядом с вашей игрой или внутри роли.
@Zeitounator, почему я должен помещать конфиденциальные / конфигурационные данные в playbook или роль? Я повторно использую playbooks и роли для других проектов. И я храню в инвентаре конфиденциальные/конфигурационные данные, связанные с конкретным хостом. Разве не там вы должны хранить его? А почему вы думаете, что они не связаны с инвентарем?
And why you think they are not related with inventory?
<= потому что ansible пытается их прочитать, а они не должны быть прочитаны. Использование скрытых папок, как предлагается ниже, может помочь. Но лучше всего размещать только те файлы, которые можно прочитать с помощью ansible-inventory
. Файлы для повторного использования/копирования не относятся к инвентарю. Обратите внимание, что я предложил использовать папки files
и templates
, что вы и приняли в качестве ответа.
Это действительно указано в документации:
Вы также можете создавать каталоги, названные в честь ваших групп или хостов. Ansible прочитает все файлы в этих каталогах в лексикографическом порядке.
Source: https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#organizing-host-and-group-variables
Таким образом, поскольку ваш файл конфигурации представляет собой файл в формате, который будет учитывать Ansible: либо без расширения, либо с опциональным окончанием .yml, .yaml или .json, файл inventory/host_vars/my_host2/aws/config анализируется как переменная. файл.
Я бы порекомендовал вам хранить файлы вашего хоста в другом месте, а не в папке с переменными хоста, вероятно, лучше всего было бы в каталоге файлов вашего playbook.
См.: Где я должен организовать файлы/шаблоны, специфичные для хоста?
Другой идеей было бы сделать вашу папку aws скрытой:
└── inventories
└── host_vars
└── my_host2
└── .aws
└── config
Таким образом, Ansible не будет анализировать папку.
Ага, понятно. Не знал, что есть каталог files
(на хост), который может искать ansible.
Какой учебник вы используете? Из какого каталога? Какой именно командой?