Инструменты пользователя

Инструменты сайта


linux:ansible:roles

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
linux:ansible:roles [2023/12/23 19:48]
werwolf создано
linux:ansible:roles [2023/12/23 20:02] (текущий)
werwolf [meta данные]
Строка 18: Строка 18:
  ​\---all.yaml  ​\---all.yaml
 </​code>​ </​code>​
 +
 +В этом **roles** определим роли, которые можно использовать повторно в нескольких плейбуках и на разных серверах. Каждая роль, которую мы создадим,​ требует собственного каталога. ​
 +
 +В зависимости от сложности выполняемых задач роли может использовать один или несколько каталогов. Что представляют собой каталоги:​
 +
 +  * 📁 **defaults**:​ позволяет устанавливать переменные по умолчанию для включенных или зависимых ролей.
 +  * 📁 **files**: содержит статические файлы и файлы сценариев,​ которые могут быть скопированы на удалённый сервер или выполнены на нём.
 +  * 📁 **handlers**:​ все обработчики,​ которые ранее были в вашем плейбуке,​ теперь могут быть добавлены в каталог.
 +  * 📁 **meta**: для метаданных роли, которые используются для управления зависимостями. Например,​ вы можете определить список ролей, которые должны быть применены до вызова текущей роли.
 +  * 📁 **templates**:​ для шаблонов,​ которые генерируют файлы на удалённых хостах. ​
 +  * 📁 **tasks**: содержит один или несколько файлов с задачами,​ которые определяются в разделе tasks обычного плейбука Ansible. Эти задачи могут напрямую ссылаться на файлы и шаблоны,​ содержащиеся в соответствующих каталогах внутри роли, без необходимости указывать полный путь к файлу.
 +  * 📁 **vars**: переменные для роли могут быть указаны в файлах внутри каталога,​ а затем ссылаться на них в другом месте роли.
 +
 +==== Превращаем плейбук в роль ====
 + 
 +Переносим все задачи из palybook **all.yaml** в роль **roles->​preconfig->​tasks->​main.yaml**. ​
 +roles->​preconfig->​tasks->​main.yaml:​
 +<code yaml>
 +---
 +- name: All configs
 +  hosts: cluster
 +  roles:
 +    - preconfig
 +    - deploy
 +   
 +</​code>​
 +
 +main.yaml:
 +<code yaml>
 +---
 +- name: Установка Docker
 +  block:
 +   - name: Create user # Первая задача
 +     vars: # lsb_release -a - узнать версию ubuntu
 +       user: werwolf
 +     user:
 +       name: "{{ user }}"
 +       ​state:​ present
 +
 +   - name: Добавим universe
 +     ​apt_repository:​ # lsb_release -a - узнать версию ubuntu
 +       repo: "deb http://​archive.ubuntu.com/​ubuntu {{ ansible_distribution_release }} universe"​
 +       ​state:​ present
 +
 +   - name: Установка дополнительных пакетов
 +     apt:
 +       name:
 +         - apt-transport-https
 +         - ca-certificates
 +         - curl
 +         - gnupg
 +       ​update-cache:​ yes
 +       ​cache_valid_time:​ 86400
 +       ​state:​ present
 +   - name: добавление ключа Docker
 +     ​apt_key:​
 +       url: https://​download.docker.com/​linux/​ubuntu/​gpg
 +       ​state:​ present
 +   - name: Установка стабильного репозитория
 +     ​apt_repository:​
 +       repo: >
 +         deb [arch=amd64 signed-by=/​etc/​apt/​keyrings/​docker.gpg] ​
 +         ​https://​download.docker.com/​linux/​ubuntu ​
 +         {{ ansible_distribution_release }} stable
 +       ​state:​ present
 +       ​update-cache:​ yes
 +       ​filename:​ docker
 +   - name: Установка Docker-ce
 +     apt:
 +       name: docker-ce
 +       ​update-cache:​ yes
 +       ​cache_valid_time:​ 86400
 +   - name: Проверка что docker установлен и перезагружен
 +     ​service:​
 +       name: docker
 +       ​state:​ restarted
 +       ​enabled:​ yes
 +  become: true # общий для всего блока вызов sudo
 +- name: Установка Docker-compose
 +  block:
 +    - name: получение последней версии docker-compose
 +      uri:
 +        url: https://​api.github.com/​repos/​docker/​compose/​releases/​latest
 +        body_format:​ json
 +      register: release
 +    - name: Установка docker-compose
 +      get_url:
 +        url: "​https://​github.com/​docker/​compose/​releases/​download/​{{ release.json.tag_name }}/​docker-compose-linux-x86_64"​
 +        dest: /​usr/​local/​bin/​docker-compose
 +        mode: 0755
 +  become: yes
 +- name: завершени установки
 +  block:
 +    - name: Добавление пользователя в группу Docker
 +      user:
 +        name: werwolf
 +        groups: docker
 +        append: yes
 +    - name: Перезагрузка сервера
 +      reboot:
 +        msg: "​Rebooting machine in 5 seconds"​
 +  become: yes
 +</​code>​
 +
 +Теперь файл tasks проще понимать,​ потому что он содержит только фактические шаги, которые будут выполняться при использовании роли **preconfig**.
 +
 +Для роли **deploy** создадим свою задачу
 +roles->​deploy->​tasks->​main.yaml:​
 +<code yaml>
 +---
 +- name: Demo
 +  command: echo "​Demo"​
 +</​code>​
 +
 +==== meta данные ==== 
 +Для того чтобы указать порядок запуска ролей и метаданные в ролях можно использовать каталог meta.
 +Добавим в нем описание плейбука и зависимости(**dependencies**) роли **preconfig** от **deploy**
 +
 +<code yaml>
 +argument_specs:​
 +  main:
 +    short_description:​ Настройка серверов для работы с докером
 +    description:​ Настройка серверов для работы с докером
 +    licension: CUSTOM
 +    min_ansible_version:​ 2.9
 +    author: Sergey Anchikin
 +    platforms: Ubuntu
 +dependencies:​
 +  - role: deploy
 +</​code>​
 +
 +
  
  
linux/ansible/roles.1703350129.txt.gz · Последние изменения: 2023/12/23 19:48 — werwolf