Skip to content

Commit 7ee8139

Browse files
authored
Ensure workload policy exists on workload create (#847)
feat: ensure workload policy exists on workload create
1 parent 27d8f6a commit 7ee8139

File tree

3 files changed

+38
-8
lines changed

3 files changed

+38
-8
lines changed

src/xpk/commands/workload.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
)
5555
from ..core.resources import get_cluster_capacity_type, get_cluster_system_characteristics, SystemCharacteristics
5656
from ..core.resources import CLUSTER_METADATA_CONFIGMAP, get_cluster_configmap
57+
from ..core.nodepool import ensure_resource_policy_exists
5758
from ..core.scheduling import (
5859
check_if_workload_can_schedule,
5960
create_accelerator_label,
@@ -64,6 +65,7 @@
6465
get_gpu_scheduler,
6566
create_sub_slicing_annotations,
6667
create_placement_policy_label,
68+
get_placement_policy_name,
6769
is_placement_policy_supported,
6870
)
6971
from ..core.storage import (
@@ -493,6 +495,14 @@ def workload_create(args) -> None:
493495
operator: NotIn
494496
values: [{restart_on_exit_codes}]"""
495497

498+
if is_placement_policy_supported(system):
499+
ensure_resource_policy_exists(
500+
resource_policy_name=get_placement_policy_name(system),
501+
project=args.project,
502+
zone=args.zone,
503+
topology=system.topology,
504+
)
505+
496506
placement_policy_label = (
497507
create_placement_policy_label(system)
498508
if is_placement_policy_supported(system)

src/xpk/core/nodepool.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,12 @@ def run_gke_node_pool_create_command(
260260
placement_args = ''
261261
if is_placement_policy_supported(system):
262262
placement_policy = get_placement_policy_name(system)
263-
ensure_resource_policy_exists(placement_policy, args, system.topology)
263+
ensure_resource_policy_exists(
264+
resource_policy_name=placement_policy,
265+
project=args.project,
266+
zone=args.zone,
267+
topology=system.topology,
268+
)
264269
placement_args = f' --placement-policy={placement_policy}'
265270

266271
create_commands = []
@@ -587,14 +592,14 @@ def get_desired_node_pool_names(
587592

588593

589594
def ensure_resource_policy_exists(
590-
resource_policy_name: str, args, topology: str
595+
resource_policy_name: str, project: str, zone: str, topology: str
591596
) -> None:
592597
return_code, _ = run_command_for_value(
593598
(
594599
'gcloud compute resource-policies describe'
595600
f' {resource_policy_name} '
596-
f'--project={args.project} '
597-
f'--region={zone_to_region(args.zone)}'
601+
f'--project={project} '
602+
f'--region={zone_to_region(zone)}'
598603
),
599604
'Retrieve resource policy',
600605
)
@@ -605,7 +610,7 @@ def ensure_resource_policy_exists(
605610
return_code, _ = run_command_for_value(
606611
(
607612
'gcloud compute resource-policies create workload-policy'
608-
f' {resource_policy_name} --project={args.project} --region={zone_to_region(args.zone)} --type=HIGH_THROUGHPUT'
613+
f' {resource_policy_name} --project={project} --region={zone_to_region(zone)} --type=HIGH_THROUGHPUT'
609614
f' --accelerator-topology={topology}'
610615
),
611616
'Create resource policy',

src/xpk/core/nodepool_test.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,12 @@ def test_ensure_resource_policy_exists_with_existing_policy_retrieves_existing_p
9696
mock = mocker.patch(
9797
"xpk.core.nodepool.run_command_for_value", return_value=(0, "")
9898
)
99-
ensure_resource_policy_exists("resource-policy", args, "2x2x1")
99+
ensure_resource_policy_exists(
100+
resource_policy_name="resource-policy",
101+
project="test-project",
102+
zone="us-central1-a",
103+
topology="2x2x1",
104+
)
100105
mock.assert_called_once()
101106

102107

@@ -108,7 +113,12 @@ def test_ensure_resource_policy_exists_without_existing_policy_creates_policy(
108113
mock = mocker.patch(
109114
"xpk.core.nodepool.run_command_for_value", side_effect=[(1, ""), (0, "")]
110115
)
111-
ensure_resource_policy_exists("resource-policy", args, "2x2x1")
116+
ensure_resource_policy_exists(
117+
resource_policy_name="resource-policy",
118+
project="test-project",
119+
zone="us-central1-a",
120+
topology="2x2x1",
121+
)
112122
assert mock.call_count == 2
113123
assert mock.call_args_list[0].args[1] == "Retrieve resource policy"
114124

@@ -125,7 +135,12 @@ def test_ensure_resource_policy_exits_without_existing_policy_throws_when_creati
125135
"xpk.core.nodepool.run_command_for_value",
126136
side_effect=[(1, ""), (1, "")],
127137
)
128-
ensure_resource_policy_exists("resource-policy", args, "2x2x1")
138+
ensure_resource_policy_exists(
139+
resource_policy_name="resource-policy",
140+
project="test-project",
141+
zone="us-central1-a",
142+
topology="2x2x1",
143+
)
129144

130145

131146
@pytest.fixture

0 commit comments

Comments
 (0)