54 lines
1.5 KiB
Python
54 lines
1.5 KiB
Python
import argparse
|
|
import logging
|
|
from typing import Dict
|
|
|
|
from ..async_cmd import CmdOut, run, runforcli
|
|
from ..dirs import specific_flake_dir, specific_machine_dir
|
|
from ..errors import ClanError
|
|
from ..nix import nix_shell
|
|
from ..types import FlakeName
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
async def create_machine(flake_name: FlakeName, machine_name: str) -> Dict[str, CmdOut]:
|
|
folder = specific_machine_dir(flake_name, machine_name)
|
|
if folder.exists():
|
|
raise ClanError(f"Machine '{machine_name}' already exists")
|
|
folder.mkdir(parents=True, exist_ok=True)
|
|
|
|
# create empty settings.json file inside the folder
|
|
with open(folder / "settings.json", "w") as f:
|
|
f.write("{}")
|
|
response = {}
|
|
out = await run(nix_shell(["git"], ["git", "add", str(folder)]), cwd=folder)
|
|
response["git add"] = out
|
|
|
|
out = await run(
|
|
nix_shell(
|
|
["git"],
|
|
["git", "commit", "-m", f"Added machine {machine_name}", str(folder)],
|
|
),
|
|
cwd=folder,
|
|
)
|
|
response["git commit"] = out
|
|
return response
|
|
|
|
|
|
def create_command(args: argparse.Namespace) -> None:
|
|
try:
|
|
flake_dir = specific_flake_dir(args.flake)
|
|
runforcli(create_machine, flake_dir, args.machine)
|
|
except ClanError as e:
|
|
print(e)
|
|
|
|
|
|
def register_create_parser(parser: argparse.ArgumentParser) -> None:
|
|
parser.add_argument("machine", type=str)
|
|
parser.add_argument(
|
|
"flake",
|
|
type=str,
|
|
help="name of the flake to create machine for",
|
|
)
|
|
parser.set_defaults(func=create_command)
|