feat: Добавлена поддержка универсальных ролей для RHEL и Debian
- Роли теперь создаются универсальными для RHEL и Debian семейств - Автоматическое создание OS-специфичных задач (debian.yml, redhat.yml) - Универсальные playbooks с поддержкой разных ОС - Обновлена документация с примерами и лучшими практиками Новые возможности: - Автоматическое определение ОС через ansible_os_family - OS-специфичные задачи в отдельных файлах - Универсальные playbooks с pre_tasks и post_tasks - Поддержка apt для Debian/Ubuntu и yum для RHEL/CentOS Структура универсальной роли: - tasks/main.yml - общая логика и включение OS-специфичных задач - tasks/debian.yml - задачи для Debian/Ubuntu (apt, systemd) - tasks/redhat.yml - задачи для RHEL/CentOS (yum, systemd) - playbooks/ - универсальные playbooks с поддержкой разных ОС Универсальные playbooks: - gather_facts: true - сбор информации об ОС - pre_tasks - отображение информации об ОС - post_tasks - проверка успешного развертывания - Переменные роли автоматически добавляются Документация: - Добавлен раздел 'Универсальные роли' в docs/roles.md - Примеры задач для Debian и RHEL семейств - Лучшие практики для универсальных ролей - Рекомендации по тестированию на разных ОС Преимущества: - Автоматическое создание универсальных ролей - Поддержка RHEL и Debian семейств из коробки - Лучшие практики встроены в шаблоны - Подробная документация с примерами - Приучение к написанию универсальных ролей Автор: Сергей Антропов Сайт: https://devops.org.ru
This commit is contained in:
52
Makefile
52
Makefile
@@ -380,10 +380,8 @@ role: ## Управление ролями (list|create|edit|test|lint|deploy)
|
||||
echo " debug:" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||
echo " msg: \"Роль $(NAME) готова для настройки\"" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||
echo "" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||
echo "- name: Install $(NAME) package" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||
echo " package:" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||
echo " name: \"{{ $(NAME)_package | default('$(ROLE_PACKAGE)') }}\"" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||
echo " state: present" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||
echo "- name: Include OS-specific tasks" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||
echo " include_tasks: \"{{ ansible_os_family | lower }}.yml\"" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||
echo "" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||
echo "- name: Start $(NAME) service" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||
echo " systemd:" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||
@@ -391,6 +389,37 @@ role: ## Управление ролями (list|create|edit|test|lint|deploy)
|
||||
echo " state: started" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||
echo " enabled: true" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||
echo " when: $(NAME)_service is defined" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||
echo "---" > $(ROLES_DIR)/$(NAME)/tasks/debian.yml; \
|
||||
echo "# Задачи для Debian/Ubuntu семейства" >> $(ROLES_DIR)/$(NAME)/tasks/debian.yml; \
|
||||
echo "# Автор: $(AUTHOR)" >> $(ROLES_DIR)/$(NAME)/tasks/debian.yml; \
|
||||
echo "# Сайт: $(SITE)" >> $(ROLES_DIR)/$(NAME)/tasks/debian.yml; \
|
||||
echo "" >> $(ROLES_DIR)/$(NAME)/tasks/debian.yml; \
|
||||
echo "- name: Update apt cache (Debian)" >> $(ROLES_DIR)/$(NAME)/tasks/debian.yml; \
|
||||
echo " apt:" >> $(ROLES_DIR)/$(NAME)/tasks/debian.yml; \
|
||||
echo " update_cache: true" >> $(ROLES_DIR)/$(NAME)/tasks/debian.yml; \
|
||||
echo " cache_valid_time: 3600" >> $(ROLES_DIR)/$(NAME)/tasks/debian.yml; \
|
||||
echo " when: ansible_os_family == 'Debian'" >> $(ROLES_DIR)/$(NAME)/tasks/debian.yml; \
|
||||
echo "" >> $(ROLES_DIR)/$(NAME)/tasks/debian.yml; \
|
||||
echo "- name: Install $(NAME) package (Debian)" >> $(ROLES_DIR)/$(NAME)/tasks/debian.yml; \
|
||||
echo " apt:" >> $(ROLES_DIR)/$(NAME)/tasks/debian.yml; \
|
||||
echo " name: \"{{ $(NAME)_package | default('$(ROLE_PACKAGE)') }}\"" >> $(ROLES_DIR)/$(NAME)/tasks/debian.yml; \
|
||||
echo " state: present" >> $(ROLES_DIR)/$(NAME)/tasks/debian.yml; \
|
||||
echo " when: ansible_os_family == 'Debian'" >> $(ROLES_DIR)/$(NAME)/tasks/debian.yml; \
|
||||
echo "---" > $(ROLES_DIR)/$(NAME)/tasks/redhat.yml; \
|
||||
echo "# Задачи для RHEL/CentOS семейства" >> $(ROLES_DIR)/$(NAME)/tasks/redhat.yml; \
|
||||
echo "# Автор: $(AUTHOR)" >> $(ROLES_DIR)/$(NAME)/tasks/redhat.yml; \
|
||||
echo "# Сайт: $(SITE)" >> $(ROLES_DIR)/$(NAME)/tasks/redhat.yml; \
|
||||
echo "" >> $(ROLES_DIR)/$(NAME)/tasks/redhat.yml; \
|
||||
echo "- name: Update yum cache (RHEL)" >> $(ROLES_DIR)/$(NAME)/tasks/redhat.yml; \
|
||||
echo " yum:" >> $(ROLES_DIR)/$(NAME)/tasks/redhat.yml; \
|
||||
echo " update_cache: true" >> $(ROLES_DIR)/$(NAME)/tasks/redhat.yml; \
|
||||
echo " when: ansible_os_family == 'RedHat'" >> $(ROLES_DIR)/$(NAME)/tasks/redhat.yml; \
|
||||
echo "" >> $(ROLES_DIR)/$(NAME)/tasks/redhat.yml; \
|
||||
echo "- name: Install $(NAME) package (RHEL)" >> $(ROLES_DIR)/$(NAME)/tasks/redhat.yml; \
|
||||
echo " yum:" >> $(ROLES_DIR)/$(NAME)/tasks/redhat.yml; \
|
||||
echo " name: \"{{ $(NAME)_package | default('$(ROLE_PACKAGE)') }}\"" >> $(ROLES_DIR)/$(NAME)/tasks/redhat.yml; \
|
||||
echo " state: present" >> $(ROLES_DIR)/$(NAME)/tasks/redhat.yml; \
|
||||
echo " when: ansible_os_family == 'RedHat'" >> $(ROLES_DIR)/$(NAME)/tasks/redhat.yml; \
|
||||
echo "---" > $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
|
||||
echo "# Переменные по умолчанию для роли $(NAME)" >> $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
|
||||
echo "# Автор: $(AUTHOR)" >> $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
|
||||
@@ -500,8 +529,23 @@ role: ## Управление ролями (list|create|edit|test|lint|deploy)
|
||||
echo "- name: $$PLAYBOOK_NAME" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||
echo " hosts: all" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||
echo " become: true" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||
echo " gather_facts: true" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||
echo " vars:" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||
echo " # Переменные для роли $(NAME)" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||
echo " $(NAME)_enabled: true" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||
echo "" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||
echo " pre_tasks:" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||
echo " - name: Display OS information" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||
echo " debug:" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||
echo " msg: \"OS Family: {{ ansible_os_family }}, OS: {{ ansible_distribution }} {{ ansible_distribution_version }}\"" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||
echo "" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||
echo " roles:" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||
echo " - role: $(NAME)" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||
echo "" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||
echo " post_tasks:" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||
echo " - name: Verify $(NAME) installation" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||
echo " debug:" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||
echo " msg: \"$(NAME) successfully deployed on {{ inventory_hostname }}\"" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||
echo "$(GREEN)✅ Playbook $$PLAYBOOK_NAME создан$(RESET)";; \
|
||||
list) \
|
||||
echo "$(CYAN)📋 Playbooks для роли $(NAME):$(RESET)"; \
|
||||
|
||||
Reference in New Issue
Block a user