feat: добавлена поддержка создания и удаления контейнеров из пресета
Some checks failed
Ansible Testing / lint (push) Has been cancelled
Ansible Testing / test (default) (push) Has been cancelled
Ansible Testing / test (minimal) (push) Has been cancelled
Ansible Testing / test (performance) (push) Has been cancelled
Ansible Testing / deploy-check (push) Has been cancelled
Some checks failed
Ansible Testing / lint (push) Has been cancelled
Ansible Testing / test (default) (push) Has been cancelled
Ansible Testing / test (minimal) (push) Has been cancelled
Ansible Testing / test (performance) (push) Has been cancelled
Ansible Testing / deploy-check (push) Has been cancelled
- Добавлено создание контейнеров из секции hosts в create_k8s_cluster.py - Добавлено удаление контейнеров в команде make k8s destroy - Создан скрипт scripts/delete_hosts.py для удаления контейнеров - Контейнеры автоматически создаются в Docker сети из пресета - Контейнеры удаляются вместе с Kind кластером при make k8s destroy
This commit is contained in:
@@ -31,9 +31,76 @@ def main():
|
||||
with open(preset_file, 'r') as f:
|
||||
preset = yaml.safe_load(f)
|
||||
|
||||
# Создаем Docker сеть если её нет
|
||||
docker_network = preset.get('docker_network', 'labnet')
|
||||
print(f"\n🌐 Проверка Docker сети: {docker_network}")
|
||||
result = subprocess.run(f"docker network ls --format '{{{{.Name}}}}' | grep -x {docker_network}",
|
||||
shell=True, capture_output=True, text=True)
|
||||
if not result.stdout.strip():
|
||||
print(f"📡 Создание Docker сети: {docker_network}")
|
||||
run_cmd(f"docker network create {docker_network}")
|
||||
else:
|
||||
print(f"✅ Сеть {docker_network} уже существует")
|
||||
|
||||
# Получаем конфигурацию для hosts
|
||||
hosts = preset.get('hosts', [])
|
||||
images = preset.get('images', {})
|
||||
systemd_defaults = preset.get('systemd_defaults', {})
|
||||
|
||||
# Создаем контейнеры если определены hosts
|
||||
if hosts:
|
||||
print(f"\n🐳 Создание контейнеров (всего: {len(hosts)})")
|
||||
for host in hosts:
|
||||
host_name = host['name']
|
||||
family = host['family']
|
||||
|
||||
# Проверяем существование контейнера
|
||||
result = subprocess.run(f"docker ps -a --format '{{{{.Names}}}}' | grep -x {host_name}",
|
||||
shell=True, capture_output=True, text=True)
|
||||
if result.stdout.strip():
|
||||
print(f"⚠️ Контейнер '{host_name}' уже существует, удаляем старый")
|
||||
run_cmd(f"docker rm -f {host_name}")
|
||||
|
||||
# Получаем образ
|
||||
image = images.get(family, f"inecs/ansible-lab:{family}-latest")
|
||||
|
||||
# Формируем команду docker run
|
||||
cmd_parts = [
|
||||
"docker run -d",
|
||||
f"--name {host_name}",
|
||||
f"--network {docker_network}",
|
||||
"--restart=unless-stopped"
|
||||
]
|
||||
|
||||
# Добавляем systemd настройки
|
||||
if systemd_defaults.get('privileged'):
|
||||
cmd_parts.append("--privileged")
|
||||
|
||||
for vol in systemd_defaults.get('volumes', []):
|
||||
cmd_parts.append(f"-v {vol}")
|
||||
|
||||
for tmpfs in systemd_defaults.get('tmpfs', []):
|
||||
cmd_parts.append(f"--tmpfs {tmpfs}")
|
||||
|
||||
if systemd_defaults.get('capabilities'):
|
||||
for cap in systemd_defaults['capabilities']:
|
||||
cmd_parts.append(f"--cap-add {cap}")
|
||||
|
||||
cmd_parts.append(image)
|
||||
|
||||
# Добавляем command в конец если задан
|
||||
if systemd_defaults.get('command'):
|
||||
cmd_parts.append(systemd_defaults['command'])
|
||||
|
||||
cmd = " ".join(cmd_parts)
|
||||
print(f"🚀 Создание контейнера: {host_name}")
|
||||
run_cmd(cmd)
|
||||
print(f"✅ Контейнер '{host_name}' создан")
|
||||
|
||||
kind_clusters = preset.get('kind_clusters', [])
|
||||
if not kind_clusters:
|
||||
print("⚠️ В пресете не определены kind кластеры")
|
||||
print("\n⚠️ В пресете не определены kind кластеры")
|
||||
print("✅ Создание контейнеров завершено")
|
||||
sys.exit(0)
|
||||
|
||||
os.makedirs("/ansible/.kind", exist_ok=True)
|
||||
|
||||
44
scripts/delete_hosts.py
Normal file
44
scripts/delete_hosts.py
Normal file
@@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Скрипт для удаления контейнеров из секции hosts пресета
|
||||
Автор: Сергей Антропов
|
||||
Сайт: https://devops.org.ru
|
||||
"""
|
||||
import sys
|
||||
import yaml
|
||||
import subprocess
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 2:
|
||||
print("Usage: delete_hosts.py <preset_file>")
|
||||
sys.exit(1)
|
||||
|
||||
preset_file = sys.argv[1]
|
||||
|
||||
print(f"📋 Читаю пресет: {preset_file}")
|
||||
with open(preset_file, 'r') as f:
|
||||
preset = yaml.safe_load(f)
|
||||
|
||||
hosts = preset.get('hosts', [])
|
||||
if not hosts:
|
||||
print("⚠️ В пресете нет контейнеров для удаления")
|
||||
sys.exit(0)
|
||||
|
||||
print(f"🗑️ Удаление контейнеров (всего: {len(hosts)})")
|
||||
for host in hosts:
|
||||
host_name = host['name']
|
||||
|
||||
# Проверяем существование контейнера
|
||||
result = subprocess.run(f"docker ps -a --format '{{{{.Names}}}}' | grep -x {host_name}",
|
||||
shell=True, capture_output=True, text=True)
|
||||
if result.stdout.strip():
|
||||
print(f"🗑️ Удаление контейнера: {host_name}")
|
||||
subprocess.run(f"docker rm -f {host_name}", shell=True, capture_output=True, text=True)
|
||||
print(f"✅ Контейнер '{host_name}' удален")
|
||||
else:
|
||||
print(f"⚠️ Контейнер '{host_name}' не найден")
|
||||
|
||||
print("✅ Удаление завершено")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user