Merge k8s в main: добавлена поддержка Kubernetes Kind кластеров
This commit is contained in:
459
Makefile
459
Makefile
@@ -1,5 +1,5 @@
|
||||
# =============================================================================
|
||||
# AnsibleLab - Универсальная система тестирования Ansible ролей
|
||||
# DevOpsLab - Универсальная система тестирования Ansible ролей
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
# =============================================================================
|
||||
@@ -20,11 +20,12 @@ WHITE := \033[0;37m
|
||||
RESET := \033[0m
|
||||
|
||||
# Глобальные переменные
|
||||
PROJECT_NAME ?= ansible-lab
|
||||
PROJECT_NAME ?= devops-lab
|
||||
VERSION ?= 0.1.0
|
||||
AUTHOR ?= "Сергей Антропов"
|
||||
SITE ?= "https://devops.org.ru"
|
||||
DOCKER_IMAGE ?= inecs/ansible-lab:ansible-controller-latest
|
||||
DOCKER_K8S_IMAGE ?= inecs/ansible-lab:k8s-latest
|
||||
DOCKER_DIND_IMAGE ?= docker:27-dind
|
||||
CONTAINER_NAME ?= ansible-controller
|
||||
|
||||
@@ -40,7 +41,7 @@ DOCKER_BUILDX_BUILDER ?= multiarch-builder
|
||||
# Базовые образы и их теги
|
||||
BASE_IMAGES := altlinux/p9 astralinux/astra-1.7 redos/redos:9 registry.access.redhat.com/ubi8/ubi centos:7 quay.io/centos/centos:8 quay.io/centos/centos:stream9 almalinux:8 rockylinux:8 ubuntu:20.04 ubuntu:22.04 ubuntu:24.04 debian:9 debian:10 debian:11 debian:bookworm
|
||||
|
||||
.PHONY: role vault git docker presets controller help update-playbooks generate-docs setup-cicd list create delete
|
||||
.PHONY: role vault git docker presets controller k8s help update-playbooks generate-docs setup-cicd list create delete
|
||||
|
||||
# =============================================================================
|
||||
# КОМАНДЫ ДЛЯ РАБОТЫ С РОЛЯМИ
|
||||
@@ -914,11 +915,15 @@ docker-get-base-tag:
|
||||
TAG=$$(docker inspect --format='{{.RepoTags}}' $$BASE_IMAGE 2>/dev/null | tr -d '[]' | cut -d',' -f1 | cut -d':' -f2 | tr -d ' ' || echo "latest");; \
|
||||
ansible-controller) \
|
||||
TAG="latest";; \
|
||||
*) \
|
||||
echo "❌ Неизвестный образ: $(IMAGE)"; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
echo "$$TAG"
|
||||
k8s) \
|
||||
TAG="latest";; \
|
||||
k8s-portforward) \
|
||||
TAG="latest";; \
|
||||
*) \
|
||||
echo "❌ Неизвестный образ: $(IMAGE)"; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
echo "$$TAG"
|
||||
|
||||
# Сборка одного образа с multi-arch
|
||||
docker-build-image:
|
||||
@@ -1022,12 +1027,428 @@ controller:
|
||||
echo " 💡 Удаляет: контейнеры и сети";; \
|
||||
esac
|
||||
|
||||
# =============================================================================
|
||||
# КОМАНДЫ ДЛЯ РАБОТЫ С KUBERNETES KIND
|
||||
# =============================================================================
|
||||
k8s:
|
||||
@case "$(word 2, $(MAKECMDGOALS))" in \
|
||||
create) \
|
||||
echo "☸️ Создание Kind кластера..."; \
|
||||
PRESET_ARG="$(word 3, $(MAKECMDGOALS))"; \
|
||||
if [ -z "$$PRESET_ARG" ]; then \
|
||||
PRESET=k8s-minimal; \
|
||||
echo "📋 Используется preset по умолчанию: $$PRESET (минимальный без аддонов)"; \
|
||||
else \
|
||||
PRESET=$$PRESET_ARG; \
|
||||
echo "📋 Используется preset: $$PRESET"; \
|
||||
fi; \
|
||||
if [ ! -f "molecule/presets/k8s/$$PRESET.yml" ]; then \
|
||||
echo "❌ Ошибка: Пресет '$$PRESET' не найден!"; \
|
||||
echo "💡 Доступные пресеты:"; \
|
||||
ls -1 molecule/presets/k8s/*.yml 2>/dev/null | sed 's|molecule/presets/k8s/||g' | sed 's|\.yml||g' | sed 's/^/ - /' || echo " - k8s-minimal"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
CONTAINER_NAME=k8s-controller; \
|
||||
docker run -d --name $$CONTAINER_NAME --rm \
|
||||
-v "$(PWD):/workspace" -w /workspace \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
-u root \
|
||||
-e ANSIBLE_FORCE_COLOR=1 \
|
||||
-e MOLECULE_PRESET=$$PRESET \
|
||||
-e MOLECULE_EPHEMERAL_DIRECTORY=/tmp/molecule_workspace \
|
||||
$(DOCKER_K8S_IMAGE) \
|
||||
/bin/bash -c 'sleep infinity'; \
|
||||
echo "🚀 Запуск создания кластера..."; \
|
||||
docker exec $$CONTAINER_NAME bash -c "cd /workspace && python3 /workspace/scripts/create_k8s_cluster.py molecule/presets/k8s/$$PRESET.yml $$CONTAINER_NAME"; \
|
||||
echo "✅ Kind кластер создан"; \
|
||||
echo "💡 Для создания port-forward: make k8s portforward create"; \
|
||||
echo "💡 Для подключения используйте: make k8s kubeconfig"; \
|
||||
echo "💡 Для остановки используйте: make k8s stop";; \
|
||||
destroy) \
|
||||
echo "🗑️ Удаление Kind кластера и контейнеров..."; \
|
||||
PRESET_ARG="$(word 3, $(MAKECMDGOALS))"; \
|
||||
PRESET=$${PRESET_ARG:-k8s-minimal}; \
|
||||
CONTAINER_NAME=k8s-controller; \
|
||||
echo "🔌 Очистка port-forward..."; \
|
||||
python3 scripts/portforward.py clear || echo "⚠️ Не удалось очистить port-forward"; \
|
||||
if docker ps | grep -q $$CONTAINER_NAME; then \
|
||||
echo "🗑️ Удаление Kind кластеров..."; \
|
||||
docker exec $$CONTAINER_NAME bash -c "kind delete clusters --all" 2>/dev/null || true; \
|
||||
else \
|
||||
echo "⚠️ Контейнер $$CONTAINER_NAME не запущен"; \
|
||||
fi; \
|
||||
docker rm -f $$CONTAINER_NAME 2>/dev/null || true; \
|
||||
echo "🗑️ Удаление контейнеров из пресета..."; \
|
||||
if [ -f "molecule/presets/k8s/$$PRESET.yml" ]; then \
|
||||
if docker ps | grep -q $$CONTAINER_NAME; then \
|
||||
docker exec $$CONTAINER_NAME bash -c "python3 /workspace/scripts/delete_hosts.py /workspace/molecule/presets/k8s/$$PRESET.yml" 2>/dev/null || true; \
|
||||
else \
|
||||
python3 scripts/delete_hosts.py molecule/presets/k8s/$$PRESET.yml 2>/dev/null || true; \
|
||||
fi; \
|
||||
fi; \
|
||||
echo "✅ Удаление завершено";; \
|
||||
stop) \
|
||||
echo "🛑 Остановка Kind кластера..."; \
|
||||
PRESET_ARG="$(word 3, $(MAKECMDGOALS))"; \
|
||||
if [ -z "$$PRESET_ARG" ]; then \
|
||||
echo "❌ Ошибка: Укажите пресет"; \
|
||||
echo "💡 Пример: make k8s stop kubernetes"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
CONTAINER_NAME=k8s-controller; \
|
||||
if docker ps | grep -q $$CONTAINER_NAME; then \
|
||||
docker exec $$CONTAINER_NAME bash -c "kind get clusters | xargs -I {} kind stop cluster --name {}" 2>/dev/null || true; \
|
||||
echo "✅ Kind кластер остановлен"; \
|
||||
else \
|
||||
echo "⚠️ Контейнер $$CONTAINER_NAME не запущен"; \
|
||||
fi; \
|
||||
echo "💡 Кластер остановлен, но не удален"; \
|
||||
echo "💡 Для перезапуска: make k8s start $$PRESET_ARG"; \
|
||||
echo "💡 Для полного удаления: make k8s destroy $$PRESET_ARG";; \
|
||||
start) \
|
||||
echo "🚀 Запуск Kind кластера..."; \
|
||||
PRESET_ARG="$(word 3, $(MAKECMDGOALS))"; \
|
||||
if [ -z "$$PRESET_ARG" ]; then \
|
||||
echo "❌ Ошибка: Укажите пресет"; \
|
||||
echo "💡 Пример: make k8s start kubernetes"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
CONTAINER_NAME=k8s-controller; \
|
||||
if ! docker ps | grep -q $$CONTAINER_NAME; then \
|
||||
echo "❌ Контейнер $$CONTAINER_NAME не запущен"; \
|
||||
echo "💡 Запустите: make k8s create $$PRESET_ARG"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
docker exec $$CONTAINER_NAME bash -c "kind get clusters | xargs -I {} kind start cluster --name {}" 2>/dev/null || true; \
|
||||
echo "✅ Kind кластер запущен";; \
|
||||
status) \
|
||||
echo "📊 Детальный отчет о состоянии кластера..."; \
|
||||
PRESET_ARG="$(word 3, $(MAKECMDGOALS))"; \
|
||||
if [ -z "$$PRESET_ARG" ]; then \
|
||||
echo "❌ Ошибка: Укажите пресет"; \
|
||||
echo "💡 Пример: make k8s status kubernetes"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
CONTAINER_NAME=k8s-controller; \
|
||||
if docker ps | grep -q $$CONTAINER_NAME; then \
|
||||
python3 scripts/k8s_status.py; \
|
||||
else \
|
||||
echo "⚠️ Контейнер $$CONTAINER_NAME не запущен"; \
|
||||
echo "💡 Запустите: make k8s create $$PRESET_ARG"; \
|
||||
fi;; \
|
||||
config) \
|
||||
echo "📋 Получение kubeconfig..."; \
|
||||
PRESET_ARG="$(word 3, $(MAKECMDGOALS))"; \
|
||||
if [ -z "$$PRESET_ARG" ]; then \
|
||||
echo "❌ Ошибка: Укажите пресет"; \
|
||||
echo "💡 Пример: make k8s config kubernetes"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
CONTAINER_NAME=k8s-controller; \
|
||||
if ! docker ps | grep -q $$CONTAINER_NAME; then \
|
||||
echo "❌ Контейнер $$CONTAINER_NAME не запущен"; \
|
||||
echo "💡 Запустите: make k8s create $$PRESET_ARG"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
KUBECONFIG_FILE="$$(pwd)/kubeconfig"; \
|
||||
docker exec $$CONTAINER_NAME bash -c "kind get kubeconfig" > $$KUBECONFIG_FILE 2>/dev/null || true; \
|
||||
if [ -f $$KUBECONFIG_FILE ] && [ -s $$KUBECONFIG_FILE ]; then \
|
||||
echo "✅ kubeconfig сохранен в: $$KUBECONFIG_FILE"; \
|
||||
echo ""; \
|
||||
echo "💡 Для использования:"; \
|
||||
echo " export KUBECONFIG=$$KUBECONFIG_FILE"; \
|
||||
echo " kubectl get nodes"; \
|
||||
echo ""; \
|
||||
echo "💡 Или для однократного использования:"; \
|
||||
echo " kubectl --kubeconfig=$$KUBECONFIG_FILE get nodes"; \
|
||||
else \
|
||||
echo "❌ Не удалось получить kubeconfig"; \
|
||||
rm -f $$KUBECONFIG_FILE; \
|
||||
fi;; \
|
||||
nodes) \
|
||||
echo "🖥️ Просмотр узлов кластера..."; \
|
||||
PRESET_ARG="$(word 3, $(MAKECMDGOALS))"; \
|
||||
if [ -z "$$PRESET_ARG" ]; then \
|
||||
echo "❌ Ошибка: Укажите пресет"; \
|
||||
echo "💡 Пример: make k8s nodes kubernetes"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
CONTAINER_NAME=k8s-controller; \
|
||||
if ! docker ps | grep -q $$CONTAINER_NAME; then \
|
||||
echo "❌ Контейнер $$CONTAINER_NAME не запущен"; \
|
||||
echo "💡 Запустите: make k8s create $$PRESET_ARG"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
CLUSTER_NAME=$$(docker exec $$CONTAINER_NAME kind get clusters | head -1); \
|
||||
docker exec $$CONTAINER_NAME bash -c "CLUSTER_NAME=$$CLUSTER_NAME; kubectl --server=https://\$${CLUSTER_NAME}-control-plane:6443 --insecure-skip-tls-verify get nodes";; \
|
||||
shell) \
|
||||
echo "🐚 Открытие shell в контейнере..."; \
|
||||
PRESET_ARG="$(word 3, $(MAKECMDGOALS))"; \
|
||||
if [ -z "$$PRESET_ARG" ]; then \
|
||||
echo "❌ Ошибка: Укажите пресет"; \
|
||||
echo "💡 Пример: make k8s shell kubernetes"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
CONTAINER_NAME=k8s-controller; \
|
||||
if docker ps | grep -q $$CONTAINER_NAME; then \
|
||||
docker exec -it $$CONTAINER_NAME bash; \
|
||||
else \
|
||||
echo "❌ Контейнер $$CONTAINER_NAME не запущен"; \
|
||||
echo "💡 Запустите: make k8s create $$PRESET_ARG"; \
|
||||
fi;; \
|
||||
manifest) \
|
||||
echo "📄 Работа с манифестами..."; \
|
||||
MANIFEST_CMD="$(word 3, $(MAKECMDGOALS))"; \
|
||||
PRESET_ARG="$(word 4, $(MAKECMDGOALS))"; \
|
||||
MANIFEST_ARG="$(word 5, $(MAKECMDGOALS))"; \
|
||||
if [ -z "$$MANIFEST_CMD" ] || [ -z "$$PRESET_ARG" ] || [ -z "$$MANIFEST_ARG" ]; then \
|
||||
echo "❌ Ошибка: Укажите команду, пресет и путь к манифесту"; \
|
||||
echo "💡 Пример: make k8s manifest apply kubernetes https://example.com/manifest.yaml"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
CONTAINER_NAME=k8s-controller; \
|
||||
if ! docker ps | grep -q $$CONTAINER_NAME; then \
|
||||
echo "❌ Контейнер $$CONTAINER_NAME не запущен"; \
|
||||
echo "💡 Запустите: make k8s create $$PRESET_ARG"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
CLUSTER_NAME=$$(docker exec $$CONTAINER_NAME kind get clusters | head -1); \
|
||||
case "$$MANIFEST_CMD" in \
|
||||
apply) \
|
||||
echo "📥 Применение манифеста: $$MANIFEST_ARG"; \
|
||||
docker exec $$CONTAINER_NAME bash -c "CLUSTER_NAME=$$CLUSTER_NAME; kubectl --server=https://\$${CLUSTER_NAME}-control-plane:6443 --insecure-skip-tls-verify apply -f $$MANIFEST_ARG";; \
|
||||
delete) \
|
||||
echo "🗑️ Удаление ресурсов из манифеста: $$MANIFEST_ARG"; \
|
||||
docker exec $$CONTAINER_NAME bash -c "CLUSTER_NAME=$$CLUSTER_NAME; kubectl --server=https://\$${CLUSTER_NAME}-control-plane:6443 --insecure-skip-tls-verify delete -f $$MANIFEST_ARG";; \
|
||||
*) \
|
||||
echo "❌ Неизвестная команда: $$MANIFEST_CMD"; \
|
||||
echo "💡 Доступные команды: apply, delete"; \
|
||||
exit 1;; \
|
||||
esac;; \
|
||||
helm) \
|
||||
echo "📦 Работа с Helm..."; \
|
||||
HELM_CMD="$(word 3, $(MAKECMDGOALS))"; \
|
||||
PRESET_ARG="$(word 4, $(MAKECMDGOALS))"; \
|
||||
RELEASE_ARG="$(word 5, $(MAKECMDGOALS))"; \
|
||||
CHART_ARG="$(word 6, $(MAKECMDGOALS))"; \
|
||||
if [ -z "$$HELM_CMD" ] || [ -z "$$PRESET_ARG" ]; then \
|
||||
echo "❌ Ошибка: Укажите команду и пресет"; \
|
||||
echo "💡 Пример: make k8s helm list kubernetes"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
CONTAINER_NAME=k8s-controller; \
|
||||
if ! docker ps | grep -q $$CONTAINER_NAME; then \
|
||||
echo "❌ Контейнер $$CONTAINER_NAME не запущен"; \
|
||||
echo "💡 Запустите: make k8s create $$PRESET_ARG"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
CLUSTER_NAME=$$(docker exec $$CONTAINER_NAME kind get clusters | head -1); \
|
||||
case "$$HELM_CMD" in \
|
||||
apply) \
|
||||
if [ -z "$$RELEASE_ARG" ] || [ -z "$$CHART_ARG" ]; then \
|
||||
echo "❌ Ошибка: Укажите имя релиза и чарт"; \
|
||||
echo "💡 Пример: make k8s helm apply kubernetes my-release stable/nginx-ingress"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
echo "📦 Установка Helm чарта: $$CHART_ARG как $$RELEASE_ARG"; \
|
||||
docker exec $$CONTAINER_NAME bash -c "CLUSTER_NAME=$$CLUSTER_NAME; helm upgrade --install $$RELEASE_ARG $$CHART_ARG --kube-apiserver=https://\$${CLUSTER_NAME}-control-plane:6443 --kube-token=dummy --kube-context=dummy 2>&1 | grep -v '^WARNING' || true";; \
|
||||
delete) \
|
||||
if [ -z "$$RELEASE_ARG" ]; then \
|
||||
echo "❌ Ошибка: Укажите имя релиза"; \
|
||||
echo "💡 Пример: make k8s helm delete kubernetes my-release"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
echo "🗑️ Удаление Helm релиза: $$RELEASE_ARG"; \
|
||||
docker exec $$CONTAINER_NAME bash -c "CLUSTER_NAME=$$CLUSTER_NAME; helm uninstall $$RELEASE_ARG --kube-apiserver=https://\$${CLUSTER_NAME}-control-plane:6443 --kube-token=dummy --kube-context=dummy 2>&1 | grep -v '^WARNING' || true";; \
|
||||
update) \
|
||||
if [ -z "$$RELEASE_ARG" ] || [ -z "$$CHART_ARG" ]; then \
|
||||
echo "❌ Ошибка: Укажите имя релиза и чарт"; \
|
||||
echo "💡 Пример: make k8s helm update kubernetes my-release stable/nginx-ingress"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
echo "🔄 Обновление Helm релиза: $$RELEASE_ARG"; \
|
||||
docker exec $$CONTAINER_NAME bash -c "CLUSTER_NAME=$$CLUSTER_NAME; helm upgrade $$RELEASE_ARG $$CHART_ARG --kube-apiserver=https://\$${CLUSTER_NAME}-control-plane:6443 --kube-token=dummy --kube-context=dummy 2>&1 | grep -v '^WARNING' || true";; \
|
||||
rollback) \
|
||||
if [ -z "$$RELEASE_ARG" ]; then \
|
||||
echo "❌ Ошибка: Укажите имя релиза"; \
|
||||
echo "💡 Пример: make k8s helm rollback kubernetes my-release"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
echo "⏪ Откат Helm релиза: $$RELEASE_ARG"; \
|
||||
docker exec $$CONTAINER_NAME bash -c "CLUSTER_NAME=$$CLUSTER_NAME; helm rollback $$RELEASE_ARG --kube-apiserver=https://\$${CLUSTER_NAME}-control-plane:6443 --kube-token=dummy --kube-context=dummy 2>&1 | grep -v '^WARNING' || true";; \
|
||||
list) \
|
||||
echo "📋 Список Helm релизов:"; \
|
||||
docker exec $$CONTAINER_NAME bash -c "CLUSTER_NAME=$$CLUSTER_NAME; helm list --kube-apiserver=https://\$${CLUSTER_NAME}-control-plane:6443 --kube-token=dummy --kube-context=dummy --all-namespaces 2>&1 | grep -v '^WARNING' || true";; \
|
||||
status) \
|
||||
if [ -z "$$RELEASE_ARG" ]; then \
|
||||
echo "❌ Ошибка: Укажите имя релиза"; \
|
||||
echo "💡 Пример: make k8s helm status kubernetes my-release"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
echo "📊 Статус Helm релиза: $$RELEASE_ARG"; \
|
||||
docker exec $$CONTAINER_NAME bash -c "CLUSTER_NAME=$$CLUSTER_NAME; helm status $$RELEASE_ARG --kube-apiserver=https://\$${CLUSTER_NAME}-control-plane:6443 --kube-token=dummy --kube-context=dummy 2>&1 | grep -v '^WARNING' || true";; \
|
||||
*) \
|
||||
echo "❌ Неизвестная команда: $$HELM_CMD"; \
|
||||
echo "💡 Доступные команды: apply, delete, update, rollback, list, status"; \
|
||||
exit 1;; \
|
||||
esac;; \
|
||||
helmrepo) \
|
||||
echo "🏪 Работа с Helm репозиториями..."; \
|
||||
REPO_CMD="$(word 3, $(MAKECMDGOALS))"; \
|
||||
PRESET_ARG="$(word 4, $(MAKECMDGOALS))"; \
|
||||
NAME_ARG="$(word 5, $(MAKECMDGOALS))"; \
|
||||
URL_ARG="$(word 6, $(MAKECMDGOALS))"; \
|
||||
if [ -z "$$REPO_CMD" ] || [ -z "$$PRESET_ARG" ]; then \
|
||||
echo "❌ Ошибка: Укажите команду и пресет"; \
|
||||
echo "💡 Пример: make k8s helmrepo list kubernetes"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
CONTAINER_NAME=k8s-controller; \
|
||||
if ! docker ps | grep -q $$CONTAINER_NAME; then \
|
||||
echo "❌ Контейнер $$CONTAINER_NAME не запущен"; \
|
||||
echo "💡 Запустите: make k8s create $$PRESET_ARG"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
case "$$REPO_CMD" in \
|
||||
add) \
|
||||
if [ -z "$$NAME_ARG" ] || [ -z "$$URL_ARG" ]; then \
|
||||
echo "❌ Ошибка: Укажите имя и URL репозитория"; \
|
||||
echo "💡 Пример: make k8s helmrepo add kubernetes stable https://charts.helm.sh/stable"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
echo "➕ Добавление Helm репозитория: $$NAME_ARG"; \
|
||||
docker exec $$CONTAINER_NAME bash -c "helm repo add $$NAME_ARG $$URL_ARG 2>&1 | grep -v '^WARNING' || true; helm repo update";; \
|
||||
list) \
|
||||
echo "📋 Список Helm репозиториев:"; \
|
||||
docker exec $$CONTAINER_NAME bash -c "helm repo list 2>&1 | grep -v '^WARNING' || true";; \
|
||||
delete) \
|
||||
if [ -z "$$NAME_ARG" ]; then \
|
||||
echo "❌ Ошибка: Укажите имя репозитория"; \
|
||||
echo "💡 Пример: make k8s helmrepo delete kubernetes stable"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
echo "🗑️ Удаление Helm репозитория: $$NAME_ARG"; \
|
||||
docker exec $$CONTAINER_NAME bash -c "helm repo remove $$NAME_ARG 2>&1 | grep -v '^WARNING' || true";; \
|
||||
update) \
|
||||
echo "🔄 Обновление Helm репозиториев"; \
|
||||
docker exec $$CONTAINER_NAME bash -c "helm repo update 2>&1 | grep -v '^WARNING' || true";; \
|
||||
packages) \
|
||||
if [ -z "$$NAME_ARG" ]; then \
|
||||
echo "❌ Ошибка: Укажите имя репозитория"; \
|
||||
echo "💡 Пример: make k8s helmrepo packages kubernetes stable"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
echo "📦 Пакеты в репозитории: $$NAME_ARG"; \
|
||||
docker exec $$CONTAINER_NAME bash -c "helm search repo $$NAME_ARG 2>&1 | grep -v '^WARNING' || true";; \
|
||||
*) \
|
||||
echo "❌ Неизвестная команда: $$REPO_CMD"; \
|
||||
echo "💡 Доступные команды: add, list, delete, update, packages"; \
|
||||
exit 1;; \
|
||||
esac;; \
|
||||
portforward) \
|
||||
PORTFWD_CMD="$(word 3, $(MAKECMDGOALS))"; \
|
||||
PORT_ARG="$(word 4, $(MAKECMDGOALS))"; \
|
||||
if [ -z "$$PORTFWD_CMD" ]; then \
|
||||
echo "❌ Ошибка: Укажите команду"; \
|
||||
echo "💡 Пример: make k8s portforward create"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
case "$$PORTFWD_CMD" in \
|
||||
create) \
|
||||
echo "🔌 Создание port-forward..."; \
|
||||
python3 scripts/portforward.py create;; \
|
||||
list) \
|
||||
echo "📋 Список активных port-forward..."; \
|
||||
python3 scripts/portforward.py list;; \
|
||||
clear) \
|
||||
echo "🗑️ Очистка всех port-forward..."; \
|
||||
python3 scripts/portforward.py clear;; \
|
||||
recreate) \
|
||||
echo "🔄 Пересоздание port-forward..."; \
|
||||
python3 scripts/portforward.py recreate;; \
|
||||
delete) \
|
||||
if [ -z "$$PORT_ARG" ]; then \
|
||||
echo "❌ Ошибка: Укажите порт"; \
|
||||
echo "💡 Пример: make k8s portforward delete 3000"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
echo "🗑️ Удаление port-forward на порту $$PORT_ARG..."; \
|
||||
python3 scripts/portforward.py delete $$PORT_ARG;; \
|
||||
*) \
|
||||
echo "❌ Неизвестная команда: $$PORTFWD_CMD"; \
|
||||
echo "💡 Доступные команды: create, list, clear, recreate, delete"; \
|
||||
exit 1;; \
|
||||
esac;; \
|
||||
*) \
|
||||
echo "☸️ Доступные команды:"; \
|
||||
echo ""; \
|
||||
echo " make k8s create [preset] - создать Kind кластер"; \
|
||||
echo " 💡 Без параметра: используется k8s-minimal (без аддонов)"; \
|
||||
echo " 💡 С параметром: используется указанный пресет"; \
|
||||
echo " 💡 Кластер НЕ удаляется автоматически"; \
|
||||
echo ""; \
|
||||
echo " make k8s destroy [preset] - удалить Kind кластер полностью"; \
|
||||
echo " 💡 Удалит: кластер и контейнер ansible-controller"; \
|
||||
echo ""; \
|
||||
echo " make k8s stop [cluster] - остановить Kind кластер (без удаления)"; \
|
||||
echo " 💡 Можно указать имя кластера или остановить все"; \
|
||||
echo " 💡 Для перезапуска: make k8s start"; \
|
||||
echo ""; \
|
||||
echo " make k8s start [cluster] - запустить остановленный кластер"; \
|
||||
echo " 💡 Можно указать имя кластера или запустить все"; \
|
||||
echo ""; \
|
||||
echo " make k8s status [preset] - детальный отчет о состоянии кластера"; \
|
||||
echo " 💡 Показывает: узлы, pods, сервисы, Ingress, события, Helm релизы и т.д."; \
|
||||
echo " 💡 Требует: пресет"; \
|
||||
echo " 💡 Пример: make k8s status kubernetes"; \
|
||||
echo ""; \
|
||||
echo " make k8s config [cluster] - получить kubeconfig для подключения"; \
|
||||
echo " 💡 Сохраняет: kubeconfig в корне проекта"; \
|
||||
echo " 💡 Можно указать имя конкретного кластера"; \
|
||||
echo ""; \
|
||||
echo " make k8s nodes [preset] - показать узлы кластера"; \
|
||||
echo " 💡 Требует: пресет"; \
|
||||
echo " 💡 Пример: make k8s nodes kubernetes"; \
|
||||
echo ""; \
|
||||
echo " make k8s shell [preset] - открыть shell в контейнере"; \
|
||||
echo " 💡 Для: ручного управления kubectl/kind"; \
|
||||
echo " 💡 Пример: make k8s shell kubernetes"; \
|
||||
echo ""; \
|
||||
echo " make k8s manifest [cmd] [preset] [url] - работа с манифестами"; \
|
||||
echo " 💡 Команды: apply, delete"; \
|
||||
echo " 💡 Пример: make k8s manifest apply kubernetes https://example.com/deploy.yaml"; \
|
||||
echo ""; \
|
||||
echo " make k8s helm [cmd] [preset] [release] [chart] - работа с Helm"; \
|
||||
echo " 💡 Команды: apply, delete, update, rollback, list, status"; \
|
||||
echo " 💡 Пример: make k8s helm apply kubernetes nginx stable/nginx-ingress"; \
|
||||
echo ""; \
|
||||
echo " make k8s helmrepo [cmd] [preset] [name] [url] - работа с Helm репозиториями"; \
|
||||
echo " 💡 Команды: add, list, delete, update, packages"; \
|
||||
echo " 💡 Пример: make k8s helmrepo add kubernetes stable https://charts.helm.sh/stable"; \
|
||||
echo ""; \
|
||||
echo " make k8s portforward [cmd] - управление port-forward"; \
|
||||
echo " 💡 Команды: create, list, clear, recreate, delete [port]"; \
|
||||
echo " 💡 Пример: make k8s portforward create"; \
|
||||
echo ""; \
|
||||
echo "💡 Примеры:"; \
|
||||
echo " make k8s create # создать минимальный кластер"; \
|
||||
echo " make k8s create kubernetes # создать кластер с аддонами"; \
|
||||
echo " make k8s nodes kubernetes # показать узлы кластера"; \
|
||||
echo " make k8s config kubernetes # получить kubeconfig для кластера"; \
|
||||
echo " export KUBECONFIG=kubeconfig # использовать конфиг"; \
|
||||
echo " kubectl get nodes # проверить узлы"; \
|
||||
echo " make k8s manifest apply kubernetes https://example.com/manifest.yaml # установить манифест"; \
|
||||
echo " make k8s stop kubernetes # остановить кластер"; \
|
||||
echo " make k8s start kubernetes # запустить кластер"; \
|
||||
echo " make k8s destroy kubernetes # удалить кластер с пресетом kubernetes";; \
|
||||
esac
|
||||
|
||||
# =============================================================================
|
||||
# СПРАВКА
|
||||
# =============================================================================
|
||||
help:
|
||||
@echo "=========================================="
|
||||
@echo "AnsibleLab - Универсальная система"
|
||||
@echo "DevOpsLab - Универсальная система"
|
||||
@echo "тестирования Ansible ролей"
|
||||
@echo "=========================================="
|
||||
@echo ""
|
||||
@@ -1063,7 +1484,7 @@ help:
|
||||
@echo " make presets info - подробная информация о preset'е"
|
||||
@echo " make presets test - запустить тест с preset'ом"
|
||||
@echo ""
|
||||
@echo "🖼️ СОБСТВЕННЫЕ ОБРАЗЫ (AnsibleLab):"
|
||||
@echo "🖼️ СОБСТВЕННЫЕ ОБРАЗЫ (DevOpsLab):"
|
||||
@echo " make custom-images test [minimal|full|performance] - тест с собственными образами"
|
||||
@echo " make custom-images check - проверить наличие собственных образов"
|
||||
@echo " make custom-images build - собрать все образы для тестирования"
|
||||
@@ -1115,6 +1536,20 @@ help:
|
||||
@echo " make controller run - запустить ansible-controller"
|
||||
@echo " make controller stop - остановить ansible-controller"
|
||||
@echo ""
|
||||
@echo "☸️ KUBERNETES (Kind кластеры):"
|
||||
@echo " make k8s create [preset] - создать Kind кластер (по умолчанию: k8s-minimal)"
|
||||
@echo " make k8s destroy [preset] - удалить Kind кластер"
|
||||
@echo " make k8s start [preset] - запустить Kind кластер"
|
||||
@echo " make k8s stop [preset] - остановить Kind кластер"
|
||||
@echo " make k8s status [preset] - детальный отчет о состоянии кластера"
|
||||
@echo " make k8s nodes [preset] - показать узлы кластера"
|
||||
@echo " make k8s config [preset] - получить kubeconfig для подключения"
|
||||
@echo " make k8s manifest [cmd] [preset] [url] - работа с манифестами (apply, delete)"
|
||||
@echo " make k8s helm [cmd] [preset] [release] [chart] - работа с Helm"
|
||||
@echo " make k8s helmrepo [cmd] [preset] [name] [url] - управление Helm репозиториями"
|
||||
@echo " make k8s portforward [cmd] - управление port-forward (create, list, clear)"
|
||||
@echo " make k8s shell [preset] - открыть shell в контейнере k8s"
|
||||
@echo ""
|
||||
@echo "💡 ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ:"
|
||||
@echo " make presets list # показать все preset'ы"
|
||||
@echo " make presets test PRESET=etcd-patroni # тест с etcd-patroni"
|
||||
@@ -1140,7 +1575,7 @@ help:
|
||||
custom-images:
|
||||
@case "$(word 2, $(MAKECMDGOALS))" in \
|
||||
test) \
|
||||
echo "🧪 Тестирование с собственными образами AnsibleLab..."; \
|
||||
echo "🧪 Тестирование с собственными образами DevOpsLab..."; \
|
||||
if [ -z "$(word 3, $(MAKECMDGOALS))" ]; then \
|
||||
echo "💡 Использование: make custom-images test [minimal|full|performance]"; \
|
||||
echo "💡 По умолчанию: minimal"; \
|
||||
@@ -1168,7 +1603,7 @@ custom-images:
|
||||
echo ""; \
|
||||
echo " 🔨 make custom-images build - собрать все образы для тестирования"; \
|
||||
echo " 💡 Выполняет: make docker build"; \
|
||||
echo " 💡 Собирает: все образы AnsibleLab"; \
|
||||
echo " 💡 Собирает: все образы DevOpsLab"; \
|
||||
echo ""; \
|
||||
echo "💡 Пресеты для тестирования:"; \
|
||||
echo " - custom-minimal.yml - минимальный тест (4 хоста)"; \
|
||||
|
||||
Reference in New Issue
Block a user