diff --git a/cycleops/client.py b/cycleops/client.py index 8174a8e..850f7b1 100644 --- a/cycleops/client.py +++ b/cycleops/client.py @@ -156,6 +156,13 @@ def deploy(self, setup_id: int) -> Optional[Dict[str, Any]]: jobs_client: JobClient = JobClient(cycleops_client) return jobs_client.create(description=description, type=type, setup=setup_id) + def destroy(self, setup_id: int) -> Optional[Dict[str, Any]]: + description: str = f"Destroying setup: {setup_id}" + type: str = "Destruction" + + jobs_client = JobClient(cycleops_client) + return jobs_client.create(description=description, type=type, setup=setup_id) + class UnitClient(SubClient): """ diff --git a/cycleops/setups.py b/cycleops/setups.py index a89adce..31ffb3b 100644 --- a/cycleops/setups.py +++ b/cycleops/setups.py @@ -214,6 +214,26 @@ def deploy( return +@app.command() +def destroy( + setup_identifier: str = typer.Argument( + ..., help="The ID or name of the setup. Names take precedence." + ), +) -> None: + """ + Deploy the setup with the specified given ID or name. + """ + + try: + setup = get_setup(setup_identifier) + setup_client.destroy(setup["id"]) + + display_success_message(f"Setup {setup['id']} has been queued for destruction") + except Exception as error: + display_error_message(error) + raise typer.Abort() + + def get_setup(setup_identifier: str) -> Optional[Dict[str, Any]]: """ Retrieves a Setup with either a name or ID. Names take precedence.