Ниже представлена моя блок-схема -
my-code
plays
play1
play2
roles
role1
vars1
files1
tasks1
templates1
role2
vars2
files2
tasks2
templates2
role3
vars3
files3
tasks3
templates3
Я хочу создать одну папку «vars / defaults» для всех моих переменных для доступа к разным ролям. Когда я создал папку defaults / main.yml, я получаю ошибку ниже.
Ошибка:-
The task includes an option with an undefined variable
Мое требование должно быть примерно таким:
my-code
plays
play1
play2
roles
vars
main.yml
role1
files1
tasks1
templates1
role2
files2
tasks2
templates2
role3
files3
tasks3
templates3
задачи / code.yml
- name: CODE | Downloading Presto and Kinesis Jars from S3
shell: "aws s3 cp s3://services-{{ aws_accountid_test }}-cicd-storage/jars/ utilities/ --recursive"
ignore_errors: yes
args:
chdir: /home/hadoop/code/
executable: /bin/bash
become: yes
become_method: sudo
become_user: hadoop
@ gile- Вы хотите сказать, мне нужно изменить имя 'vars' на 'vars_file'
Если я хорошо понял вашу потребность, вы можете определить свои переменные, например, ./vars.yml
---
- hosts: all
remote_user: root
vars_files:
- ./vars.yml
roles:
- role1
- role2
Будьте осторожны с приоритет переменных.
Альтернативный метод, который не требует явного включения файла vars, - это изменить структуру вашего каталога.
my-code
play1
play2
group_vars
all.yml
roles
role1
files1
tasks1
templates1
role2
files2
tasks2
templates2
role3
files3
tasks3
templates3
Все общие переменные, которые должны быть доступны для всех хостов, затем помещаются в all.yml и включаются автоматически. Затем вы можете указать дополнительные целевые переменные, добавив '_group_name_.yml' в каталог 'group_vars', чтобы установить переменные, доступные только хостам в этих конкретных группах.
Для получения дополнительной информации о лучших практиках для макета каталога / файла ознакомьтесь с этот раздел документации.
@ clockworknet - я создал аналогичную структуру, но получаю ту же ошибку, что и в моем вопросе. Обновил мой вопрос моей задачей / code.yml
Обратите внимание, что в моем ответе пьесы были перемещены в корневой каталог и больше не находятся в каталоге «пьес». Это то, что вы пробовали? Это важно, поскольку Ansible ищет каталог group_vars в том же каталоге, что и ваши файлы воспроизведения. Согласно связанным документам, они должны находиться в том же каталоге, что и каталог ваших ролей.
Я не могу изменить свой рабочий процесс. Мне нужно добавить вары в соответствии с моими требованиями, и я не могу согласиться с вашим предложением. Не могли бы вы предложить что-нибудь в моем рабочем процессе? ..
Попробуйте переместить каталог group_vars в каталог воспроизведения.
Все равно не повезло :(
Не уверен, что предложить - в моем ответе есть предложение, как работает большая кодовая база, за которой я слежу. Каталог group_vars может быть помещен в каталог, содержащий пьесы, или в каталог, содержащий инвентарь. Вы уже отошли от рекомендаций Ansibles, и при этом, я полагаю, вам понадобится специальный файл ansible.cfg, чтобы роли работали. Можете ли вы обновить свой ответ, включив в него содержимое вашего ansible.cfg, содержимое вашего all.yml и то, как вы вызываете playbooks?
Возможно, vars_file - это то, что вы ищете.