api/tasks: prefix impure actions with run

This commit is contained in:
Johannes Kirschbauer
2025-07-07 12:09:31 +02:00
parent 0f2fb7302c
commit 3a237796d9
12 changed files with 40 additions and 34 deletions

View File

@@ -75,7 +75,7 @@ export const MachineListItem = (props: MachineListItemProps) => {
} }
setInstalling(true); setInstalling(true);
await callApi("install_machine", { await callApi("run_machine_install", {
opts: { opts: {
machine: { machine: {
name: name, name: name,
@@ -163,7 +163,7 @@ export const MachineListItem = (props: MachineListItemProps) => {
} }
await callApi( await callApi(
"deploy_machine", "run_machine_deploy",
{ {
machine: { machine: {
name: name, name: name,

View File

@@ -157,7 +157,7 @@ export const Flash = () => {
console.log("Confirmed flash:", values); console.log("Confirmed flash:", values);
try { try {
await toast.promise( await toast.promise(
callApi("flash_machine", { callApi("run_machine_flash", {
machine: { machine: {
name: values.machine.devicePath, name: values.machine.devicePath,
flake: { flake: {

View File

@@ -120,7 +120,7 @@ export function InstallMachine(props: InstallMachineProps) {
throw new Error("No target host found for the machine"); throw new Error("No target host found for the machine");
} }
const installPromise = callApi("install_machine", { const installPromise = callApi("run_machine_install", {
opts: { opts: {
machine: { machine: {
name: props.name, name: props.name,

View File

@@ -149,7 +149,7 @@ export function MachineForm(props: MachineFormProps) {
setIsUpdating(true); setIsUpdating(true);
const r = await callApi( const r = await callApi(
"deploy_machine", "run_machine_deploy",
{ {
machine: { machine: {
name: machine, name: machine,

View File

@@ -37,7 +37,7 @@ class Disk:
# TODO: unify this with machine install # TODO: unify this with machine install
@API.register @API.register
def flash_machine( def run_machine_flash(
machine: Machine, machine: Machine,
*, *,
mode: str, mode: str,

View File

@@ -11,7 +11,7 @@ from clan_lib.machines.machines import Machine
from clan_cli.completions import add_dynamic_completer, complete_machines from clan_cli.completions import add_dynamic_completer, complete_machines
from .flash import Disk, SystemConfig, flash_machine from .flash import Disk, SystemConfig, run_machine_flash
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@@ -84,7 +84,7 @@ def flash_command(args: argparse.Namespace) -> None:
if ask != "y": if ask != "y":
return return
flash_machine( run_machine_flash(
machine, machine,
mode=opts.mode, mode=opts.mode,
disks=opts.disks, disks=opts.disks,

View File

@@ -4,7 +4,7 @@ import sys
from pathlib import Path from pathlib import Path
from clan_lib.errors import ClanError from clan_lib.errors import ClanError
from clan_lib.machines.install import BuildOn, InstallOptions, install_machine from clan_lib.machines.install import BuildOn, InstallOptions, run_machine_install
from clan_lib.machines.machines import Machine from clan_lib.machines.machines import Machine
from clan_lib.ssh.remote import Remote from clan_lib.ssh.remote import Remote
@@ -65,7 +65,7 @@ def install_command(args: argparse.Namespace) -> None:
if ask != "y": if ask != "y":
return None return None
return install_machine( return run_machine_install(
InstallOptions( InstallOptions(
machine=machine, machine=machine,
kexec=args.kexec, kexec=args.kexec,

View File

@@ -9,7 +9,7 @@ from clan_lib.machines.actions import list_machines
from clan_lib.machines.list import instantiate_inventory_to_machines from clan_lib.machines.list import instantiate_inventory_to_machines
from clan_lib.machines.machines import Machine from clan_lib.machines.machines import Machine
from clan_lib.machines.suggestions import validate_machine_names from clan_lib.machines.suggestions import validate_machine_names
from clan_lib.machines.update import deploy_machine from clan_lib.machines.update import run_machine_deploy
from clan_lib.nix import nix_config from clan_lib.nix import nix_config
from clan_lib.ssh.remote import Remote from clan_lib.ssh.remote import Remote
@@ -144,7 +144,7 @@ def update_command(args: argparse.Namespace) -> None:
tid=machine.name, tid=machine.name,
async_ctx=AsyncContext(prefix=machine.name), async_ctx=AsyncContext(prefix=machine.name),
), ),
deploy_machine, run_machine_deploy,
machine=machine, machine=machine,
target_host=target_host, target_host=target_host,
build_host=machine.build_host(), build_host=machine.build_host(),

View File

@@ -17,7 +17,7 @@ def example_function() -> None:
"""Example function for creating logs.""" """Example function for creating logs."""
def deploy_machine() -> None: def run_machine_deploy() -> None:
"""Function for deploying machines.""" """Function for deploying machines."""
@@ -41,7 +41,7 @@ def main() -> None:
for repo in repos: for repo in repos:
for machine in machines: for machine in machines:
log_manager.create_log_file( log_manager.create_log_file(
deploy_machine, run_machine_deploy,
f"deploy_{machine}", f"deploy_{machine}",
["clans", repo, "machines", machine], ["clans", repo, "machines", machine],
) )

View File

@@ -17,7 +17,7 @@ from clan_lib.log_manager import (
# Test functions for log creation # Test functions for log creation
def deploy_machine() -> None: def run_machine_deploy() -> None:
"""Test function for deploying machines.""" """Test function for deploying machines."""
@@ -194,13 +194,13 @@ class TestLogFileCreation:
for repo in repos: for repo in repos:
for machine in machines: for machine in machines:
log_file = configured_log_manager.create_log_file( log_file = configured_log_manager.create_log_file(
deploy_machine, run_machine_deploy,
f"deploy_{machine}", f"deploy_{machine}",
["clans", repo, "machines", machine], ["clans", repo, "machines", machine],
) )
assert log_file.op_key == f"deploy_{machine}" assert log_file.op_key == f"deploy_{machine}"
assert log_file.func_name == "deploy_machine" assert log_file.func_name == "run_machine_deploy"
assert log_file.get_file_path().exists() assert log_file.get_file_path().exists()
# Check the group structure includes URL encoding for dynamic parts # Check the group structure includes URL encoding for dynamic parts
@@ -241,7 +241,7 @@ class TestFilterFunction:
"""Test that empty filter returns top-level groups.""" """Test that empty filter returns top-level groups."""
# Create some log files first # Create some log files first
configured_log_manager.create_log_file( configured_log_manager.create_log_file(
deploy_machine, "test_op", ["clans", "repo1", "machines", "machine1"] run_machine_deploy, "test_op", ["clans", "repo1", "machines", "machine1"]
) )
top_level = configured_log_manager.filter([]) top_level = configured_log_manager.filter([])
@@ -258,7 +258,7 @@ class TestFilterFunction:
for repo in repos: for repo in repos:
for machine in machines: for machine in machines:
configured_log_manager.create_log_file( configured_log_manager.create_log_file(
deploy_machine, run_machine_deploy,
f"deploy_{machine}", f"deploy_{machine}",
["clans", repo, "machines", machine], ["clans", repo, "machines", machine],
) )
@@ -281,7 +281,7 @@ class TestFilterFunction:
"""Test filtering with specific date.""" """Test filtering with specific date."""
# Create log file # Create log file
log_file = configured_log_manager.create_log_file( log_file = configured_log_manager.create_log_file(
deploy_machine, "test_op", ["clans", "repo1", "machines", "machine1"] run_machine_deploy, "test_op", ["clans", "repo1", "machines", "machine1"]
) )
# Filter with the specific date # Filter with the specific date
@@ -308,14 +308,16 @@ class TestGetLogFile:
"""Test getting log file by operation key.""" """Test getting log file by operation key."""
# Create log file # Create log file
configured_log_manager.create_log_file( configured_log_manager.create_log_file(
deploy_machine, "deploy_wintux", ["clans", "repo1", "machines", "wintux"] run_machine_deploy,
"deploy_wintux",
["clans", "repo1", "machines", "wintux"],
) )
# Find it by op_key # Find it by op_key
found_log_file = configured_log_manager.get_log_file("deploy_wintux") found_log_file = configured_log_manager.get_log_file("deploy_wintux")
assert found_log_file is not None assert found_log_file is not None
assert found_log_file.op_key == "deploy_wintux" assert found_log_file.op_key == "deploy_wintux"
assert found_log_file.func_name == "deploy_machine" assert found_log_file.func_name == "run_machine_deploy"
def test_get_log_file_with_selector( def test_get_log_file_with_selector(
self, configured_log_manager: LogManager self, configured_log_manager: LogManager
@@ -323,10 +325,14 @@ class TestGetLogFile:
"""Test getting log file with specific selector like example_usage.py.""" """Test getting log file with specific selector like example_usage.py."""
# Create log files in different locations # Create log files in different locations
configured_log_manager.create_log_file( configured_log_manager.create_log_file(
deploy_machine, "deploy_wintux", ["clans", "repo1", "machines", "wintux"] run_machine_deploy,
"deploy_wintux",
["clans", "repo1", "machines", "wintux"],
) )
configured_log_manager.create_log_file( configured_log_manager.create_log_file(
deploy_machine, "deploy_wintux", ["clans", "repo2", "machines", "wintux"] run_machine_deploy,
"deploy_wintux",
["clans", "repo2", "machines", "wintux"],
) )
# Find specific one using selector # Find specific one using selector
@@ -341,7 +347,7 @@ class TestGetLogFile:
"""Test getting log file with specific date.""" """Test getting log file with specific date."""
# Create log file # Create log file
log_file = configured_log_manager.create_log_file( log_file = configured_log_manager.create_log_file(
deploy_machine, "deploy_demo", ["clans", "repo1", "machines", "demo"] run_machine_deploy, "deploy_demo", ["clans", "repo1", "machines", "demo"]
) )
# Find it by op_key and date # Find it by op_key and date
@@ -378,10 +384,10 @@ class TestListLogDays:
"""Test listing log days when logs exist.""" """Test listing log days when logs exist."""
# Create log files # Create log files
configured_log_manager.create_log_file( configured_log_manager.create_log_file(
deploy_machine, "op1", ["clans", "repo1", "machines", "machine1"] run_machine_deploy, "op1", ["clans", "repo1", "machines", "machine1"]
) )
configured_log_manager.create_log_file( configured_log_manager.create_log_file(
deploy_machine, "op2", ["clans", "repo2", "machines", "machine2"] run_machine_deploy, "op2", ["clans", "repo2", "machines", "machine2"]
) )
days = configured_log_manager.list_log_days() days = configured_log_manager.list_log_days()
@@ -406,7 +412,7 @@ class TestApiCompatibility:
for repo in repos: for repo in repos:
for machine in machines: for machine in machines:
configured_log_manager.create_log_file( configured_log_manager.create_log_file(
deploy_machine, run_machine_deploy,
f"deploy_{machine}", f"deploy_{machine}",
["clans", repo, "machines", machine], ["clans", repo, "machines", machine],
) )
@@ -741,19 +747,19 @@ class TestLogFileSorting:
# This simulates the realistic scenario where the same operation runs on different machines # This simulates the realistic scenario where the same operation runs on different machines
configured_log_manager.create_log_file( configured_log_manager.create_log_file(
deploy_machine, run_machine_deploy,
"deploy_operation", "deploy_operation",
["clans", "repo1", "machines", "machine1"], ["clans", "repo1", "machines", "machine1"],
) )
configured_log_manager.create_log_file( configured_log_manager.create_log_file(
deploy_machine, run_machine_deploy,
"deploy_operation", "deploy_operation",
["clans", "repo1", "machines", "machine2"], ["clans", "repo1", "machines", "machine2"],
) )
configured_log_manager.create_log_file( configured_log_manager.create_log_file(
deploy_machine, run_machine_deploy,
"deploy_operation", "deploy_operation",
["clans", "repo2", "machines", "machine1"], ["clans", "repo2", "machines", "machine1"],
) )
@@ -819,7 +825,7 @@ class TestURLEncoding:
# Create log file with special characters # Create log file with special characters
log_file = configured_log_manager.create_log_file( log_file = configured_log_manager.create_log_file(
deploy_machine, run_machine_deploy,
"deploy_special", "deploy_special",
["clans", special_repo, "machines", special_machine], ["clans", special_repo, "machines", special_machine],
) )

View File

@@ -39,7 +39,7 @@ class InstallOptions:
@API.register @API.register
def install_machine(opts: InstallOptions, target_host: Remote) -> None: def run_machine_install(opts: InstallOptions, target_host: Remote) -> None:
machine = opts.machine machine = opts.machine
machine.debug(f"installing {machine.name}") machine.debug(f"installing {machine.name}")

View File

@@ -103,7 +103,7 @@ def upload_sources(machine: Machine, ssh: Remote) -> str:
@API.register @API.register
def deploy_machine( def run_machine_deploy(
machine: Machine, target_host: Remote, build_host: Remote | None machine: Machine, target_host: Remote, build_host: Remote | None
) -> None: ) -> None:
with ExitStack() as stack: with ExitStack() as stack: