Анзибль | как вызвать мои вары внутри роли

Ниже представлена ​​моя блок-схема -

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

Возможно, vars_file - это то, что вы ищете.

gile 18.12.2018 14:17

@ gile- Вы хотите сказать, мне нужно изменить имя 'vars' на 'vars_file'

asur 18.12.2018 14:27
Введение в Ansible Roles
Введение в Ansible Roles
Ansible - это отличный инструмент управления конфигурацией, который можно использовать для автоматизации настройки или развертывания на большом...
0
2
45
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Если я хорошо понял вашу потребность, вы можете определить свои переменные, например, ./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

asur 18.12.2018 15:20

Обратите внимание, что в моем ответе пьесы были перемещены в корневой каталог и больше не находятся в каталоге «пьес». Это то, что вы пробовали? Это важно, поскольку Ansible ищет каталог group_vars в том же каталоге, что и ваши файлы воспроизведения. Согласно связанным документам, они должны находиться в том же каталоге, что и каталог ваших ролей.

clockworknet 18.12.2018 15:34

Я не могу изменить свой рабочий процесс. Мне нужно добавить вары в соответствии с моими требованиями, и я не могу согласиться с вашим предложением. Не могли бы вы предложить что-нибудь в моем рабочем процессе? ..

asur 18.12.2018 15:39

Попробуйте переместить каталог group_vars в каталог воспроизведения.

clockworknet 18.12.2018 15:46

Все равно не повезло :(

asur 18.12.2018 16:17

Не уверен, что предложить - в моем ответе есть предложение, как работает большая кодовая база, за которой я слежу. Каталог group_vars может быть помещен в каталог, содержащий пьесы, или в каталог, содержащий инвентарь. Вы уже отошли от рекомендаций Ansibles, и при этом, я полагаю, вам понадобится специальный файл ansible.cfg, чтобы роли работали. Можете ли вы обновить свой ответ, включив в него содержимое вашего ansible.cfg, содержимое вашего all.yml и то, как вы вызываете playbooks?

clockworknet 18.12.2018 16:24

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