Поэтому я решил, что, когда это возможно, я должен начать использовать Ansible Galaxy вместо того, чтобы писать свои собственные роли. Я только что установил свою первую роль и был установлен на /etc/local/ansible/roles
(я на OSX). Теперь мне интересно, как вы устанавливаете эти роли там, где мне это действительно нужно? Я просто копирую роль туда, где мне это нужно, или есть ли способ сделать это?
Ролики Ansible Galaxy устанавливаются в конкретный каталог?
Ответ 1
Да, вы скопировали бы их в соответствии с типовой структурой проекта:
site.yml
webservers.yml
fooservers.yml
roles/
common/
files/
templates/
tasks/
handlers/
vars/
meta/
webservers/
files/
templates/
tasks/
handlers/
vars/
meta/
или вы можете просто запустить ansible-galaxy
с опцией -p ROLES_PATH
или --roles-path=ROLES_PATH
, чтобы установить его под /your/project/root
Вы также можете использовать каталог /etc/local/ansible
в качестве корня проекта, если хотите.
Надеюсь, что это поможет.
Ответ 2
В общем, я привязываю все свои общие роли в одной главной папке, которая делится всеми моими проектами. Это позволяет избежать утомительности ручного копирования/вставки и обновления нескольких копий той же роли.
Чем я изменяю каждый проект ansible.cfg
, чтобы сообщить ansible
искать роли в этой главной папке в дополнение к локальной папке проекта.
Пример ansible.cfg
:
[defaults]
roles_path = ~/Code/ansible_roles
Ansible сначала ищет локальный проект для роли, затем ищет roles_path
. Вы можете указать несколько путей, разделив их на двоеточие.
По умолчанию ansible-galaxy install username.rolename
установит роль в roles_path
, настроенную в ansible.cfg
, так что почти все, что вам нужно сделать.
Иногда я хочу установить роль в конкретный проект, а не в главную папку. Например, чтобы избежать конфликтов версий, когда две роли имеют зависимости от роли, для которых требуются разные версии одной и той же роли. В этом случае вы можете использовать опцию -p ROLES_PATH
или --roles-path=ROLES_PATH
:
ansible-galaxy install username.rolename -p ~/Code/project_deploy/ansible/roles/
В Ansible 1.9 вы можете вручную указать, где вы хотите, чтобы роль была установлена в вашем проекте requirements.yml
. К сожалению, этот параметр path
был удален в Ansible 2:
# from galaxy
- src: jeffwidman.elasticsearch
# from private github repo, installing to a relative path
- src: https://github.com/jeffwidman/private_ansible_role
path: vagrant/roles/
Если вы хотите еще больше настроить настройки, есть проблема с добавить поддержку нескольких файлов ansible.cfg
, что позволит вам легко установить roles_path
на разных уровнях специфичности. Ansible будет читать ANSIBLE_CONFIG
, ansible.cfg
в текущем рабочем каталоге, .ansible.cfg
в домашнем каталоге или /etc/ansible/ansible.cfg
, в зависимости от того, что он находит первым.
Ответ 3
Вот как я решил проблему работы с ролями галактик и работает на любой платформе.
Измените файл ansible.cfg
, который должен быть частью вашего исходного элемента управления и добавьте его в него:
roles_path = roles.galaxy:roles
Создайте каталог с именем roles.galaxy
и с этого момента, когда вы сделаете ansible-galaxy install xxx.yyy
, он будет установлен в roles.galaxy
.
Вы продолжаете сохранять свои локальные роли внутри каталога roles
и сообщества в roles.galaxy
. Предполагается, что оба они будут сохранены в вашем репозитории git.
Никогда не планируйте устанавливать их из галактики, это будет большой риск для безопасности в дополнение к добавлению нескольких дополнительных пунктов отказа.
Ответ 4
Я, наверное, слишком поздно отвечаю на этот вопрос. Но вы можете сделать одну команду:
ansible-galaxy install -p ./roles thefinn93.letsencrypt
установит роль allowencrypt в каталог ролей, и вам не нужно копировать вещи.
Ответ 5
Мне нужен глобальный путь для моих ролей. Вы можете сделать это, положив ansible.cfg на ~/.ansible.cfg. На основе проекта всегда будет приоритет.
cat ~/.ansible.cfg
[defaults]
roles_path = ~/.ansible/roles
Ответ 6
Чтобы ваши роли были сохранены в вашей папке репозитория (что вам, вероятно, нужно, если все ваши материалы контролируются версиями - это один из элементов инфраструктуры в виде кода), и при условии, что это ваш макет каталога:
repo-folder
inventory << likely you have this already
roles << this, too
roles.galaxy << create if you dont have it
site.yml << or whatever your playbook is called
ansible.cfg << repo-local config overriding gloabal ~/.ansible.cfg
Откройте показанный выше ansible.cfg
(или создайте его заново, если у вас его еще нет) и добавьте следующее содержимое:
[defaults]
roles_path = roles.galaxy:roles
При roles.galaxy
ansible-galaxy install SOMETHING
сохранит его содержимое в папке roles.galaxy
.