- Создан файл docs/deploy-yml-customization.md с полным руководством - Добавлены примеры использования become, групп, переменных, тегов - Показаны примеры условного выполнения и параллелизма - Добавлены примеры обработки ошибок и безопасности - Включены примеры использования Vault и отладки - Добавлены лучшие практики и рекомендации - Обновлен roles/deploy.yml с примерами кастомизации - Добавлены ссылки на документацию в Makefile и README.md Документация включает: - 15 разделов с подробными примерами - Команды запуска с различными параметрами - Примеры продакшн развертывания - Настройки безопасности и мониторинга - Обработка ошибок и логирование
		
			
				
	
	
	
		
			14 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			14 KiB
		
	
	
	
	
	
	
	
Кастомизация deploy.yml - Полное руководство
Описание
Файл roles/deploy.yml - это основной playbook для развертывания Ansible ролей на продакшн серверах. Этот документ содержит полную сводку по кастомизации и настройке различных сценариев развертывания.
Базовый пример
---
# Playbook для развертывания на продакшн серверах
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: Развертывание всех ролей
  hosts: all
  roles:
    - ping
1. Управление привилегиями (become)
Базовое использование become
- name: Развертывание с sudo правами
  hosts: all
  become: true
  roles:
    - nginx
    - postgresql
Become с паролем
- name: Развертывание с sudo паролем
  hosts: all
  become: true
  become_method: sudo
  become_user: root
  vars:
    ansible_become_pass: "{{ vault_sudo_password }}"
  roles:
    - nginx
Become для конкретных ролей
- name: Развертывание с разными привилегиями
  hosts: all
  roles:
    - role: nginx
      become: true
    - role: app-config
      become: false
2. Группировка хостов
Развертывание по группам
- name: Развертывание на веб-серверах
  hosts: webservers
  become: true
  roles:
    - nginx
    - php-fpm
- name: Развертывание на БД серверах
  hosts: databases
  become: true
  roles:
    - postgresql
    - redis
- name: Развертывание на мониторинг серверах
  hosts: monitoring
  become: true
  roles:
    - prometheus
    - grafana
Условное развертывание
- name: Развертывание на production
  hosts: production
  become: true
  when: environment == "production"
  roles:
    - nginx
    - ssl-certificates
- name: Развертывание на staging
  hosts: staging
  become: false
  when: environment == "staging"
  roles:
    - nginx
3. Переменные и конфигурация
Глобальные переменные
- name: Развертывание с переменными
  hosts: all
  become: true
  vars:
    nginx_port: 80
    nginx_ssl_port: 443
    app_name: "my-application"
    app_version: "1.0.0"
  roles:
    - nginx
    - application
Переменные для конкретных ролей
- name: Развертывание с ролевыми переменными
  hosts: all
  become: true
  roles:
    - role: nginx
      vars:
        nginx_port: 80
        nginx_ssl_enabled: true
    - role: postgresql
      vars:
        postgresql_version: "13"
        postgresql_max_connections: 200
Использование group_vars и host_vars
# group_vars/webservers.yml
nginx_worker_processes: 4
nginx_worker_connections: 1024
# group_vars/databases.yml
postgresql_shared_buffers: "256MB"
postgresql_effective_cache_size: "1GB"
# В deploy.yml
- name: Развертывание с групповыми переменными
  hosts: webservers:databases
  become: true
  roles:
    - nginx
    - postgresql
4. Теги (Tags)
Базовое использование тегов
- name: Развертывание с тегами
  hosts: all
  become: true
  roles:
    - role: nginx
      tags: ['web', 'nginx']
    - role: postgresql
      tags: ['database', 'postgresql']
    - role: monitoring
      tags: ['monitoring', 'prometheus']
Запуск с тегами
# Развертывание только веб-серверов
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --tags web
# Развертывание только БД
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --tags database
# Развертывание веб + БД
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --tags web,database
# Пропустить мониторинг
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --skip-tags monitoring
5. Обработчики (Handlers)
Использование обработчиков
- name: Развертывание с обработчиками
  hosts: all
  become: true
  roles:
    - nginx
    - postgresql
  handlers:
    - name: restart nginx
      service:
        name: nginx
        state: restarted
      listen: "restart nginx"
    
    - name: restart postgresql
      service:
        name: postgresql
        state: restarted
      listen: "restart postgresql"
6. Условное выполнение
Условия на основе переменных
- name: Развертывание с условиями
  hosts: all
  become: true
  roles:
    - role: nginx
      when: nginx_enabled | default(true)
    - role: postgresql
      when: database_enabled | default(true)
    - role: redis
      when: cache_enabled | default(false)
Условия на основе групп
- name: Развертывание с групповыми условиями
  hosts: all
  become: true
  roles:
    - role: nginx
      when: "'webservers' in group_names"
    - role: postgresql
      when: "'databases' in group_names"
    - role: monitoring
      when: "'monitoring' in group_names"
7. Параллельное выполнение
Настройка параллелизма
- name: Развертывание с параллелизмом
  hosts: all
  become: true
  serial: 2  # Выполнять на 2 хостах одновременно
  roles:
    - nginx
    - postgresql
Каскадное развертывание
- name: Развертывание БД (первыми)
  hosts: databases
  become: true
  serial: 1
  roles:
    - postgresql
- name: Развертывание приложений (после БД)
  hosts: webservers
  become: true
  serial: 2
  roles:
    - nginx
    - application
8. Обработка ошибок
Игнорирование ошибок
- name: Развертывание с игнорированием ошибок
  hosts: all
  become: true
  ignore_errors: true
  roles:
    - nginx
    - postgresql
Обработка ошибок на уровне ролей
- name: Развертывание с обработкой ошибок
  hosts: all
  become: true
  roles:
    - role: nginx
      ignore_errors: true
    - role: postgresql
      ignore_errors: false
9. Инвентарь и подключение
Различные пользователи
- name: Развертывание с разными пользователями
  hosts: all
  become: true
  remote_user: "{{ ansible_user | default('ubuntu') }}"
  roles:
    - nginx
    - postgresql
SSH настройки
- name: Развертывание с SSH настройками
  hosts: all
  become: true
  gather_facts: true
  roles:
    - nginx
    - postgresql
  vars:
    ansible_ssh_private_key_file: "~/.ssh/id_rsa"
    ansible_ssh_common_args: "-o StrictHostKeyChecking=no"
10. Полный пример продакшн развертывания
---
# Полный пример продакшн развертывания
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# 1. Развертывание инфраструктуры
- name: Развертывание инфраструктуры
  hosts: infrastructure
  become: true
  serial: 1
  roles:
    - role: nginx
      vars:
        nginx_ssl_enabled: true
        nginx_ssl_cert: "{{ ssl_cert_path }}"
        nginx_ssl_key: "{{ ssl_key_path }}"
      tags: ['infrastructure', 'nginx']
# 2. Развертывание БД
- name: Развертывание базы данных
  hosts: databases
  become: true
  serial: 1
  roles:
    - role: postgresql
      vars:
        postgresql_version: "13"
        postgresql_max_connections: 200
        postgresql_shared_buffers: "256MB"
      tags: ['database', 'postgresql']
# 3. Развертывание приложений
- name: Развертывание приложений
  hosts: webservers
  become: true
  serial: 2
  roles:
    - role: nginx
      vars:
        nginx_upstream_servers: "{{ app_servers }}"
      tags: ['application', 'nginx']
    - role: application
      vars:
        app_version: "{{ app_version }}"
        app_environment: "{{ environment }}"
      tags: ['application']
# 4. Развертывание мониторинга
- name: Развертывание мониторинга
  hosts: monitoring
  become: true
  when: monitoring_enabled | default(true)
  roles:
    - role: prometheus
      tags: ['monitoring', 'prometheus']
    - role: grafana
      tags: ['monitoring', 'grafana']
11. Команды запуска
Базовые команды
# Развертывание всех ролей
make role deploy
# Развертывание с проверкой (dry-run)
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --check
# Развертывание с тегами
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --tags web,database
# Развертывание с переменными
ansible-playbook -i inventory/hosts.ini roles/deploy.yml -e "app_version=1.0.0"
# Развертывание с лимитом хостов
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --limit webservers
Продвинутые команды
# Развертывание с параллелизмом
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --forks 5
# Развертывание с детальным выводом
ansible-playbook -i inventory/hosts.ini roles/deploy.yml -vvv
# Развертывание с обработкой ошибок
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --force-handlers
# Развертывание с тестированием
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --check --diff
12. Переменные окружения
Использование переменных окружения
# Установка переменных окружения
export ANSIBLE_HOST_KEY_CHECKING=False
export ANSIBLE_SSH_RETRIES=3
export ANSIBLE_TIMEOUT=30
# Развертывание
make role deploy
Файл переменных
# group_vars/all.yml
ansible_user: ubuntu
ansible_ssh_private_key_file: "~/.ssh/id_rsa"
ansible_ssh_common_args: "-o StrictHostKeyChecking=no"
# Переменные приложения
app_name: "my-application"
app_version: "1.0.0"
environment: "production"
# Переменные БД
postgresql_version: "13"
postgresql_max_connections: 200
13. Безопасность
Использование Vault
# В deploy.yml
- name: Развертывание с секретами
  hosts: all
  become: true
  vars:
    db_password: "{{ vault_db_password }}"
    ssl_cert: "{{ vault_ssl_cert }}"
  roles:
    - postgresql
    - nginx
Запуск с Vault
# Развертывание с паролем Vault
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --ask-vault-pass
# Развертывание с файлом пароля
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --vault-password-file .vault_pass
14. Отладка и логирование
Включение отладки
- name: Развертывание с отладкой
  hosts: all
  become: true
  debug: true
  roles:
    - nginx
    - postgresql
Логирование
# Развертывание с логированием
ansible-playbook -i inventory/hosts.ini roles/deploy.yml --log-path /var/log/ansible.log
# Развертывание с детальным выводом
ansible-playbook -i inventory/hosts.ini roles/deploy.yml -vvv
15. Лучшие практики
Структура файла
- Комментарии - описывайте каждый блок
- Группировка - логически группируйте роли
- Переменные - выносите переменные в отдельные файлы
- Теги - используйте теги для гибкости
- Условия - добавляйте условия для безопасности
Рекомендации
- Используйте become: trueдля системных ролей
- Группируйте хосты по функциональности
- Применяйте теги для модульности
- Используйте переменные для конфигурации
- Добавляйте условия для безопасности
- Логируйте все операции
- Тестируйте с --checkперед развертыванием
Заключение
Файл roles/deploy.yml - это центральный элемент развертывания. Правильная его настройка обеспечивает гибкость, безопасность и надежность развертывания Ansible ролей на продакшн серверах.
Для получения дополнительной информации см.: