feat: Реорганизация проекта и восстановление ролей

- Восстановлены команды make role в Makefile
- Создана папка ci-cd/ для CI/CD конфигурации
- Перенесены GitLab файлы в ci-cd/
- Перенесены Dockerfile'ы в ci-cd/dockerfiles/
- Удален корневой requirements.yml
- Удалена пустая папка vars/
- Создана документация ci-cd/README.md
- Обновлен README.md с информацией о CI/CD

Изменения:
- Восстановлены команды: make role list|create|edit|test|lint|deploy|info
- Создана структура ci-cd/ с GitLab CI/CD
- Перенесены Dockerfile'ы для разных ОС
- Добавлена документация по CI/CD
- Обновлена структура проекта в README.md

Новая структура:
- ci-cd/ - CI/CD конфигурация
- ci-cd/gitlab/ - GitLab Runner
- ci-cd/dockerfiles/ - Dockerfile'ы
- ci-cd/.gitlab-ci.yml - GitLab CI/CD
- ci-cd/README.md - документация CI/CD

Преимущества:
- Организованная структура проекта
- Восстановлена функциональность ролей
- Готовые примеры CI/CD
- Документация по настройке
- Разделение ответственности

Автор: Сергей Антропов
Сайт: https://devops.org.ru
This commit is contained in:
2025-10-22 14:46:44 +03:00
parent a875a874e9
commit d6bc3f1f31
17 changed files with 244 additions and 32 deletions

111
Makefile
View File

@@ -346,10 +346,115 @@ preset: ## Управление пресетами (list|create|edit|test|copy)
esac
# =============================================================================
# УПРАВЛЕНИЕ РОЛЯМИ (УДАЛЕНО)
# УПРАВЛЕНИЕ РОЛЯМИ
# =============================================================================
# Роли Ansible удалены из проекта
# Используйте playbooks для развертывания
.PHONY: role
role: ## Управление ролями (list|create|edit|test|lint|deploy)
@case "$(word 2, $(MAKECMDGOALS))" in \
list) \
echo "$(CYAN)📋 Доступные роли:$(RESET)"; \
if [ -d "$(ROLES_DIR)" ]; then \
ls -la $(ROLES_DIR)/ | grep "^d" | awk '{print " " $$9}' | grep -v "^\.$\|^\.\.$"; \
else \
echo " $(YELLOW)Директория ролей не найдена$(RESET)"; \
fi;; \
create) \
if [ -z "$(NAME)" ]; then \
echo "$(RED)❌ Использование: make role create NAME=my-role$(RESET)"; \
exit 1; \
fi; \
echo "$(YELLOW)📝 Создаем роль: $(NAME)$(RESET)"; \
mkdir -p $(ROLES_DIR)/$(NAME)/{tasks,handlers,templates,files,vars,defaults,meta,tests}; \
echo "---" > $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
echo "# Основные задачи роли $(NAME)" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
echo "" >> $(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 " 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('$(NAME)') }}\"" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
echo " state: present" >> $(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; \
echo " name: \"{{ $(NAME)_service | default('$(NAME)') }}\"" >> $(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 " when: $(NAME)_service is defined" >> $(ROLES_DIR)/$(NAME)/tasks/main.yml; \
echo "---" > $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
echo "# Переменные по умолчанию для роли $(NAME)" >> $(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)_service: $(NAME)" >> $(ROLES_DIR)/$(NAME)/defaults/main.yml; \
echo "---" > $(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 " description: Роль $(NAME)" >> $(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 " min_ansible_version: 2.9" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
echo "dependencies: []" >> $(ROLES_DIR)/$(NAME)/meta/main.yml; \
echo "---" > $(ROLES_DIR)/$(NAME)/README.md; \
echo "# Роль $(NAME)" >> $(ROLES_DIR)/$(NAME)/README.md; \
echo "" >> $(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 "" >> $(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)_package\` | \`$(NAME)\` | Имя пакета |" >> $(ROLES_DIR)/$(NAME)/README.md; \
echo "| \`$(NAME)_service\` | \`$(NAME)\` | Имя сервиса |" >> $(ROLES_DIR)/$(NAME)/README.md; \
echo "" >> $(ROLES_DIR)/$(NAME)/README.md; \
echo "## Использование" >> $(ROLES_DIR)/$(NAME)/README.md; \
echo "" >> $(ROLES_DIR)/$(NAME)/README.md; \
echo "\`\`\`yaml" >> $(ROLES_DIR)/$(NAME)/README.md; \
echo "- hosts: all" >> $(ROLES_DIR)/$(NAME)/README.md; \
echo " roles:" >> $(ROLES_DIR)/$(NAME)/README.md; \
echo " - role: $(NAME)" >> $(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 "$(AUTHOR)" >> $(ROLES_DIR)/$(NAME)/README.md; \
echo "Сайт: $(SITE)" >> $(ROLES_DIR)/$(NAME)/README.md; \
echo "$(GREEN)✅ Роль $(NAME) создана$(RESET)";; \
edit) \
if [ -z "$(NAME)" ]; then \
echo "$(RED)❌ Использование: make role edit NAME=my-role$(RESET)"; \
exit 1; \
fi; \
echo "$(BLUE)✏️ Редактируем роль: $(NAME)$(RESET)"; \
$${EDITOR:-vim} $(ROLES_DIR)/$(NAME)/tasks/main.yml;; \
test) \
if [ -z "$(NAME)" ]; then \
echo "$(RED)❌ Использование: make role test NAME=my-role$(RESET)"; \
exit 1; \
fi; \
echo "$(PURPLE)🧪 Тестируем роль: $(NAME)$(RESET)"; \
$(MAKE) lab test LAB_SPEC=molecule/presets/minimal.yml;; \
lint) \
echo "$(YELLOW)🔍 Проверяем роли...$(RESET)"; \
docker exec ansible-controller bash -lc 'ansible-lint --config-file /ansible/.ansible-lint $(ROLES_DIR)/*'; \
echo "$(GREEN)✅ Проверка завершена$(RESET)";; \
deploy) \
echo "$(PURPLE)🚀 Развертываем роли...$(RESET)"; \
docker exec ansible-controller bash -lc 'ansible-playbook -i /tmp/molecule/inventory/hosts.yml files/playbooks/site.yml'; \
echo "$(GREEN)✅ Развертывание завершено$(RESET)";; \
info) \
if [ -z "$(NAME)" ]; then \
echo "$(RED)❌ Использование: make role info NAME=my-role$(RESET)"; \
exit 1; \
fi; \
echo "$(BLUE)📋 Информация о роли: $(NAME)$(RESET)"; \
docker exec ansible-controller bash -lc 'cat /ansible/roles/$(NAME)/README.md';; \
*) \
echo "$(RED)❌ Неизвестная команда. Доступные: list, create, edit, test, lint, deploy, info$(RESET)";; \
esac
# =============================================================================
# УПРАВЛЕНИЕ VAULT