Исправление синтаксической ошибки в molecule_executor.py и обновление k8s preset'ов
- Исправлена незакрытая скобка в _build_test_command (строка 745) - Добавлена поддержка k8s preset'ов: выполнение create_k8s_cluster.py перед create.yml - Обновлены образы в k8s preset'ах: заменен недоступный ghcr.io/ansible-community/molecule-ubuntu-systemd:jammy на inecs/ansible-lab:ubuntu22-latest - Обновлены preset'ы в базе данных через SQL - Обновлены файлы: k8s-single.yml, k8s-multi.yml, k8s-istio-full.yml
This commit is contained in:
@@ -39,59 +39,70 @@ def upgrade():
|
||||
presets_dir = old_presets_dir
|
||||
k8s_presets_dir = presets_dir / "k8s"
|
||||
|
||||
# Основные preset'ы
|
||||
# Функция для импорта preset'а
|
||||
def import_preset(preset_file, category='main'):
|
||||
try:
|
||||
with open(preset_file) as f:
|
||||
content = f.read()
|
||||
preset_data = yaml.safe_load(content) or {}
|
||||
|
||||
# Извлечение описания из комментария
|
||||
description = None
|
||||
for line in content.split('\n'):
|
||||
if line.strip().startswith('#description:'):
|
||||
description = line.split('#description:')[1].strip()
|
||||
break
|
||||
|
||||
# Проверка существования в БД
|
||||
result = connection.execute(
|
||||
sa.text("SELECT id FROM presets WHERE name = :name"),
|
||||
{"name": preset_file.stem}
|
||||
)
|
||||
if result.fetchone():
|
||||
return False
|
||||
|
||||
# Преобразуем dict/list в JSON строки для PostgreSQL
|
||||
hosts_json = json.dumps(preset_data.get('hosts', []))
|
||||
images_json = json.dumps(preset_data.get('images', {}))
|
||||
systemd_defaults_json = json.dumps(preset_data.get('systemd_defaults', {}))
|
||||
kind_clusters_json = json.dumps(preset_data.get('kind_clusters', []))
|
||||
|
||||
connection.execute(
|
||||
sa.text("""
|
||||
INSERT INTO presets (name, category, description, content, docker_network, hosts, images, systemd_defaults, kind_clusters, created_at, updated_at)
|
||||
VALUES (:name, :category, :description, :content, :docker_network, CAST(:hosts AS jsonb), CAST(:images AS jsonb), CAST(:systemd_defaults AS jsonb), CAST(:kind_clusters AS jsonb), :created_at, :updated_at)
|
||||
"""),
|
||||
{
|
||||
'name': preset_file.stem,
|
||||
'category': category,
|
||||
'description': description,
|
||||
'content': content,
|
||||
'docker_network': preset_data.get('docker_network'),
|
||||
'hosts': hosts_json,
|
||||
'images': images_json,
|
||||
'systemd_defaults': systemd_defaults_json,
|
||||
'kind_clusters': kind_clusters_json,
|
||||
'created_at': datetime.utcnow(),
|
||||
'updated_at': datetime.utcnow()
|
||||
}
|
||||
)
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"Ошибка при импорте preset {preset_file.name}: {e}")
|
||||
return False
|
||||
|
||||
# Основные preset'ы из корня папки presets
|
||||
if presets_dir.exists():
|
||||
for preset_file in presets_dir.glob("*.yml"):
|
||||
if preset_file.name == "deploy.yml":
|
||||
continue
|
||||
|
||||
try:
|
||||
with open(preset_file) as f:
|
||||
content = f.read()
|
||||
preset_data = yaml.safe_load(content) or {}
|
||||
|
||||
# Извлечение описания из комментария
|
||||
description = None
|
||||
for line in content.split('\n'):
|
||||
if line.strip().startswith('#description:'):
|
||||
description = line.split('#description:')[1].strip()
|
||||
break
|
||||
|
||||
# Проверка существования в БД
|
||||
result = connection.execute(
|
||||
sa.text("SELECT id FROM presets WHERE name = :name"),
|
||||
{"name": preset_file.stem}
|
||||
)
|
||||
if result.fetchone():
|
||||
continue
|
||||
|
||||
# Преобразуем dict/list в JSON строки для PostgreSQL
|
||||
hosts_json = json.dumps(preset_data.get('hosts', []))
|
||||
images_json = json.dumps(preset_data.get('images', {}))
|
||||
systemd_defaults_json = json.dumps(preset_data.get('systemd_defaults', {}))
|
||||
kind_clusters_json = json.dumps(preset_data.get('kind_clusters', []))
|
||||
|
||||
connection.execute(
|
||||
sa.text("""
|
||||
INSERT INTO presets (name, category, description, content, docker_network, hosts, images, systemd_defaults, kind_clusters, created_at, updated_at)
|
||||
VALUES (:name, :category, :description, :content, :docker_network, CAST(:hosts AS jsonb), CAST(:images AS jsonb), CAST(:systemd_defaults AS jsonb), CAST(:kind_clusters AS jsonb), :created_at, :updated_at)
|
||||
"""),
|
||||
{
|
||||
'name': preset_file.stem,
|
||||
'category': 'main',
|
||||
'description': description,
|
||||
'content': content,
|
||||
'docker_network': preset_data.get('docker_network'),
|
||||
'hosts': hosts_json,
|
||||
'images': images_json,
|
||||
'systemd_defaults': systemd_defaults_json,
|
||||
'kind_clusters': kind_clusters_json,
|
||||
'created_at': datetime.utcnow(),
|
||||
'updated_at': datetime.utcnow()
|
||||
}
|
||||
)
|
||||
except Exception as e:
|
||||
print(f"Ошибка при импорте preset {preset_file.name}: {e}")
|
||||
import_preset(preset_file, category='main')
|
||||
|
||||
# Пресеты из папки examples
|
||||
examples_dir = presets_dir / "examples"
|
||||
if examples_dir.exists():
|
||||
for preset_file in examples_dir.glob("*.yml"):
|
||||
import_preset(preset_file, category='main')
|
||||
|
||||
# K8s preset'ы
|
||||
if k8s_presets_dir.exists():
|
||||
|
||||
Reference in New Issue
Block a user