refactor: удален скрипт manage_hosts.py и все упоминания
- Удален скрипт scripts/manage_hosts.py - Удалены все вызовы из Makefile - Удалены упоминания из документации - Обновлена документация по Ingress - теперь требуется ручное добавление в /etc/hosts - Убрано автоматическое управление /etc/hosts (не состоятельное решение)
This commit is contained in:
24
Makefile
24
Makefile
@@ -1053,8 +1053,6 @@ k8s:
|
|||||||
echo "✅ Kind кластер создан"; \
|
echo "✅ Kind кластер создан"; \
|
||||||
echo "🔌 Автоматическое создание port-forward..."; \
|
echo "🔌 Автоматическое создание port-forward..."; \
|
||||||
python3 scripts/portforward.py create || echo "⚠️ Не удалось создать port-forward автоматически"; \
|
python3 scripts/portforward.py create || echo "⚠️ Не удалось создать port-forward автоматически"; \
|
||||||
echo "📝 Добавление Ingress хостов в /etc/hosts..."; \
|
|
||||||
sudo scripts/manage_hosts.py add 2>/dev/null || echo "⚠️ Не удалось добавить Ingress хосты (требуется sudo)"; \
|
|
||||||
echo "💡 Для подключения используйте: make k8s kubeconfig"; \
|
echo "💡 Для подключения используйте: make k8s kubeconfig"; \
|
||||||
echo "💡 Для остановки используйте: make k8s stop";; \
|
echo "💡 Для остановки используйте: make k8s stop";; \
|
||||||
destroy) \
|
destroy) \
|
||||||
@@ -1064,8 +1062,6 @@ k8s:
|
|||||||
CONTAINER_NAME=k8s-controller; \
|
CONTAINER_NAME=k8s-controller; \
|
||||||
echo "🔌 Очистка port-forward..."; \
|
echo "🔌 Очистка port-forward..."; \
|
||||||
python3 scripts/portforward.py clear || echo "⚠️ Не удалось очистить port-forward"; \
|
python3 scripts/portforward.py clear || echo "⚠️ Не удалось очистить port-forward"; \
|
||||||
echo "📝 Удаление Ingress хостов из /etc/hosts..."; \
|
|
||||||
sudo scripts/manage_hosts.py remove 2>/dev/null || echo "⚠️ Не удалось удалить Ingress хосты (требуется sudo)"; \
|
|
||||||
if docker ps | grep -q $$CONTAINER_NAME; then \
|
if docker ps | grep -q $$CONTAINER_NAME; then \
|
||||||
echo "🗑️ Удаление Kind кластеров..."; \
|
echo "🗑️ Удаление Kind кластеров..."; \
|
||||||
docker exec $$CONTAINER_NAME bash -c "kind delete clusters --all" 2>/dev/null || true; \
|
docker exec $$CONTAINER_NAME bash -c "kind delete clusters --all" 2>/dev/null || true; \
|
||||||
@@ -1211,14 +1207,10 @@ k8s:
|
|||||||
case "$$MANIFEST_CMD" in \
|
case "$$MANIFEST_CMD" in \
|
||||||
apply) \
|
apply) \
|
||||||
echo "📥 Применение манифеста: $$MANIFEST_ARG"; \
|
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"; \
|
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";; \
|
||||||
echo "📝 Обновление Ingress хостов..."; \
|
|
||||||
sudo scripts/manage_hosts.py add 2>/dev/null || echo "⚠️ Не удалось обновить Ingress хосты (требуется sudo)";; \
|
|
||||||
delete) \
|
delete) \
|
||||||
echo "🗑️ Удаление ресурсов из манифеста: $$MANIFEST_ARG"; \
|
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"; \
|
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 "📝 Обновление Ingress хостов..."; \
|
|
||||||
sudo scripts/manage_hosts.py add 2>/dev/null || echo "⚠️ Не удалось обновить Ingress хосты (требуется sudo)";; \
|
|
||||||
*) \
|
*) \
|
||||||
echo "❌ Неизвестная команда: $$MANIFEST_CMD"; \
|
echo "❌ Неизвестная команда: $$MANIFEST_CMD"; \
|
||||||
echo "💡 Доступные команды: apply, delete"; \
|
echo "💡 Доступные команды: apply, delete"; \
|
||||||
@@ -1250,9 +1242,7 @@ k8s:
|
|||||||
exit 1; \
|
exit 1; \
|
||||||
fi; \
|
fi; \
|
||||||
echo "📦 Установка Helm чарта: $$CHART_ARG как $$RELEASE_ARG"; \
|
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"; \
|
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";; \
|
||||||
echo "📝 Обновление Ingress хостов..."; \
|
|
||||||
sudo scripts/manage_hosts.py add 2>/dev/null || echo "⚠️ Не удалось обновить Ingress хосты (требуется sudo)";; \
|
|
||||||
delete) \
|
delete) \
|
||||||
if [ -z "$$RELEASE_ARG" ]; then \
|
if [ -z "$$RELEASE_ARG" ]; then \
|
||||||
echo "❌ Ошибка: Укажите имя релиза"; \
|
echo "❌ Ошибка: Укажите имя релиза"; \
|
||||||
@@ -1260,9 +1250,7 @@ k8s:
|
|||||||
exit 1; \
|
exit 1; \
|
||||||
fi; \
|
fi; \
|
||||||
echo "🗑️ Удаление Helm релиза: $$RELEASE_ARG"; \
|
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"; \
|
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";; \
|
||||||
echo "📝 Обновление Ingress хостов..."; \
|
|
||||||
sudo scripts/manage_hosts.py add 2>/dev/null || echo "⚠️ Не удалось обновить Ingress хосты (требуется sudo)";; \
|
|
||||||
update) \
|
update) \
|
||||||
if [ -z "$$RELEASE_ARG" ] || [ -z "$$CHART_ARG" ]; then \
|
if [ -z "$$RELEASE_ARG" ] || [ -z "$$CHART_ARG" ]; then \
|
||||||
echo "❌ Ошибка: Укажите имя релиза и чарт"; \
|
echo "❌ Ошибка: Укажите имя релиза и чарт"; \
|
||||||
@@ -1270,9 +1258,7 @@ k8s:
|
|||||||
exit 1; \
|
exit 1; \
|
||||||
fi; \
|
fi; \
|
||||||
echo "🔄 Обновление Helm релиза: $$RELEASE_ARG"; \
|
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"; \
|
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";; \
|
||||||
echo "📝 Обновление Ingress хостов..."; \
|
|
||||||
sudo scripts/manage_hosts.py add 2>/dev/null || echo "⚠️ Не удалось обновить Ingress хосты (требуется sudo)";; \
|
|
||||||
rollback) \
|
rollback) \
|
||||||
if [ -z "$$RELEASE_ARG" ]; then \
|
if [ -z "$$RELEASE_ARG" ]; then \
|
||||||
echo "❌ Ошибка: Укажите имя релиза"; \
|
echo "❌ Ошибка: Укажите имя релиза"; \
|
||||||
|
|||||||
@@ -114,50 +114,7 @@ python3 scripts/portforward.py clear
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### 4. `manage_hosts.py`
|
### 4. `k8s_status.py`
|
||||||
|
|
||||||
**Назначение:** Автоматическое управление записями в `/etc/hosts` для Ingress ресурсов.
|
|
||||||
|
|
||||||
**Принцип работы:**
|
|
||||||
|
|
||||||
1. **Получение списка Ingress:**
|
|
||||||
- Получает kubeconfig из контейнера `k8s-controller`
|
|
||||||
- Выполняет `kubectl get ingress --all-namespaces`
|
|
||||||
- Извлекает все хосты из Ingress правил
|
|
||||||
|
|
||||||
2. **Работа с /etc/hosts:**
|
|
||||||
- Использует метку `#k8s` для различения автоматических и ручных записей
|
|
||||||
- Добавляет записи в формате: `127.0.0.1 <hostname> #k8s`
|
|
||||||
- Удаляет только записи с меткой `#k8s`
|
|
||||||
|
|
||||||
3. **Автоматизация:**
|
|
||||||
- Вызывается автоматически после:
|
|
||||||
- `make k8s create` (добавление)
|
|
||||||
- `make k8s destroy` (удаление)
|
|
||||||
- `make k8s manifest apply/delete` (обновление)
|
|
||||||
- `make k8s helm apply/delete/update` (обновление)
|
|
||||||
|
|
||||||
**Команды:**
|
|
||||||
- `add` - добавляет все Ingress хосты в /etc/hosts
|
|
||||||
- `remove` - удаляет все записи с меткой #k8s
|
|
||||||
- `cleanup` - удаляет записи если кластер недоступен
|
|
||||||
- `list` - показывает текущие k8s записи
|
|
||||||
|
|
||||||
**Пример использования:**
|
|
||||||
```bash
|
|
||||||
sudo python3 scripts/manage_hosts.py add
|
|
||||||
sudo python3 scripts/manage_hosts.py list
|
|
||||||
sudo python3 scripts/manage_hosts.py remove
|
|
||||||
```
|
|
||||||
|
|
||||||
**Безопасность:**
|
|
||||||
- Работает только с записями, помеченными `#k8s`
|
|
||||||
- Не трогает ручные записи пользователя
|
|
||||||
- Требует sudo для редактирования `/etc/hosts`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 5. `k8s_status.py`
|
|
||||||
|
|
||||||
**Назначение:** Детальный отчет о состоянии Kubernetes кластера.
|
**Назначение:** Детальный отчет о состоянии Kubernetes кластера.
|
||||||
|
|
||||||
|
|||||||
@@ -291,9 +291,24 @@ make k8s manifest apply kubernetes ./nginx-deployment.yaml
|
|||||||
|
|
||||||
## Управление Ingress
|
## Управление Ingress
|
||||||
|
|
||||||
### Автоматическое управление /etc/hosts
|
### Доступ к приложениям через Ingress
|
||||||
|
|
||||||
При создании Ingress ресурсов, их хосты автоматически добавляются в `/etc/hosts` с меткой `#k8s`:
|
Для доступа к приложениям по доменным именам нужно вручную добавить записи в `/etc/hosts`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Добавить запись в /etc/hosts
|
||||||
|
echo "127.0.0.1 grafana.local #k8s" | sudo tee -a /etc/hosts
|
||||||
|
|
||||||
|
# Очистить DNS кеш macOS
|
||||||
|
sudo killall -HUP mDNSResponder
|
||||||
|
```
|
||||||
|
|
||||||
|
После этого приложение будет доступно по адресу:
|
||||||
|
```
|
||||||
|
http://grafana.local:8081
|
||||||
|
```
|
||||||
|
|
||||||
|
**Пример манифеста Ingress:**
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
apiVersion: networking.k8s.io/v1
|
apiVersion: networking.k8s.io/v1
|
||||||
@@ -315,23 +330,10 @@ spec:
|
|||||||
number: 80
|
number: 80
|
||||||
```
|
```
|
||||||
|
|
||||||
После применения этого манифеста в `/etc/hosts` автоматически добавится:
|
**Важно:**
|
||||||
```
|
- Записи в `/etc/hosts` нужно добавлять вручную
|
||||||
127.0.0.1 grafana.local #k8s
|
- Используйте порт 8081 для HTTP и 8443 для HTTPS
|
||||||
```
|
- Для удаления записей используйте sudo
|
||||||
|
|
||||||
### Доступ к приложению
|
|
||||||
|
|
||||||
После установки Ingress и портов, приложение доступно по адресу:
|
|
||||||
```
|
|
||||||
http://grafana.local
|
|
||||||
```
|
|
||||||
|
|
||||||
### Удаление записей
|
|
||||||
|
|
||||||
Записи автоматически удаляются при:
|
|
||||||
- Удалении кластера (`make k8s destroy`)
|
|
||||||
- Удалении Ingress манифеста (`make k8s manifest delete`)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -729,15 +731,18 @@ make k8s create kubernetes
|
|||||||
|
|
||||||
**Решение:**
|
**Решение:**
|
||||||
```bash
|
```bash
|
||||||
# Проверьте /etc/hosts
|
|
||||||
cat /etc/hosts | grep k8s
|
|
||||||
|
|
||||||
# Добавьте вручную
|
|
||||||
sudo scripts/manage_hosts.py add
|
|
||||||
|
|
||||||
# Проверьте Ingress
|
# Проверьте Ingress
|
||||||
make k8s shell kubernetes
|
make k8s shell kubernetes
|
||||||
kubectl get ingress --all-namespaces
|
kubectl get ingress --all-namespaces
|
||||||
|
|
||||||
|
# Добавьте запись в /etc/hosts вручную
|
||||||
|
echo "127.0.0.1 grafana.local #k8s" | sudo tee -a /etc/hosts
|
||||||
|
|
||||||
|
# Очистите DNS кеш
|
||||||
|
sudo killall -HUP mDNSResponder
|
||||||
|
|
||||||
|
# Проверьте доступность
|
||||||
|
curl http://grafana.local:8081
|
||||||
```
|
```
|
||||||
|
|
||||||
### Helm чарты не устанавливаются
|
### Helm чарты не устанавливаются
|
||||||
|
|||||||
@@ -1,190 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
Скрипт для управления записями в /etc/hosts для Ingress ресурсов
|
|
||||||
Автор: Сергей Антропов
|
|
||||||
Сайт: https://devops.org.ru
|
|
||||||
"""
|
|
||||||
import sys
|
|
||||||
import subprocess
|
|
||||||
import re
|
|
||||||
import os
|
|
||||||
|
|
||||||
HOSTS_FILE = "/etc/hosts"
|
|
||||||
K8S_MARKER = "#k8s"
|
|
||||||
|
|
||||||
def is_root():
|
|
||||||
"""Проверяет, запущен ли скрипт от root"""
|
|
||||||
return os.geteuid() == 0
|
|
||||||
|
|
||||||
def get_ingress_hosts():
|
|
||||||
"""Получает список Ingress хостов из кластера"""
|
|
||||||
# Получаем kubeconfig из контейнера k8s-controller
|
|
||||||
result = subprocess.run(
|
|
||||||
"docker exec k8s-controller kind get kubeconfig",
|
|
||||||
shell=True, capture_output=True, text=True
|
|
||||||
)
|
|
||||||
|
|
||||||
if result.returncode != 0:
|
|
||||||
print("⚠️ Кластер недоступен")
|
|
||||||
return []
|
|
||||||
|
|
||||||
# Сохраняем kubeconfig во временный файл
|
|
||||||
import tempfile
|
|
||||||
with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.yaml') as f:
|
|
||||||
f.write(result.stdout)
|
|
||||||
kubeconfig_file = f.name
|
|
||||||
|
|
||||||
try:
|
|
||||||
# Получаем все Ingress ресурсы
|
|
||||||
result = subprocess.run(
|
|
||||||
f"kubectl --kubeconfig {kubeconfig_file} get ingress --all-namespaces -o jsonpath='{{range .items}}{{range .spec.rules}}{{.host}}{{\"\\n\"}}{{end}}{{end}}'",
|
|
||||||
shell=True, capture_output=True, text=True
|
|
||||||
)
|
|
||||||
|
|
||||||
hosts = []
|
|
||||||
if result.returncode == 0:
|
|
||||||
hosts = [h.strip() for h in result.stdout.split('\n') if h.strip()]
|
|
||||||
|
|
||||||
return hosts
|
|
||||||
finally:
|
|
||||||
# Удаляем временный файл
|
|
||||||
os.unlink(kubeconfig_file)
|
|
||||||
|
|
||||||
def get_current_k8s_entries():
|
|
||||||
"""Получает текущие k8s записи из /etc/hosts"""
|
|
||||||
if not os.path.exists(HOSTS_FILE):
|
|
||||||
return []
|
|
||||||
|
|
||||||
entries = []
|
|
||||||
with open(HOSTS_FILE, 'r') as f:
|
|
||||||
for line in f:
|
|
||||||
if K8S_MARKER in line:
|
|
||||||
# Извлекаем IP и hostname
|
|
||||||
parts = line.split()
|
|
||||||
if len(parts) >= 2:
|
|
||||||
ip = parts[0]
|
|
||||||
hostname = parts[1]
|
|
||||||
entries.append((ip, hostname))
|
|
||||||
|
|
||||||
return entries
|
|
||||||
|
|
||||||
def remove_k8s_entries():
|
|
||||||
"""Удаляет все записи с меткой #k8s из /etc/hosts"""
|
|
||||||
if not os.path.exists(HOSTS_FILE):
|
|
||||||
print("⚠️ Файл /etc/hosts не существует")
|
|
||||||
return
|
|
||||||
|
|
||||||
print("🗑️ Удаление k8s записей из /etc/hosts...")
|
|
||||||
|
|
||||||
# Читаем файл
|
|
||||||
with open(HOSTS_FILE, 'r') as f:
|
|
||||||
lines = f.readlines()
|
|
||||||
|
|
||||||
# Фильтруем строки с меткой #k8s
|
|
||||||
new_lines = []
|
|
||||||
removed_count = 0
|
|
||||||
|
|
||||||
for line in lines:
|
|
||||||
if K8S_MARKER in line:
|
|
||||||
removed_count += 1
|
|
||||||
print(f" ❌ Удалено: {line.strip()}")
|
|
||||||
else:
|
|
||||||
new_lines.append(line)
|
|
||||||
|
|
||||||
# Записываем обратно
|
|
||||||
with open(HOSTS_FILE, 'w') as f:
|
|
||||||
f.writelines(new_lines)
|
|
||||||
|
|
||||||
print(f"✅ Удалено {removed_count} записей")
|
|
||||||
|
|
||||||
def add_ingress_entries():
|
|
||||||
"""Добавляет записи Ingress в /etc/hosts"""
|
|
||||||
if not is_root():
|
|
||||||
print("❌ Ошибка: скрипт должен быть запущен от root")
|
|
||||||
print("💡 Используйте: sudo python3 scripts/manage_hosts.py add")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
# Проверяем доступность кластера
|
|
||||||
result = subprocess.run("docker ps | grep k8s-controller", shell=True, capture_output=True, text=True)
|
|
||||||
if result.returncode != 0:
|
|
||||||
print("❌ Контейнер k8s-controller не запущен")
|
|
||||||
return
|
|
||||||
|
|
||||||
print("🔍 Поиск Ingress ресурсов в кластере...")
|
|
||||||
hosts = get_ingress_hosts()
|
|
||||||
|
|
||||||
if not hosts:
|
|
||||||
print("ℹ️ Не найдено Ingress ресурсов в кластере")
|
|
||||||
return
|
|
||||||
|
|
||||||
print(f"📋 Найдено {len(hosts)} Ingress хостов: {', '.join(hosts)}")
|
|
||||||
|
|
||||||
# Получаем текущие записи
|
|
||||||
current_entries = get_current_k8s_entries()
|
|
||||||
current_hosts = [e[1] for e in current_entries]
|
|
||||||
|
|
||||||
# Удаляем старые записи
|
|
||||||
if current_entries:
|
|
||||||
print("🗑️ Удаление старых k8s записей...")
|
|
||||||
remove_k8s_entries()
|
|
||||||
|
|
||||||
# Добавляем новые записи
|
|
||||||
print("➕ Добавление новых записей в /etc/hosts...")
|
|
||||||
|
|
||||||
with open(HOSTS_FILE, 'a') as f:
|
|
||||||
for host in hosts:
|
|
||||||
entry = f"127.0.0.1 {host} {K8S_MARKER}\n"
|
|
||||||
f.write(entry)
|
|
||||||
print(f" ✅ Добавлено: 127.0.0.1 {host}")
|
|
||||||
|
|
||||||
print(f"✅ Добавлено {len(hosts)} записей в /etc/hosts")
|
|
||||||
|
|
||||||
def cleanup_k8s_entries():
|
|
||||||
"""Очищает k8s записи если кластер недоступен"""
|
|
||||||
print("🔍 Проверка доступности кластера...")
|
|
||||||
|
|
||||||
# Проверяем доступность контейнера
|
|
||||||
result = subprocess.run("docker ps | grep k8s-controller", shell=True, capture_output=True, text=True)
|
|
||||||
if result.returncode == 0:
|
|
||||||
print("✅ Кластер доступен")
|
|
||||||
return
|
|
||||||
|
|
||||||
print("⚠️ Кластер недоступен, очищаем k8s записи...")
|
|
||||||
remove_k8s_entries()
|
|
||||||
|
|
||||||
def list_k8s_entries():
|
|
||||||
"""Выводит список текущих k8s записей"""
|
|
||||||
entries = get_current_k8s_entries()
|
|
||||||
if not entries:
|
|
||||||
print("ℹ️ Нет k8s записей в /etc/hosts")
|
|
||||||
return
|
|
||||||
|
|
||||||
print("📋 Текущие k8s записи в /etc/hosts:")
|
|
||||||
for ip, hostname in entries:
|
|
||||||
print(f" {ip} {hostname}")
|
|
||||||
|
|
||||||
def main():
|
|
||||||
if len(sys.argv) < 2:
|
|
||||||
print("Usage: manage_hosts.py <add|remove|cleanup|list>")
|
|
||||||
print(" add - добавить Ingress хосты в /etc/hosts")
|
|
||||||
print(" remove - удалить все k8s записи из /etc/hosts")
|
|
||||||
print(" cleanup - удалить k8s записи если кластер недоступен")
|
|
||||||
print(" list - показать текущие k8s записи")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
command = sys.argv[1]
|
|
||||||
|
|
||||||
if command == "add":
|
|
||||||
add_ingress_entries()
|
|
||||||
elif command == "remove":
|
|
||||||
remove_k8s_entries()
|
|
||||||
elif command == "cleanup":
|
|
||||||
cleanup_k8s_entries()
|
|
||||||
elif command == "list":
|
|
||||||
list_k8s_entries()
|
|
||||||
else:
|
|
||||||
print(f"❌ Неизвестная команда: {command}")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
||||||
Reference in New Issue
Block a user