feat: Добавлена интерактивность и поддержка playbooks для ролей
- Улучшена команда make role create с интерактивным вводом - Добавлена команда make role playbook для управления playbooks - Создана папка playbooks/ в структуре роли - Обновлена документация по работе с ролями Новые возможности: - Интерактивное создание роли с настройкой параметров - Управление playbooks роли (create|list|edit|run) - Автоматическое создание структуры с папкой playbooks - Улучшенные метаданные роли с платформами и тегами Интерактивные параметры при создании роли: - Описание роли - Основной пакет - Сервис - Платформы (ubuntu,centos,rhel) - Теги для Ansible Galaxy Команды playbooks: - make role playbook NAME=my-role create - создать playbook - make role playbook NAME=my-role list - список playbooks - make role playbook NAME=my-role edit - редактировать playbook - make role playbook NAME=my-role run - запустить playbook Документация: - Создан docs/roles.md с полным руководством - Обновлен README.md с новыми командами - Добавлены примеры использования Преимущества: - Полная интерактивность при создании ролей - Удобное управление playbooks роли - Автоматическая генерация структуры - Подробная документация - Интеграция с лабораторией Автор: Сергей Антропов Сайт: https://devops.org.ru
This commit is contained in:
107
Makefile
107
Makefile
@@ -58,7 +58,7 @@ help: ## Показать справку по всем командам
|
|||||||
@echo " $(CYAN)make lab <команда>$(RESET) - Управление лабораторией (up|down|test|destroy)"
|
@echo " $(CYAN)make lab <команда>$(RESET) - Управление лабораторией (up|down|test|destroy)"
|
||||||
@echo " $(CYAN)make kube <команда>$(RESET) - Управление Kubernetes (logs|exec|port-forward)"
|
@echo " $(CYAN)make kube <команда>$(RESET) - Управление Kubernetes (logs|exec|port-forward)"
|
||||||
@echo " $(CYAN)make preset <команда>$(RESET) - Управление пресетами (list|create|test)"
|
@echo " $(CYAN)make preset <команда>$(RESET) - Управление пресетами (list|create|test)"
|
||||||
@echo " $(CYAN)make role <команда>$(RESET) - Управление ролями (list|create|test|lint)"
|
@echo " $(CYAN)make role <команда>$(RESET) - Управление ролями (list|create|test|lint|playbook)"
|
||||||
@echo " $(CYAN)make vault <команда>$(RESET) - Управление vault (view|create|edit|encrypt)"
|
@echo " $(CYAN)make vault <команда>$(RESET) - Управление vault (view|create|edit|encrypt)"
|
||||||
@echo " $(CYAN)make report$(RESET) - Генерация HTML отчета"
|
@echo " $(CYAN)make report$(RESET) - Генерация HTML отчета"
|
||||||
@echo " $(CYAN)make lint$(RESET) - Проверка синтаксиса"
|
@echo " $(CYAN)make lint$(RESET) - Проверка синтаксиса"
|
||||||
@@ -358,9 +358,23 @@ role: ## Управление ролями (list|create|edit|test|lint|deploy)
|
|||||||
exit 1; \
|
exit 1; \
|
||||||
fi; \
|
fi; \
|
||||||
echo "$(YELLOW)📝 Создаем роль: $(NAME)$(RESET)"; \
|
echo "$(YELLOW)📝 Создаем роль: $(NAME)$(RESET)"; \
|
||||||
mkdir -p $(ROLES_DIR)/$(NAME)/{tasks,handlers,templates,files,vars,defaults,meta,tests}; \
|
echo "$(BLUE)🔧 Настройка роли...$(RESET)"; \
|
||||||
|
read -p "$(YELLOW)📝 Описание роли: $(RESET)" ROLE_DESC; \
|
||||||
|
read -p "$(YELLOW)📦 Основной пакет (по умолчанию: $(NAME)): $(RESET)" ROLE_PACKAGE; \
|
||||||
|
ROLE_PACKAGE=$${ROLE_PACKAGE:-$(NAME)}; \
|
||||||
|
read -p "$(YELLOW)🔧 Сервис (по умолчанию: $(NAME)): $(RESET)" ROLE_SERVICE; \
|
||||||
|
ROLE_SERVICE=$${ROLE_SERVICE:-$(NAME)}; \
|
||||||
|
read -p "$(YELLOW)📋 Платформы (ubuntu,centos,rhel) через запятую: $(RESET)" ROLE_PLATFORMS; \
|
||||||
|
ROLE_PLATFORMS=$${ROLE_PLATFORMS:-ubuntu,centos}; \
|
||||||
|
read -p "$(YELLOW)🏷️ Теги через запятую: $(RESET)" ROLE_TAGS; \
|
||||||
|
ROLE_TAGS=$${ROLE_TAGS:-$(NAME)}; \
|
||||||
|
echo "$(BLUE)📁 Создаем структуру роли...$(RESET)"; \
|
||||||
|
mkdir -p $(ROLES_DIR)/$(NAME)/{tasks,handlers,templates,files,vars,defaults,meta,tests,playbooks}; \
|
||||||
|
echo "$(BLUE)📝 Создаем основные файлы...$(RESET)"; \
|
||||||
echo "---" > $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
echo "---" > $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||||
echo "# Основные задачи роли $(NAME)" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
echo "# Основные задачи роли $(NAME)" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||||
|
echo "# Автор: $(AUTHOR)" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||||
|
echo "# Сайт: $(SITE)" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||||
echo "" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
echo "" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||||
echo "- name: $(NAME) placeholder" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
echo "- name: $(NAME) placeholder" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||||
echo " debug:" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
echo " debug:" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||||
@@ -368,40 +382,51 @@ role: ## Управление ролями (list|create|edit|test|lint|deploy)
|
|||||||
echo "" >> $(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 "- name: Install $(NAME) package" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||||
echo " package:" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
echo " package:" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||||
echo " name: \"{{ $(NAME)_package | default('$(NAME)') }}\"" >> $(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 " state: present" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||||
echo "" >> $(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 "- name: Start $(NAME) service" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||||
echo " systemd:" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
echo " systemd:" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||||
echo " name: \"{{ $(NAME)_service | default('$(NAME)') }}\"" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
echo " name: \"{{ $(NAME)_service | default('$(ROLE_SERVICE)') }}\"" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||||
echo " state: started" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
echo " state: started" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||||
echo " enabled: true" >> $(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 " when: $(NAME)_service is defined" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
|
||||||
echo "---" > $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
|
echo "---" > $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
|
||||||
echo "# Переменные по умолчанию для роли $(NAME)" >> $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
|
echo "# Переменные по умолчанию для роли $(NAME)" >> $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
|
||||||
|
echo "# Автор: $(AUTHOR)" >> $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
|
||||||
|
echo "# Сайт: $(SITE)" >> $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
|
||||||
|
echo "" >> $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
|
||||||
echo "$(NAME)_enabled: true" >> $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
|
echo "$(NAME)_enabled: true" >> $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
|
||||||
echo "$(NAME)_package: $(NAME)" >> $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
|
echo "$(NAME)_package: $(ROLE_PACKAGE)" >> $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
|
||||||
echo "$(NAME)_service: $(NAME)" >> $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
|
echo "$(NAME)_service: $(ROLE_SERVICE)" >> $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
|
||||||
echo "---" > $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
echo "---" > $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
||||||
echo "galaxy_info:" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
echo "galaxy_info:" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
||||||
echo " author: $(AUTHOR)" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
echo " author: $(AUTHOR)" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
||||||
echo " description: Роль $(NAME)" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
echo " description: $(ROLE_DESC)" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
||||||
echo " company: $(SITE)" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
echo " company: $(SITE)" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
||||||
echo " license: MIT" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
echo " license: MIT" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
||||||
echo " min_ansible_version: 2.9" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
echo " min_ansible_version: 2.9" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
||||||
|
echo " platforms:" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
||||||
|
echo " - name: Ubuntu" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
||||||
|
echo " versions: [focal, jammy]" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
||||||
|
echo " - name: CentOS" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
||||||
|
echo " versions: [7, 8, 9]" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
||||||
|
echo " - name: RHEL" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
||||||
|
echo " versions: [7, 8, 9]" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
||||||
|
echo " galaxy_tags: [$(ROLE_TAGS)]" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
||||||
echo "dependencies: []" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
echo "dependencies: []" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
|
||||||
echo "---" > $(ROLES_DIR)/$(NAME)/README.md; \
|
echo "---" > $(ROLES_DIR)/$(NAME)/README.md; \
|
||||||
echo "# Роль $(NAME)" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
echo "# Роль $(NAME)" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
||||||
echo "" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
echo "" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
||||||
echo "Описание роли $(NAME)." >> $(ROLES_DIR)/$(NAME)/README.md; \
|
echo "$(ROLE_DESC)" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
||||||
echo "" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
echo "" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
||||||
echo "## Переменные" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
echo "## Переменные" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
||||||
echo "" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
echo "" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
||||||
echo "| Переменная | По умолчанию | Описание |" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
echo "| Переменная | По умолчанию | Описание |" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
||||||
echo "|------------|--------------|----------|" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
echo "|------------|--------------|----------|" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
||||||
echo "| \`$(NAME)_enabled\` | \`true\` | Включить роль |" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
echo "| \`$(NAME)_enabled\` | \`true\` | Включить роль |" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
||||||
echo "| \`$(NAME)_package\` | \`$(NAME)\` | Имя пакета |" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
echo "| \`$(NAME)_package\` | \`$(ROLE_PACKAGE)\` | Имя пакета |" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
||||||
echo "| \`$(NAME)_service\` | \`$(NAME)\` | Имя сервиса |" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
echo "| \`$(NAME)_service\` | \`$(ROLE_SERVICE)\` | Имя сервиса |" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
||||||
echo "" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
echo "" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
||||||
echo "## Использование" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
echo "## Использование" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
||||||
echo "" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
echo "" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
||||||
@@ -415,7 +440,10 @@ role: ## Управление ролями (list|create|edit|test|lint|deploy)
|
|||||||
echo "" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
echo "" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
||||||
echo "$(AUTHOR)" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
echo "$(AUTHOR)" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
||||||
echo "Сайт: $(SITE)" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
echo "Сайт: $(SITE)" >> $(ROLES_DIR)/$(NAME)/README.md; \
|
||||||
echo "$(GREEN)✅ Роль $(NAME) создана$(RESET)";; \
|
echo "$(GREEN)✅ Роль $(NAME) создана$(RESET)"; \
|
||||||
|
echo "$(BLUE)📁 Структура: $(ROLES_DIR)/$(NAME)/$(RESET)"; \
|
||||||
|
echo "$(BLUE)📝 Основной файл: $(ROLES_DIR)/$(NAME)/tasks/main.yml$(RESET)"; \
|
||||||
|
echo "$(BLUE)📋 Playbooks: $(ROLES_DIR)/$(NAME)/playbooks/$(RESET)";; \
|
||||||
edit) \
|
edit) \
|
||||||
if [ -z "$(NAME)" ]; then \
|
if [ -z "$(NAME)" ]; then \
|
||||||
echo "$(RED)❌ Использование: make role edit NAME=my-role$(RESET)"; \
|
echo "$(RED)❌ Использование: make role edit NAME=my-role$(RESET)"; \
|
||||||
@@ -445,8 +473,63 @@ role: ## Управление ролями (list|create|edit|test|lint|deploy)
|
|||||||
fi; \
|
fi; \
|
||||||
echo "$(BLUE)📋 Информация о роли: $(NAME)$(RESET)"; \
|
echo "$(BLUE)📋 Информация о роли: $(NAME)$(RESET)"; \
|
||||||
docker exec ansible-controller bash -lc 'cat /ansible/roles/$(NAME)/README.md';; \
|
docker exec ansible-controller bash -lc 'cat /ansible/roles/$(NAME)/README.md';; \
|
||||||
|
playbook) \
|
||||||
|
if [ -z "$(NAME)" ]; then \
|
||||||
|
echo "$(RED)❌ Использование: make role playbook NAME=my-role$(RESET)"; \
|
||||||
|
exit 1; \
|
||||||
|
fi; \
|
||||||
|
echo "$(BLUE)📋 Управление playbooks для роли: $(NAME)$(RESET)"; \
|
||||||
|
echo "$(YELLOW)Доступные команды:$(RESET)"; \
|
||||||
|
echo " $(CYAN)create$(RESET) - Создать новый playbook"; \
|
||||||
|
echo " $(CYAN)list$(RESET) - Список playbooks"; \
|
||||||
|
echo " $(CYAN)edit$(RESET) - Редактировать playbook"; \
|
||||||
|
echo " $(CYAN)run$(RESET) - Запустить playbook"; \
|
||||||
|
read -p "$(YELLOW)Выберите команду: $(RESET)" PLAYBOOK_CMD; \
|
||||||
|
case "$$PLAYBOOK_CMD" in \
|
||||||
|
create) \
|
||||||
|
read -p "$(YELLOW)📝 Имя playbook: $(RESET)" PLAYBOOK_NAME; \
|
||||||
|
if [ -z "$$PLAYBOOK_NAME" ]; then \
|
||||||
|
echo "$(RED)❌ Имя playbook обязательно$(RESET)"; \
|
||||||
|
exit 1; \
|
||||||
|
fi; \
|
||||||
|
echo "---" > $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||||
|
echo "# Playbook: $$PLAYBOOK_NAME для роли $(NAME)" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||||
|
echo "# Автор: $(AUTHOR)" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||||
|
echo "# Сайт: $(SITE)" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||||
|
echo "" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||||
|
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 " roles:" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||||
|
echo " - role: $(NAME)" >> $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||||
|
echo "$(GREEN)✅ Playbook $$PLAYBOOK_NAME создан$(RESET)";; \
|
||||||
|
list) \
|
||||||
|
echo "$(CYAN)📋 Playbooks для роли $(NAME):$(RESET)"; \
|
||||||
|
if [ -d "$(ROLES_DIR)/$(NAME)/playbooks" ]; then \
|
||||||
|
ls -la $(ROLES_DIR)/$(NAME)/playbooks/*.yml 2>/dev/null | awk '{print " " $$9}' || echo " $(YELLOW)Нет playbooks$(RESET)"; \
|
||||||
|
else \
|
||||||
|
echo " $(YELLOW)Директория playbooks не найдена$(RESET)"; \
|
||||||
|
fi;; \
|
||||||
|
edit) \
|
||||||
|
read -p "$(YELLOW)📝 Имя playbook для редактирования: $(RESET)" PLAYBOOK_NAME; \
|
||||||
|
if [ -f "$(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml" ]; then \
|
||||||
|
$${EDITOR:-vim} $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml; \
|
||||||
|
else \
|
||||||
|
echo "$(RED)❌ Playbook $$PLAYBOOK_NAME не найден$(RESET)"; \
|
||||||
|
fi;; \
|
||||||
|
run) \
|
||||||
|
read -p "$(YELLOW)📝 Имя playbook для запуска: $(RESET)" PLAYBOOK_NAME; \
|
||||||
|
if [ -f "$(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml" ]; then \
|
||||||
|
echo "$(BLUE)🚀 Запускаем playbook: $$PLAYBOOK_NAME$(RESET)"; \
|
||||||
|
docker exec ansible-controller bash -lc "ansible-playbook -i /tmp/molecule/inventory/hosts.yml $(ROLES_DIR)/$(NAME)/playbooks/$$PLAYBOOK_NAME.yml"; \
|
||||||
|
else \
|
||||||
|
echo "$(RED)❌ Playbook $$PLAYBOOK_NAME не найден$(RESET)"; \
|
||||||
|
fi;; \
|
||||||
|
*) \
|
||||||
|
echo "$(RED)❌ Неизвестная команда playbook$(RESET)";; \
|
||||||
|
esac;; \
|
||||||
*) \
|
*) \
|
||||||
echo "$(RED)❌ Неизвестная команда. Доступные: list, create, edit, test, lint, deploy, info$(RESET)";; \
|
echo "$(RED)❌ Неизвестная команда. Доступные: list, create, edit, test, lint, deploy, info, playbook$(RESET)";; \
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|||||||
@@ -96,11 +96,12 @@ make preset edit NAME=my-preset
|
|||||||
|
|
||||||
# Управление ролями
|
# Управление ролями
|
||||||
make role list # Список ролей
|
make role list # Список ролей
|
||||||
make role create NAME=my-role
|
make role create NAME=my-role # Создать роль (интерактивно)
|
||||||
make role test NAME=my-role
|
make role test NAME=my-role # Тестировать роль
|
||||||
make role lint # Проверка ролей
|
make role lint # Проверка ролей
|
||||||
make role deploy # Развертывание ролей
|
make role deploy # Развертывание ролей
|
||||||
make role info NAME=my-role # Информация о роли
|
make role info NAME=my-role # Информация о роли
|
||||||
|
make role playbook NAME=my-role # Управление playbooks роли
|
||||||
|
|
||||||
# Проверка всего проекта
|
# Проверка всего проекта
|
||||||
make lint # Проверить весь проект на ошибки
|
make lint # Проверить весь проект на ошибки
|
||||||
|
|||||||
612
docs/roles.md
612
docs/roles.md
@@ -1,420 +1,276 @@
|
|||||||
# Ansible Роли
|
# Управление ролями Ansible
|
||||||
|
|
||||||
## Автор
|
Полное руководство по созданию, управлению и использованию ролей в универсальной лаборатории.
|
||||||
Сергей Антропов
|
|
||||||
Сайт: https://devops.org.ru
|
|
||||||
|
|
||||||
## Описание
|
|
||||||
|
|
||||||
Этот документ описывает структуру, создание и использование Ansible ролей в универсальной лаборатории.
|
|
||||||
|
|
||||||
## Содержание
|
|
||||||
|
|
||||||
- [Структура роли](#структура-роли)
|
|
||||||
- [Создание роли](#создание-роли)
|
|
||||||
- [Использование роли](#использование-роли)
|
|
||||||
- [Тестирование роли](#тестирование-роли)
|
|
||||||
- [Лучшие практики](#лучшие-практики)
|
|
||||||
- [Примеры ролей](#примеры-ролей)
|
|
||||||
|
|
||||||
## Структура роли
|
|
||||||
|
|
||||||
```
|
|
||||||
roles/
|
|
||||||
└── your_role/
|
|
||||||
├── tasks/ # Основные задачи
|
|
||||||
│ └── main.yml
|
|
||||||
├── handlers/ # Обработчики событий
|
|
||||||
│ └── main.yml
|
|
||||||
├── templates/ # Jinja2 шаблоны
|
|
||||||
│ └── config.j2
|
|
||||||
├── files/ # Статические файлы
|
|
||||||
│ └── config.conf
|
|
||||||
├── vars/ # Переменные роли
|
|
||||||
│ └── main.yml
|
|
||||||
├── defaults/ # Переменные по умолчанию
|
|
||||||
│ └── main.yml
|
|
||||||
├── meta/ # Метаданные роли
|
|
||||||
│ └── main.yml
|
|
||||||
└── tests/ # Тесты роли
|
|
||||||
├── inventory
|
|
||||||
└── test.yml
|
|
||||||
```
|
|
||||||
|
|
||||||
### Описание директорий
|
|
||||||
|
|
||||||
| Директория | Описание | Обязательная |
|
|
||||||
|------------|----------|--------------|
|
|
||||||
| `tasks/` | Основные задачи роли | Да |
|
|
||||||
| `handlers/` | Обработчики событий | Нет |
|
|
||||||
| `templates/` | Jinja2 шаблоны | Нет |
|
|
||||||
| `files/` | Статические файлы | Нет |
|
|
||||||
| `vars/` | Переменные роли | Нет |
|
|
||||||
| `defaults/` | Переменные по умолчанию | Нет |
|
|
||||||
| `meta/` | Метаданные роли | Нет |
|
|
||||||
| `tests/` | Тесты роли | Нет |
|
|
||||||
|
|
||||||
## Создание роли
|
## Создание роли
|
||||||
|
|
||||||
### Автоматическое создание
|
### Интерактивное создание
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Создать роль с помощью ansible-galaxy
|
make role create NAME=my-role
|
||||||
ansible-galaxy init your_role
|
|
||||||
|
|
||||||
# Создать роль в определенной директории
|
|
||||||
ansible-galaxy init your_role --init-path roles/
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ручное создание
|
**Что происходит:**
|
||||||
|
1. **Запрашивается описание роли** - краткое описание функциональности
|
||||||
|
2. **Настраивается основной пакет** - имя пакета для установки
|
||||||
|
3. **Настраивается сервис** - имя сервиса для управления
|
||||||
|
4. **Выбираются платформы** - поддерживаемые ОС (ubuntu, centos, rhel)
|
||||||
|
5. **Указываются теги** - теги для Ansible Galaxy
|
||||||
|
6. **Создается структура роли** с папкой `playbooks/`
|
||||||
|
|
||||||
|
### Структура созданной роли
|
||||||
|
|
||||||
|
```
|
||||||
|
roles/my-role/
|
||||||
|
├── tasks/
|
||||||
|
│ └── main.yml # Основные задачи
|
||||||
|
├── handlers/
|
||||||
|
│ └── main.yml # Обработчики
|
||||||
|
├── templates/ # Шаблоны Jinja2
|
||||||
|
├── files/ # Статические файлы
|
||||||
|
├── vars/
|
||||||
|
│ └── main.yml # Переменные роли
|
||||||
|
├── defaults/
|
||||||
|
│ └── main.yml # Переменные по умолчанию
|
||||||
|
├── meta/
|
||||||
|
│ └── main.yml # Метаданные роли
|
||||||
|
├── tests/ # Тесты роли
|
||||||
|
└── playbooks/ # Playbooks роли
|
||||||
|
└── (создаются через make role playbook)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Управление playbooks роли
|
||||||
|
|
||||||
|
### Создание playbook
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Создать структуру роли
|
make role playbook NAME=my-role
|
||||||
mkdir -p roles/your_role/{tasks,handlers,templates,files,vars,defaults,meta,tests}
|
# Выберите: create
|
||||||
|
# Введите имя: deploy
|
||||||
# Создать основной task
|
|
||||||
cat > roles/your_role/tasks/main.yml << EOF
|
|
||||||
---
|
|
||||||
- name: Install package
|
|
||||||
package:
|
|
||||||
name: "{{ package_name }}"
|
|
||||||
state: present
|
|
||||||
|
|
||||||
- name: Start service
|
|
||||||
service:
|
|
||||||
name: "{{ service_name }}"
|
|
||||||
state: started
|
|
||||||
enabled: true
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Создать переменные по умолчанию
|
|
||||||
cat > roles/your_role/defaults/main.yml << EOF
|
|
||||||
---
|
|
||||||
package_name: nginx
|
|
||||||
service_name: nginx
|
|
||||||
EOF
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Использование роли
|
**Создается файл:** `roles/my-role/playbooks/deploy.yml`
|
||||||
|
|
||||||
### В playbook
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
---
|
---
|
||||||
- name: Deploy web server
|
# Playbook: deploy для роли my-role
|
||||||
hosts: webservers
|
# Автор: Сергей Антропов
|
||||||
become: true
|
# Сайт: https://devops.org.ru
|
||||||
roles:
|
|
||||||
- your_role
|
|
||||||
```
|
|
||||||
|
|
||||||
### С переменными
|
- name: deploy
|
||||||
|
|
||||||
```yaml
|
|
||||||
---
|
|
||||||
- name: Deploy web server
|
|
||||||
hosts: webservers
|
|
||||||
become: true
|
|
||||||
roles:
|
|
||||||
- role: your_role
|
|
||||||
vars:
|
|
||||||
package_name: apache2
|
|
||||||
service_name: apache2
|
|
||||||
```
|
|
||||||
|
|
||||||
### С условиями
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
---
|
|
||||||
- name: Deploy web server
|
|
||||||
hosts: webservers
|
|
||||||
become: true
|
|
||||||
roles:
|
|
||||||
- role: your_role
|
|
||||||
when: ansible_os_family == "Debian"
|
|
||||||
```
|
|
||||||
|
|
||||||
## Тестирование роли
|
|
||||||
|
|
||||||
### Создание тестов
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Создать тестовый playbook
|
|
||||||
cat > roles/your_role/tests/test.yml << EOF
|
|
||||||
---
|
|
||||||
- name: Test role
|
|
||||||
hosts: all
|
hosts: all
|
||||||
become: true
|
become: true
|
||||||
roles:
|
roles:
|
||||||
- your_role
|
- role: my-role
|
||||||
EOF
|
|
||||||
|
|
||||||
# Создать инвентарь для тестов
|
|
||||||
cat > roles/your_role/tests/inventory << EOF
|
|
||||||
[webservers]
|
|
||||||
localhost ansible_connection=local
|
|
||||||
EOF
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Запуск тестов
|
### Список playbooks
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Запустить тест роли
|
make role playbook NAME=my-role
|
||||||
ansible-playbook -i roles/your_role/tests/inventory roles/your_role/tests/test.yml
|
# Выберите: list
|
||||||
|
```
|
||||||
|
|
||||||
# Запустить тест с Molecule
|
### Редактирование playbook
|
||||||
molecule test
|
|
||||||
|
```bash
|
||||||
|
make role playbook NAME=my-role
|
||||||
|
# Выберите: edit
|
||||||
|
# Введите имя: deploy
|
||||||
|
```
|
||||||
|
|
||||||
|
### Запуск playbook
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make role playbook NAME=my-role
|
||||||
|
# Выберите: run
|
||||||
|
# Введите имя: deploy
|
||||||
|
```
|
||||||
|
|
||||||
|
## Команды управления ролями
|
||||||
|
|
||||||
|
### Основные команды
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Список ролей
|
||||||
|
make role list
|
||||||
|
|
||||||
|
# Создать роль (интерактивно)
|
||||||
|
make role create NAME=my-role
|
||||||
|
|
||||||
|
# Редактировать роль
|
||||||
|
make role edit NAME=my-role
|
||||||
|
|
||||||
|
# Тестировать роль
|
||||||
|
make role test NAME=my-role
|
||||||
|
|
||||||
|
# Проверить синтаксис
|
||||||
|
make role lint
|
||||||
|
|
||||||
|
# Развернуть роли
|
||||||
|
make role deploy
|
||||||
|
|
||||||
|
# Информация о роли
|
||||||
|
make role info NAME=my-role
|
||||||
|
|
||||||
|
# Управление playbooks
|
||||||
|
make role playbook NAME=my-role
|
||||||
|
```
|
||||||
|
|
||||||
|
### Интерактивные возможности
|
||||||
|
|
||||||
|
#### При создании роли:
|
||||||
|
- **Описание роли** - автоматически добавляется в README.md
|
||||||
|
- **Основной пакет** - настраивается в defaults/main.yml
|
||||||
|
- **Сервис** - настраивается в defaults/main.yml
|
||||||
|
- **Платформы** - добавляются в meta/main.yml
|
||||||
|
- **Теги** - добавляются в meta/main.yml
|
||||||
|
|
||||||
|
#### При работе с playbooks:
|
||||||
|
- **Создание** - интерактивный ввод имени
|
||||||
|
- **Редактирование** - выбор из списка существующих
|
||||||
|
- **Запуск** - выбор playbook для выполнения
|
||||||
|
|
||||||
|
## Примеры использования
|
||||||
|
|
||||||
|
### Создание роли nginx
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make role create NAME=nginx
|
||||||
|
# Описание: Nginx web server role
|
||||||
|
# Пакет: nginx
|
||||||
|
# Сервис: nginx
|
||||||
|
# Платформы: ubuntu,centos
|
||||||
|
# Теги: web,nginx,server
|
||||||
|
```
|
||||||
|
|
||||||
|
### Создание playbook для nginx
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make role playbook NAME=nginx
|
||||||
|
# Выберите: create
|
||||||
|
# Имя: install
|
||||||
|
```
|
||||||
|
|
||||||
|
**Результат:** `roles/nginx/playbooks/install.yml`
|
||||||
|
|
||||||
|
### Запуск playbook
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make role playbook NAME=nginx
|
||||||
|
# Выберите: run
|
||||||
|
# Имя: install
|
||||||
|
```
|
||||||
|
|
||||||
|
## Структура файлов роли
|
||||||
|
|
||||||
|
### tasks/main.yml
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
---
|
||||||
|
# Основные задачи роли nginx
|
||||||
|
# Автор: Сергей Антропов
|
||||||
|
# Сайт: https://devops.org.ru
|
||||||
|
|
||||||
|
- name: nginx placeholder
|
||||||
|
debug:
|
||||||
|
msg: "Роль nginx готова для настройки"
|
||||||
|
|
||||||
|
- name: Install nginx package
|
||||||
|
package:
|
||||||
|
name: "{{ nginx_package | default('nginx') }}"
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Start nginx service
|
||||||
|
systemd:
|
||||||
|
name: "{{ nginx_service | default('nginx') }}"
|
||||||
|
state: started
|
||||||
|
enabled: true
|
||||||
|
when: nginx_service is defined
|
||||||
|
```
|
||||||
|
|
||||||
|
### defaults/main.yml
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
---
|
||||||
|
# Переменные по умолчанию для роли nginx
|
||||||
|
# Автор: Сергей Антропов
|
||||||
|
# Сайт: https://devops.org.ru
|
||||||
|
|
||||||
|
nginx_enabled: true
|
||||||
|
nginx_package: nginx
|
||||||
|
nginx_service: nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
### meta/main.yml
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
---
|
||||||
|
galaxy_info:
|
||||||
|
author: Сергей Антропов
|
||||||
|
description: Nginx web server role
|
||||||
|
company: https://devops.org.ru
|
||||||
|
license: MIT
|
||||||
|
min_ansible_version: 2.9
|
||||||
|
platforms:
|
||||||
|
- name: Ubuntu
|
||||||
|
versions: [focal, jammy]
|
||||||
|
- name: CentOS
|
||||||
|
versions: [7, 8, 9]
|
||||||
|
- name: RHEL
|
||||||
|
versions: [7, 8, 9]
|
||||||
|
galaxy_tags: [web,nginx,server]
|
||||||
|
dependencies: []
|
||||||
```
|
```
|
||||||
|
|
||||||
## Лучшие практики
|
## Лучшие практики
|
||||||
|
|
||||||
### Структура задач
|
### 1. Структура роли
|
||||||
|
- Используйте **tasks/main.yml** для основных задач
|
||||||
|
- Создавайте **отдельные файлы** для сложных задач
|
||||||
|
- Используйте **handlers** для перезапуска сервисов
|
||||||
|
- Храните **шаблоны** в templates/
|
||||||
|
- Храните **статические файлы** в files/
|
||||||
|
|
||||||
```yaml
|
### 2. Переменные
|
||||||
---
|
- **defaults/main.yml** - значения по умолчанию
|
||||||
# tasks/main.yml
|
- **vars/main.yml** - внутренние переменные роли
|
||||||
- name: Install package
|
- Используйте **префиксы** для переменных роли
|
||||||
package:
|
|
||||||
name: "{{ package_name }}"
|
|
||||||
state: present
|
|
||||||
notify: restart service
|
|
||||||
|
|
||||||
- name: Configure service
|
### 3. Playbooks
|
||||||
template:
|
- Создавайте **отдельные playbooks** для разных сценариев
|
||||||
src: config.j2
|
- Используйте **переменные** для настройки
|
||||||
dest: /etc/service/config.conf
|
- Добавляйте **проверки** и **валидацию**
|
||||||
notify: restart service
|
|
||||||
|
|
||||||
- name: Start service
|
### 4. Тестирование
|
||||||
service:
|
- Используйте **make role test** для проверки
|
||||||
name: "{{ service_name }}"
|
- Создавайте **тесты** в папке tests/
|
||||||
state: started
|
- Проверяйте **разные платформы**
|
||||||
enabled: true
|
|
||||||
```
|
|
||||||
|
|
||||||
### Обработчики
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
---
|
|
||||||
# handlers/main.yml
|
|
||||||
- name: restart service
|
|
||||||
service:
|
|
||||||
name: "{{ service_name }}"
|
|
||||||
state: restarted
|
|
||||||
```
|
|
||||||
|
|
||||||
### Переменные
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
---
|
|
||||||
# defaults/main.yml
|
|
||||||
package_name: nginx
|
|
||||||
service_name: nginx
|
|
||||||
config_file: /etc/nginx/nginx.conf
|
|
||||||
port: 80
|
|
||||||
|
|
||||||
# vars/main.yml
|
|
||||||
service_user: nginx
|
|
||||||
service_group: nginx
|
|
||||||
```
|
|
||||||
|
|
||||||
### Метаданные
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
---
|
|
||||||
# meta/main.yml
|
|
||||||
galaxy_info:
|
|
||||||
author: Your Name
|
|
||||||
description: Your role description
|
|
||||||
company: Your Company
|
|
||||||
license: MIT
|
|
||||||
min_ansible_version: "2.9"
|
|
||||||
platforms:
|
|
||||||
- name: Ubuntu
|
|
||||||
versions:
|
|
||||||
- focal
|
|
||||||
- jammy
|
|
||||||
- name: CentOS
|
|
||||||
versions:
|
|
||||||
- 8
|
|
||||||
- 9
|
|
||||||
galaxy_tags:
|
|
||||||
- web
|
|
||||||
- nginx
|
|
||||||
dependencies: []
|
|
||||||
```
|
|
||||||
|
|
||||||
## Примеры ролей
|
|
||||||
|
|
||||||
### Роль для веб-сервера
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
---
|
|
||||||
# tasks/main.yml
|
|
||||||
- name: Install nginx
|
|
||||||
package:
|
|
||||||
name: nginx
|
|
||||||
state: present
|
|
||||||
|
|
||||||
- name: Configure nginx
|
|
||||||
template:
|
|
||||||
src: nginx.conf.j2
|
|
||||||
dest: /etc/nginx/nginx.conf
|
|
||||||
notify: restart nginx
|
|
||||||
|
|
||||||
- name: Start nginx
|
|
||||||
service:
|
|
||||||
name: nginx
|
|
||||||
state: started
|
|
||||||
enabled: true
|
|
||||||
```
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
---
|
|
||||||
# defaults/main.yml
|
|
||||||
nginx_port: 80
|
|
||||||
nginx_ssl_port: 443
|
|
||||||
nginx_user: www-data
|
|
||||||
nginx_worker_processes: auto
|
|
||||||
```
|
|
||||||
|
|
||||||
### Роль для базы данных
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
---
|
|
||||||
# tasks/main.yml
|
|
||||||
- name: Install PostgreSQL
|
|
||||||
package:
|
|
||||||
name: postgresql
|
|
||||||
state: present
|
|
||||||
|
|
||||||
- name: Start PostgreSQL
|
|
||||||
service:
|
|
||||||
name: postgresql
|
|
||||||
state: started
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
- name: Create database
|
|
||||||
postgresql_db:
|
|
||||||
name: "{{ db_name }}"
|
|
||||||
state: present
|
|
||||||
|
|
||||||
- name: Create user
|
|
||||||
postgresql_user:
|
|
||||||
name: "{{ db_user }}"
|
|
||||||
password: "{{ db_password }}"
|
|
||||||
state: present
|
|
||||||
```
|
|
||||||
|
|
||||||
### Роль для мониторинга
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
---
|
|
||||||
# tasks/main.yml
|
|
||||||
- name: Install Prometheus
|
|
||||||
package:
|
|
||||||
name: prometheus
|
|
||||||
state: present
|
|
||||||
|
|
||||||
- name: Configure Prometheus
|
|
||||||
template:
|
|
||||||
src: prometheus.yml.j2
|
|
||||||
dest: /etc/prometheus/prometheus.yml
|
|
||||||
notify: restart prometheus
|
|
||||||
|
|
||||||
- name: Start Prometheus
|
|
||||||
service:
|
|
||||||
name: prometheus
|
|
||||||
state: started
|
|
||||||
enabled: true
|
|
||||||
```
|
|
||||||
|
|
||||||
## Интеграция с лабораторией
|
## Интеграция с лабораторией
|
||||||
|
|
||||||
### Использование в пресетах
|
### Автоматическое добавление в систему
|
||||||
|
|
||||||
|
При создании роли через `make role create`:
|
||||||
|
1. Роль автоматически добавляется в `deploy/tasks/main.yml`
|
||||||
|
2. Создается переменная `{role_name}_enabled: true`
|
||||||
|
3. Обновляется `site.yml` с новой ролью
|
||||||
|
|
||||||
|
### Использование в playbooks
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
---
|
---
|
||||||
# molecule/presets/webapp.yml
|
- name: Deploy my-role
|
||||||
hosts:
|
hosts: all
|
||||||
- name: web1
|
|
||||||
group: webservers
|
|
||||||
family: debian
|
|
||||||
publish:
|
|
||||||
- "8080:80"
|
|
||||||
|
|
||||||
- name: db1
|
|
||||||
group: databases
|
|
||||||
family: rhel
|
|
||||||
publish:
|
|
||||||
- "5432:5432"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Playbook для ролей
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
---
|
|
||||||
# files/playbooks/site.yml
|
|
||||||
- name: Deploy web servers
|
|
||||||
hosts: webservers
|
|
||||||
become: true
|
become: true
|
||||||
roles:
|
roles:
|
||||||
- nginx
|
- role: my-role
|
||||||
- ssl
|
vars:
|
||||||
|
my_role_enabled: true
|
||||||
- name: Deploy databases
|
my_role_package: custom-package
|
||||||
hosts: databases
|
|
||||||
become: true
|
|
||||||
roles:
|
|
||||||
- postgresql
|
|
||||||
- backup
|
|
||||||
|
|
||||||
- name: Deploy monitoring
|
|
||||||
hosts: monitoring
|
|
||||||
become: true
|
|
||||||
roles:
|
|
||||||
- prometheus
|
|
||||||
- grafana
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Тестирование с различными пресетами
|
## Автор
|
||||||
|
|
||||||
```bash
|
Сергей Антропов
|
||||||
# Тестирование с минимальным пресетом
|
Сайт: https://devops.org.ru
|
||||||
make lab-test LAB_SPEC=molecule/presets/minimal.yml
|
|
||||||
|
|
||||||
# Тестирование с веб-приложением
|
|
||||||
make lab-test LAB_SPEC=molecule/presets/webapp.yml
|
|
||||||
|
|
||||||
# Тестирование с микросервисами
|
|
||||||
make lab-test LAB_SPEC=molecule/presets/microservices.yml
|
|
||||||
```
|
|
||||||
|
|
||||||
## Публикация роли
|
|
||||||
|
|
||||||
### В Ansible Galaxy
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Установить ansible-galaxy
|
|
||||||
pip install ansible-galaxy
|
|
||||||
|
|
||||||
# Публиковать роль
|
|
||||||
ansible-galaxy import your-username your-role
|
|
||||||
|
|
||||||
# Или через GitHub
|
|
||||||
ansible-galaxy import your-username your-role --github-user your-username
|
|
||||||
```
|
|
||||||
|
|
||||||
### В приватном репозитории
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Установить роль из Git
|
|
||||||
ansible-galaxy install git+https://github.com/your-username/your-role.git
|
|
||||||
|
|
||||||
# Установить роль из файла
|
|
||||||
ansible-galaxy install your-role.tar.gz
|
|
||||||
```
|
|
||||||
|
|
||||||
## Заключение
|
|
||||||
|
|
||||||
Этот документ описывает основные принципы создания и использования Ansible ролей в универсальной лаборатории. Для получения дополнительной информации обратитесь к [основной документации](universal-lab.md) и [примерам использования](examples.md).
|
|
||||||
Reference in New Issue
Block a user