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

Как автоматически установить роли Ansible Galaxy?

Все мои загружаемые файлы/роли в Ansible отмечены в моем реестре git.

Однако для роли Ansible Galaxy я всегда должен явно загружать их по одному на каждой машине, с которой я хочу запускать Ansible.

Даже сложно заранее знать, какие роли Ansible Galaxy необходимы, пока Ansible не жалуется на недостающую роль во время выполнения.

Как можно управлять зависимостями роли Ansible Galaxy? Я хотел бы либо проверить их в моем реестре git вместе с остальным моим кодом, либо автоматически их идентифицировать и загрузить, когда я запустил Ansible на новом компьютере.

4b9b3361

Ответ 1

Вы должны использовать файл requirements.yml для этого прецедента. Опишите роли, которые вам нужны, с помощью любого из способов установки:

# Install a role from the Ansible Galaxy
- src: dfarrell07.opendaylight

# Install a role from GitHub
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight

# Install a role from a specific git branch
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight
  version: origin/master

# Install a role at a specific tag from GitHub
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight
  version: 1.0.0

# Install a role at a specific commit from GitHub
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight
  version: <commit hash>

Затем установите их:

ansible-galaxy install -r requirements.yml

Здесь рабочий пример (установка OpenDaylight с использованием Ansible в качестве устройства для бродяг). Дополнительную информацию см. В соответствующих документах Ansible.

Ответ 2

Как и предполагалось, вы можете использовать ANSIBLE галактику для этой цели.

Анзибль имеет функцию, где вы можете создать requirements.yml файл, в котором перечислены все ваши роли. Вы можете узнать об этом здесь: http://docs.ansible.com/ansible/latest/galaxy.html#install-multiple-roles-from-a-file

Например (needs.yml):

- src: yatesr.timezone

Затем вы запускаете ansible-galaxy install -r requirements.yml для этого файла, чтобы загрузить все роли, перечисленные там.

Если вы хотите дополнительно автоматизировать его, вы можете создать простой сценарий оболочки, который будет запускать две команды.

Например (ansible.sh):

./ansible.sh

ansible-galaxy install -r requirements.yml
ansible-playbook playbook.yml -i inventory 

Ответ 3

Я часто устанавливаю установку Java JDK. Использование роли облегчает это касание. Я пробовал несколько разных способов (включая множество .gitmodules и подмодулей... Мне нужно использовать несколько систем git для работы, и все это становится некрасиво). Мое самое большое требование состоит в том, что я не проверю код роли в моем проекте плейбуков, в основном, поэтому я могу держать все в одном месте.

Содержимое моего файла requirements.yml:

- src: https://github.com/staylorx/ansible-role-wls-prep.git
  version: master
  name: staylorx.wls-prep

- src: https://my-work-git-extravaganza.com
  version: 2.x
  name: coolplace.niftyrole

#From Ansible Galaxy
- src: staylorx.oracle-jdk

Я запускаю отдельную playbook, install-role.yml:

---

- hosts: localhost

  tasks:
    - file:
        path:  roles
        state: absent

    - local_action:
        command ansible-galaxy install -r requirements.yml --roles-path roles

    - lineinfile:
        dest:   .gitignore
        regexp: '^\/roles$'
        line:   '/roles'
        state:  present

Я запускаю эту первую пьесу, затем я запускаю свои роли в любом учебнике. Для меня секрет заключается в том, чтобы игнорировать его git, поэтому я не проверяю роли по ошибке. Кроме того, поскольку я каждый раз уничтожаю папку, я гарантирую, что мне не нужно принудительно или игнорировать ошибки.

Ответ 4

Другим решением является использование подмодулей git. В конце концов, Ansible Galaxy - это только каталог репозиториев github...

Я использую эту команду для автоматического добавления любой роли Galaxy в качестве подмодуля:

ansible-galaxy info <package> | grep -A 1 github_repo | tr '\n' ' ' | sed -e "s/.*github_repo: \([^[:space:]]*\)[^\w]*github_user: \([^[:space:]]*\)[[:space:]]*/git submodule add git:\/\/github.com\/\2\/\1.git roles\/\2.\1/g" | sh

Завершите изменения, затем в репозиторий git. Когда вы клонируете свое репо в будущем, обязательно клонируйте его с субмодулями, например. git clone ... --recursive

Преимущество этого заключается в том, что подмодуль git всегда ссылается на определенную версию (git commit-hash). Это предотвратит запуск непроверенных обновлений в вашей продуктивной среде. Новая версия роли Galaxy может иметь ошибки или работать совершенно иначе, чем раньше. С подмодулем git вы решаете, когда и когда вы обновите роль в новой версии.

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

Ответ 5

На данный момент, насколько я знаю, нет автоматического способа загрузки ролей во время выполнения. Лучше всего либо передать их в свое собственное репо, либо иметь надлежащую документацию, в которой перечислены все требования. Вы даже можете создать предполетную пьесу, которая устанавливает ваши роли.:)

Ответ 6

Вы можете использовать роль Ansible для установки других необходимых ролей с помощью командного модуля.

Вот очень простой пример, который запускает ansible-galaxy install:

- name: Install roles from Ansible Galaxy
  command: ansible-galaxy install {{ item.item }}
  with_items:
    - "{{ ansible_roles_list }}"

ansible_roles_list может поставляться как переменная или как параметр роли.

Я реализовал роль для этого, так что вы можете использовать Ansible также для установки (части) управляющей машины: https://galaxy.ansible.com/ferrarimarco/install-roles/.

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