Skip to content

Commit 9017a00

Browse files
mr0re1bsngardner
authored andcommitted
Inspect node group reservation, use attached placement policy
1 parent a947724 commit 9017a00

File tree

3 files changed

+49
-1
lines changed

3 files changed

+49
-1
lines changed

CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
All notable changes to this project will be documented in this file.
44

5+
## \[5.9.1\]
6+
7+
- Use reservation placement policy if placement is enabled, and a reservation is
8+
specified.
9+
510
## \[5.9.0\]
611

712
- Remove spurious log message on resume, referring to "Reservation name".

scripts/resume.py

+11-1
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,21 @@ def instance_properties(partition, model, placement_group, labels=None):
125125
}
126126

127127
if node_group.reservation_name:
128+
reservation_name = node_group.reservation_name
129+
reservation = lkp.reservation(reservation_name)
128130
props.reservationAffinity = {
129131
"consumeReservationType": "SPECIFIC_RESERVATION",
130132
"key": "compute.googleapis.com/reservation-name",
131-
"values": [node_group.reservation_name],
133+
"values": [reservation_name],
132134
}
135+
136+
placement = util.reservation_placement(reservation)
137+
if placement:
138+
props.resourcePolicies = [placement]
139+
log.info(f"reservation {reservation_name} is being used with placement policy {placement}")
140+
else:
141+
props.resourcePolicies = []
142+
log.info(f"reservation {reservation_name} is being used without a placement policy")
133143

134144
return props
135145

scripts/util.py

+33
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,16 @@ def is_exclusive_node(node):
386386
)
387387

388388

389+
def reservation_placement(reservation):
390+
"""
391+
Inspects reservation object, returns placement policy name if one is found.
392+
"""
393+
url = reservation.get("resourcePolicies", {}).get("placement")
394+
if url:
395+
return trim_self_link(url)
396+
return None
397+
398+
389399
def compute_service(credentials=None, user_agent=USER_AGENT, version="v1"):
390400
"""Make thread-safe compute service handle
391401
creates a new Http for each request
@@ -1629,6 +1639,29 @@ def clear_template_info_cache(self):
16291639
cache.clear()
16301640
self.template_info.cache_clear()
16311641

1642+
@lru_cache()
1643+
def reservation(self, name):
1644+
"""
1645+
See https://cloud.google.com/compute/docs/reference/rest/v1/reservations
1646+
"""
1647+
resp = ensure_execute(
1648+
self.compute.reservations().aggregatedList(
1649+
project=self.project, filter=f"name={name}"
1650+
)
1651+
)
1652+
reservation = None
1653+
for _, e in resp["items"].items():
1654+
for r in e.get("reservations", []):
1655+
assert (
1656+
reservation is None
1657+
), f"multiple reservations '{name}' found in '{self.project}'."
1658+
reservation = r
1659+
1660+
assert (
1661+
reservation is not None
1662+
), f"reservation '{name}' not found in '{self.project}'."
1663+
return reservation
1664+
16321665

16331666
# Define late globals
16341667
cfg = load_config_file(CONFIG_FILE)

0 commit comments

Comments
 (0)