Ansible Roles
Полезные ссылки
Полезные роли
Service | Role names | Links |
docker | geerlingguy.docker | Galaxy |
nginx | geerlingguy.nginx | Galaxy |
nginx basic auth | geerlingguy.htpasswd | Galaxy |
ssh | willshersystems.sshd | Galaxy |
systemd | cimon-io.systemd-service | Galaxy |
ansible-galaxy install -p ./roles geerlingguy.docker # --- or git submodule add git@github.com:geerlingguy/ansible-role-docker.git roles/geerlingguy.docker
Galaxy
Выгрузка роли из github в galaxy
ansible-galaxy role import --role-name MY_ROLE_NAME \ --api-key SECRET \ --branch BRANCH_IN_REPO \ GITHUB_USERNAME GITHUB_PROJECT
Работа с Galaxy
# список ролей ansible-galaxy list # Установка роли ansible-galaxy install -p ./roles bennojoy.ntp # Удаление роли ansible-galaxy remove bennojoy.ntp
Общие сведения
Роли в Ansible - это основной механизм деления сценария на отдельные файлы. Они упрощают написание сценариев и их повторное использование.
Например, файлы, связанные с ролью database
, хранятся в каталоге roles/database со следующей структурой
Каталог/файл | Описание |
roles/database/defaults/main.yml | Переменные, которые могут переопределяться |
roles/database/files/ | Файлы, выгружаемые на хосты |
roles/database/handlers/main.yml | Обработчики |
roles/database/meta/main.yml | Информация о зависимостях данной роли |
roles/database/tasks/main.yml | Список задач без высокоуровневой операции |
roles/database/templates/ | Файлы шаблонов Jinja2 |
roles/database/vars/main.yml | Переменные, которые не должны переопределяться |
По-умолчанию роли располагаются в каталоге /etc/ansible/roles или ./roles проекта. Изменение каталога ролей осуществляется через ansible.cfg
[defaults] roles_path = ~/ansible_roles
Подключение ролей к сценариям
- name: deploy something on somewhere hosts: web vars_files: - secrets.yml roles: - role: database database_name: "{{ dbname }}" database_user: "{{ dbuser }}" - role: mezzanine live_hostname: 192.168.0.1
Если никакие переменные не переопределяются, то roles
можно записать компактнее
... roles: - database - mezzanine
Определение зависимостей между ролями
# roles/web/meta/main.yml dependencies: - { roles: ntp, ntp_server=ntp.ubuntu.com } # roles/django/meta/main.yml dependencies: - { roles: web } - { role: memcached }