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