Как я могу повторно использовать написанные мной роли? - PullRequest
0 голосов
/ 26 сентября 2019

Допустим, у меня есть многочисленные сборники пьес для различных личных проектов.Они все делают совершенно разные вещи, но у них есть несколько повторяющихся общих ролей.

Например, одна из ролей клонирует мой личный репозиторий точечных файлов, поэтому у меня может быть свой личный .bash_profile, .vimrc,и т.д ... на каждом сервере.

Все мои пьесы находятся в отдельных репозиториях git.Прямо сейчас каждый из них дублирует роль «точечных файлов» по ​​отдельности.

Есть ли хороший способ перенести эту многократно используемую роль в отдельный репозиторий и импортировать каждую невидимую книгу пьес по мере необходимости?

1 Ответ

1 голос
/ 26 сентября 2019

Необходимое условие

Каждая роль имеет свой собственный репозиторий git.

Типичная структура проекта

Это может быть оспорено.это то, что мне нравится использовать в различных моих проектах:

├── inventories
│   ├── dev
│   │   ├── group_vars/
│   │   └── hosts.ini
│   └── prod
│       ├── group_vars/
│       └── hosts.ini
├── group_vars/
├── host_vars/
├── files/
├── templates/
├── roles
│   ├── localy_versionned_role1/
│   ├── localy_versionned_role2/
│   ├── requirements.yml
│   ├── .gitignore
├── ansible.cfg
├── README.md
├── some_playbook.yml
├── other_playbook.yml

role / .gitignore

# Ignore everything in dir...
/*

# ... but current file...
!.gitignore

# ... external role requirement file
!requirements.yml

# ... and configured custom/local roles
!localy_versionned_role*/

role / needs.yml

# Classic galaxy role
- src: galaxy_user.role_name

# Git available role
- src: git@git.service.com:path/to/repo.git
  scm: git
  version: master
  name: local_role_name

Youнужно только перечислить «главные» роли, также будут загружены зависимости (перечисленные в meta/main.yml роли).

Ansible.cfg

Мы проверяем, что роли ищутся и загружаются внаша локальная папка

roles_path = roles

Рабочий процесс для развертывания из вашего проекта:

  • Клонирование репозитория вашего проекта
  • Загрузка внешних ролей:
ansible-galaxy install -r roles/requirements
  • Запустите вашу игровую книгу:
ansible-playbook -i inventories/dev some_playbook.yml

Идем дальше

Загрузка ролей в виде рабочих пространств git

По умолчанию ansible-galaxyзагружает из git и удаляет структуру локального хранилища (то есть каталог .git).Если вы хотите загрузить роли и продолжить работу над ними (изменить, зафиксировать, нажать ...), вы можете сохранить структуру git с помощью:

ansible-galaxy install -g -r roles/requirements

Обратите внимание, что это приведет к записи файла meta/.galaxy_install_infoвнутри вашей роли этот git будет выглядеть как новый, если вы уже не игнорировали.

Обновление ролей после первой установки

Роли не будут обновляться новой версией (особенно из galaxy), если ониуже установлено.Для принудительного обновления используйте:

ansible-galaxy -f -r roles/requirements.yml

Конечно, вы также делаете это, чтобы переключиться на версию рабочей области git (или сбросить ее до версии, указанной в файле требований)

ansible-galaxy -f -g -r roles/requirements.yml
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...