Подтвердить что ты не робот

Ролики Ansible Galaxy устанавливаются в конкретный каталог?

Поэтому я решил, что, когда это возможно, я должен начать использовать Ansible Galaxy вместо того, чтобы писать свои собственные роли. Я только что установил свою первую роль и был установлен на /etc/local/ansible/roles (я на OSX). Теперь мне интересно, как вы устанавливаете эти роли там, где мне это действительно нужно? Я просто копирую роль туда, где мне это нужно, или есть ли способ сделать это?

4b9b3361

Ответ 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.