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

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


linux:ansible:roles

Это старая версия документа!


Создание роли

Чтобы Ansible смог найти и использовать роли, нужна специально разработанная структура каталогов. Создадим каталог с именем roles:

📁 ansible-demo
 +---📁 inventory
 |    +---cluster
 +---📁 roles
 |    +---📁 deploy
 |         +---📁 tasks
 |              +--- main.yaml 
 |    +---📁 preconfig
 |         +---📁 meta
 |              +--- main.yaml 
 |         +---📁 tasks
 |              +--- main.yaml 
 \---all.yaml

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

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

  • 📁 defaults: позволяет устанавливать переменные по умолчанию для включенных или зависимых ролей.
  • 📁 files: содержит статические файлы и файлы сценариев, которые могут быть скопированы на удалённый сервер или выполнены на нём.
  • 📁 handlers: все обработчики, которые ранее были в вашем плейбуке, теперь могут быть добавлены в каталог.
  • 📁 meta: для метаданных роли, которые используются для управления зависимостями. Например, вы можете определить список ролей, которые должны быть применены до вызова текущей роли.
  • 📁 templates: для шаблонов, которые генерируют файлы на удалённых хостах.
  • 📁 tasks: содержит один или несколько файлов с задачами, которые определяются в разделе tasks обычного плейбука Ansible. Эти задачи могут напрямую ссылаться на файлы и шаблоны, содержащиеся в соответствующих каталогах внутри роли, без необходимости указывать полный путь к файлу.
  • 📁 vars: переменные для роли могут быть указаны в файлах внутри каталога, а затем ссылаться на них в другом месте роли.

Превращаем плейбук в роль

Переносим все задачи из palybook all.yaml в роль roles→preconfig→tasks→main.yaml. roles→preconfig→tasks→main.yaml:

---
- name: All configs
  hosts: cluster
  roles:
    - preconfig
    - deploy
 

main.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

Теперь файл tasks проще понимать, потому что он содержит только фактические шаги, которые будут выполняться при использовании роли preconfig.

Для роли deploy создадим свою задачу roles→deploy→tasks→main.yaml:

---
- name: Demo
  command: echo "Demo"

meta данные

Для того чтобы указать порядок запуска ролей и метаданные в ролях можно использовать каталог meta. Добавим в нем описание плейбука и зависимости(dependencies) роли preconfig от deploy

argument_specs:
  main:
    short_description: Настройка серверов для работы с докером
    description: Настройка серверов для работы с докером
    licension: CUSTOM
    min_ansible_version: 2.9
    author: Sergey Anchikin
    platforms: Ubuntu
dependencies:
  - role: deploy
linux/ansible/roles.1703350927.txt.gz · Последние изменения: 2023/12/23 20:02 — werwolf