From f7c80834cb14248616bae0b1255f3a7838cb3ff2 Mon Sep 17 00:00:00 2001 From: Johannes Kirschbauer Date: Tue, 2 Jul 2024 11:16:54 +0200 Subject: [PATCH] Inventory persistence improves error resistance --- pkgs/clan-cli/clan_cli/inventory/__init__.py | 31 +++----------------- pkgs/clan-cli/clan_cli/machines/create.py | 7 +++-- 2 files changed, 8 insertions(+), 30 deletions(-) diff --git a/pkgs/clan-cli/clan_cli/inventory/__init__.py b/pkgs/clan-cli/clan_cli/inventory/__init__.py index 7215095d..8141e21f 100644 --- a/pkgs/clan-cli/clan_cli/inventory/__init__.py +++ b/pkgs/clan-cli/clan_cli/inventory/__init__.py @@ -1,5 +1,4 @@ import json -import re from dataclasses import asdict, dataclass, is_dataclass from pathlib import Path from typing import Any, Literal @@ -56,16 +55,6 @@ class Machine: @staticmethod def from_dict(d: dict[str, Any]) -> "Machine": - if "name" not in d: - raise ClanError("name not found in machine") - - hostname_regex = r"^(?!-)[A-Za-z0-9-]{1,63}(? "Service": - if "meta" not in d: - raise ClanError("meta not found in service") - - if "roles" not in d: - raise ClanError("roles not found in service") - return Service( - meta=ServiceMeta(**d["meta"]), - roles={name: Role(**role) for name, role in d["roles"].items()}, + meta=ServiceMeta(**d.get("meta", {})), + roles={name: Role(**role) for name, role in d.get("roles", {}).items()}, machines={ name: MachineServiceConfig(**machine) for name, machine in d.get("machines", {}).items() @@ -118,23 +101,17 @@ class Inventory: @staticmethod def from_dict(d: dict[str, Any]) -> "Inventory": - if "machines" not in d: - raise ClanError("machines not found in inventory") - - if "services" not in d: - raise ClanError("services not found in inventory") - return Inventory( machines={ name: Machine.from_dict(machine) - for name, machine in d["machines"].items() + for name, machine in d.get("machines", {}).items() }, services={ name: { role: Service.from_dict(service) for role, service in services.items() } - for name, services in d["services"].items() + for name, services in d.get("services", {}).items() }, ) diff --git a/pkgs/clan-cli/clan_cli/machines/create.py b/pkgs/clan-cli/clan_cli/machines/create.py index 5a13ad1a..adcf6382 100644 --- a/pkgs/clan-cli/clan_cli/machines/create.py +++ b/pkgs/clan-cli/clan_cli/machines/create.py @@ -15,14 +15,15 @@ log = logging.getLogger(__name__) def create_machine(flake_dir: str | Path, machine: Machine) -> None: hostname_regex = r"^(?!-)[A-Za-z0-9-]{1,63}(? None: