Как использовать group_vars из относительного пути в Ansible

#ansible

#ansible

Вопрос:

У меня есть требование, при котором мне нужно использовать group_vars in Ansible, но оно не обязательно должно находиться на том же пути. В основном мои сборники находятся в SVN, и всякий раз, когда мы хотим развернуть, мы фактически проверяем последнюю версию сборника с версией выпуска, а затем развертываем.

Playbook, который фактически выполняет развертывание, имеет такую структуру —

 /home/ansible/myapp/ansible-myapp-release/deploy/ansible-myapp-5.80.0-05
 - bin
 - roles
 - myapp-main.yml
 - myapp-full-deployment.yml
 - myapp-config.yml
  

Другая вещь, которую я получаю из SVN, — это то, что содержит конфигурацию для моего приложения, и оно не содержит никаких воспроизведений, и оно может отличаться для разных сред, таких как preprod, prod, test и т.д.

 /home/ansible/myapp/ansible-myapp-release/configuration/5.80.0-05/preprod
 - config
 - group_vars
    - preprod.yml
 - inventory
     - myapp
  

инвентаризация myapp

 [preprod]
myapp-preprod
  

Теперь, когда я выполняю свой первый сборник пьес, я хочу использовать это group_vars , потому что именно там находится моя конфигурация, preprod.yml которая будет загружена в шаблоны jinja во время выполнения.

Как я могу использовать это inventory и group_vars из этого path ИЛИ мне нужно скопировать эти папки отсюда в исходный root каталог playbook, а затем выполнить playbook?

Пожалуйста, дайте мне знать, если кто-нибудь может посоветовать по этому поводу.

В документации говорится, что путь должен быть относительно того, где хранится ваш инвентарь https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#organizing-host-and-group-variables

Комментарии:

1. Если я попытаюсь определить inventory путь таким /home/ansible/myapp/ansible-myapp-release/configuration/5.80.0-05/preprod/inventory/myapp образом, то он также не сработает. Это выдает мне эту ошибку — msg: The task includes an option with an undefined variable. The error was: 'tomcat_symlink_path' is undefined эта переменная фактически определена в моем preprod.yml файле

2. Переместитесь group_vars в свой inventory каталог. Выполнено.

3. @Zeitounator это было просто. Идеальный. Большое вам спасибо 🙂

Ответ №1:

Цитирование из переменных хоста и группы организации

Ansible загружает файлы переменных хоста и группы путем поиска путей относительно файла инвентаризации или файла playbook

Ниже приведен пример того, как поместить group_vars относительно файла инвентаризации

 shell> tree /home/ansible/myapp/ansible-myapp-release/configuration/5.80.0-05/preprod
/home/ansible/myapp/ansible-myapp-release/configuration/5.80.0-05/preprod
└── inventory
    ├── group_vars
    │   └── preprod.yml
    └── myapp
  

Комментарии:

1. Спасибо Владимир. Перемещение group_vars внутри инвентаря, как было предложено, сработало отлично. Я думаю, что я путал с относительными путями.