clan_cli: flake_name -> flake_dir

This commit is contained in:
lassulus
2023-11-15 14:28:40 +01:00
parent 426be3dd37
commit 082d628497
35 changed files with 199 additions and 354 deletions

View File

@@ -2,6 +2,7 @@ import json
import os
import re
import subprocess
from pathlib import Path
from tempfile import NamedTemporaryFile
from typing import Optional
@@ -10,18 +11,15 @@ from fastapi import HTTPException
from clan_cli.dirs import (
machine_settings_file,
nixpkgs_source,
specific_flake_dir,
specific_machine_dir,
)
from clan_cli.errors import ClanError
from clan_cli.git import commit_file
from clan_cli.nix import nix_eval
from ..types import FlakeName
def verify_machine_config(
flake_name: FlakeName,
flake_dir: Path,
machine_name: str,
config: Optional[dict] = None,
) -> Optional[str]:
@@ -30,8 +28,8 @@ def verify_machine_config(
Returns a tuple of (success, error_message)
"""
if config is None:
config = config_for_machine(flake_name, machine_name)
flake = specific_flake_dir(flake_name)
config = config_for_machine(flake_dir, machine_name)
flake = flake_dir
with NamedTemporaryFile(mode="w", dir=flake) as clan_machine_settings_file:
json.dump(config, clan_machine_settings_file, indent=2)
clan_machine_settings_file.seek(0)
@@ -82,23 +80,21 @@ def verify_machine_config(
return None
def config_for_machine(flake_name: FlakeName, machine_name: str) -> dict:
def config_for_machine(flake_dir: Path, machine_name: str) -> dict:
# read the config from a json file located at {flake}/machines/{machine_name}/settings.json
if not specific_machine_dir(flake_name, machine_name).exists():
if not specific_machine_dir(flake_dir, machine_name).exists():
raise HTTPException(
status_code=404,
detail=f"Machine {machine_name} not found. Create the machine first`",
)
settings_path = machine_settings_file(flake_name, machine_name)
settings_path = machine_settings_file(flake_dir, machine_name)
if not settings_path.exists():
return {}
with open(settings_path) as f:
return json.load(f)
def set_config_for_machine(
flake_name: FlakeName, machine_name: str, config: dict
) -> None:
def set_config_for_machine(flake_dir: Path, machine_name: str, config: dict) -> None:
hostname_regex = r"^(?!-)[A-Za-z0-9-]{1,63}(?<!-)$"
if not re.match(hostname_regex, machine_name):
raise ClanError("Machine name must be a valid hostname")
@@ -111,11 +107,10 @@ def set_config_for_machine(
config["networking"]["hostName"] = machine_name
# create machine folder if it doesn't exist
# write the config to a json file located at {flake}/machines/{machine_name}/settings.json
settings_path = machine_settings_file(flake_name, machine_name)
settings_path = machine_settings_file(flake_dir, machine_name)
settings_path.parent.mkdir(parents=True, exist_ok=True)
with open(settings_path, "w") as f:
json.dump(config, f, indent=2)
repo_dir = specific_flake_dir(flake_name)
json.dump(config, f)
if repo_dir is not None:
commit_file(settings_path, repo_dir)
if flake_dir is not None:
commit_file(settings_path, flake_dir)