Файлы, не являющиеся доступными, рассматриваются как файлы конфигурации

У меня есть эта независимая структура инвентаря:

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 13.11.2022 14:01

@Zeitounator Например ansible-playbook workflows/playbooks/deploy-stage.yml -e "target=my_host2" --skip-tags=restore. Он запускается из моего корневого каталога проекта ansible. Где у него есть директория инвентаря и директория рабочих процессов (плейбуки с ролями).

Andrius 14.11.2022 08:07

Другой вопрос: что файлы конфигурации, не связанные с инвентаризацией, делают внутри вашей инвентаризации? Это похоже на вашу основную проблему. Они должны быть в каталоге files или templates рядом с вашей игрой или внутри роли.

Zeitounator 14.11.2022 10:19

@Zeitounator, почему я должен помещать конфиденциальные / конфигурационные данные в playbook или роль? Я повторно использую playbooks и роли для других проектов. И я храню в инвентаре конфиденциальные/конфигурационные данные, связанные с конкретным хостом. Разве не там вы должны хранить его? А почему вы думаете, что они не связаны с инвентарем?

Andrius 15.11.2022 16:56
And why you think they are not related with inventory? <= потому что ansible пытается их прочитать, а они не должны быть прочитаны. Использование скрытых папок, как предлагается ниже, может помочь. Но лучше всего размещать только те файлы, которые можно прочитать с помощью ansible-inventory. Файлы для повторного использования/копирования не относятся к инвентарю. Обратите внимание, что я предложил использовать папки files и templates, что вы и приняли в качестве ответа.
Zeitounator 15.11.2022 18:49
Введение в Ansible Roles
Введение в Ansible Roles
Ansible - это отличный инструмент управления конфигурацией, который можно использовать для автоматизации настройки или развертывания на большом...
1
5
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это действительно указано в документации:

Вы также можете создавать каталоги, названные в честь ваших групп или хостов. 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.

Andrius 15.11.2022 17:02

Другие вопросы по теме