Skip to content

Commit da019d3

Browse files
cursor[bot]cursoragentblainekasten
authored
feat: Add HOST_POWER_CYCLE to remediations CLI modes and state (#444)
* feat(cli): sync beta cluster SDK updates Co-authored-by: Blaine Kasten <blainekasten@gmail.com> * test(cli): cover beta cluster SDK sync Co-authored-by: Blaine Kasten <blainekasten@gmail.com> * fix(cli): remove cluster storage project ID updates Co-authored-by: Blaine Kasten <blainekasten@gmail.com> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Blaine Kasten <blainekasten@gmail.com>
1 parent aa92642 commit da019d3

4 files changed

Lines changed: 16 additions & 7 deletions

File tree

src/together/lib/cli/api/beta/clusters/remediations/approve.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"HOST_AWARE",
1818
"EVICT_WITHOUT_REPLACEMENT",
1919
"REBOOT_VM",
20+
"HOST_POWER_CYCLE",
2021
],
2122
Parameter(help="Remediation mode to use after approval"),
2223
]
@@ -39,6 +40,7 @@ async def approve(
3940
"REMEDIATION_MODE_HOST_AWARE",
4041
"REMEDIATION_MODE_EVICT_WITHOUT_REPLACEMENT",
4142
"REMEDIATION_MODE_REBOOT_VM",
43+
"REMEDIATION_MODE_HOST_POWER_CYCLE",
4244
],
4345
f"REMEDIATION_MODE_{mode}",
4446
)

src/together/lib/cli/api/beta/clusters/remediations/create.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"HOST_AWARE",
1717
"EVICT_WITHOUT_REPLACEMENT",
1818
"REBOOT_VM",
19+
"HOST_POWER_CYCLE",
1920
],
2021
Parameter(help="The type of remediation to perform"),
2122
]
@@ -37,6 +38,7 @@ async def create(
3738
"REMEDIATION_MODE_HOST_AWARE",
3839
"REMEDIATION_MODE_EVICT_WITHOUT_REPLACEMENT",
3940
"REMEDIATION_MODE_REBOOT_VM",
41+
"REMEDIATION_MODE_HOST_POWER_CYCLE",
4042
],
4143
f"REMEDIATION_MODE_{mode}",
4244
)

src/together/lib/cli/api/beta/clusters/remediations/list.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"HOST_AWARE",
2121
"EVICT_WITHOUT_REPLACEMENT",
2222
"REBOOT_VM",
23+
"HOST_POWER_CYCLE",
2324
]
2425
]
2526
],
@@ -128,6 +129,8 @@ def _colorize(state: str) -> str:
128129
"FAILED": "red",
129130
"CANCELLED": "dim",
130131
"AUTO_RESOLVED": "green",
132+
"QUARANTINING": "yellow",
133+
"QUARANTINED": "yellow",
131134
}
132135
color = state_colors[state] if state in state_colors else "white"
133136
return f"[{color}]{state}[/{color}]"

tests/cli/test_beta_clusters.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -915,7 +915,7 @@ def test_remediations_create_json(self, respx_mock: MockRouter, cli_runner: CliR
915915
"c1",
916916
"i1",
917917
"--mode",
918-
"VM_ONLY",
918+
"HOST_POWER_CYCLE",
919919
"--reason",
920920
"node unhealthy",
921921
"--remediation-id",
@@ -928,7 +928,7 @@ def test_remediations_create_json(self, respx_mock: MockRouter, cli_runner: CliR
928928
request = cast(Call, route.calls[0]).request
929929
assert request.url.params["remediation_id"] == "rem-created"
930930
assert json.loads(request.content.decode()) == {
931-
"mode": "REMEDIATION_MODE_VM_ONLY",
931+
"mode": "REMEDIATION_MODE_HOST_POWER_CYCLE",
932932
"reason": "node unhealthy",
933933
}
934934
assert result.exit_code == 0
@@ -1001,7 +1001,9 @@ def test_remediations_list_accepts_filters(self, respx_mock: MockRouter, cli_run
10011001
"--mode",
10021002
"VM_ONLY",
10031003
"--mode",
1004-
"REBOOT_VM",
1004+
"HOST_POWER_CYCLE",
1005+
"--state",
1006+
"QUARANTINED",
10051007
"--state",
10061008
"PENDING_APPROVAL",
10071009
"--trigger",
@@ -1013,8 +1015,8 @@ def test_remediations_list_accepts_filters(self, respx_mock: MockRouter, cli_run
10131015
)
10141016

10151017
params = cast(Call, route.calls[0]).request.url.params
1016-
assert params["mode"] == "REMEDIATION_MODE_VM_ONLY,REMEDIATION_MODE_REBOOT_VM"
1017-
assert params["state"] == "PENDING_APPROVAL"
1018+
assert params["mode"] == "REMEDIATION_MODE_VM_ONLY,REMEDIATION_MODE_HOST_POWER_CYCLE"
1019+
assert params["state"] == "QUARANTINED,PENDING_APPROVAL"
10181020
assert params["trigger"] == "REMEDIATION_TRIGGER_AUTOMATED"
10191021
assert params["page_token"] == "next-token"
10201022
assert result.exit_code == 0
@@ -1064,15 +1066,15 @@ def test_remediations_approve_resolves_cluster_and_instance(
10641066
"--comment",
10651067
"go",
10661068
"--mode",
1067-
"REBOOT_VM",
1069+
"HOST_POWER_CYCLE",
10681070
"--json",
10691071
]
10701072
)
10711073

10721074
assert json.loads(result.output)["state"] == "PENDING"
10731075
assert json.loads(cast(Call, route.calls[0]).request.content.decode()) == {
10741076
"comment": "go",
1075-
"mode": "REMEDIATION_MODE_REBOOT_VM",
1077+
"mode": "REMEDIATION_MODE_HOST_POWER_CYCLE",
10761078
}
10771079
assert result.exit_code == 0
10781080

0 commit comments

Comments
 (0)