Skip to content

Commit bab8874

Browse files
committed
update server to receive grow/shrink request
Signed-off-by: vsoch <[email protected]>
1 parent 754d9f4 commit bab8874

File tree

11 files changed

+286
-63
lines changed

11 files changed

+286
-63
lines changed

Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,6 @@ RUN python3 -m pip install --break-system-packages -r requirements.txt && \
2121
python3 -m pip install --break-system-packages -e .
2222

2323
# ensemble-server start --workers 10 --port <port>
24+
ENV PYTHONUNBUFFERED=1
2425
ENTRYPOINT ["ensemble-server"]
2526
CMD ["start"]

ensemble/config/types.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,12 @@ def finished(self):
178178
"""
179179
return self.repetitions <= 0
180180

181+
def value(self, default=1):
182+
"""
183+
Return a value, with some default (default is 1)
184+
"""
185+
return self._action.get("value", 1)
186+
181187
@property
182188
def label(self):
183189
return self._action.get("label")

ensemble/defaults.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
supported_members = ["flux", "minicluster"]
55
valid_actions = ["submit", "custom", "terminate", "grow", "shrink"]
66
heartbeat_seconds = 60
7+
service_account_file = "/var/run/secrets/kubernetes.io/serviceaccount/namespace"
78

89
job_events = [
910
"job-depend",

ensemble/members/client.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,16 @@ def __init__(self, host="localhost:50051", use_ssl=False):
1919
self.host = host
2020
self.use_ssl = use_ssl
2121

22-
def action_request(self, member, action, payload):
22+
def action_request(self, member, name, action, payload):
2323
"""
2424
Send an action request to the grpc server.
2525
"""
2626
payload = json.dumps(payload)
2727

2828
# These are submit variables. A more substantial submit script would have argparse, etc.
29-
request = ensemble_service_pb2.ActionRequest(member=member, action=action, payload=payload)
29+
request = ensemble_service_pb2.ActionRequest(
30+
member=member, name=name, action=action, payload=payload
31+
)
3032

3133
with auth.grpc_channel(self.host, self.use_ssl) as channel:
3234
stub = ensemble_service_pb2_grpc.EnsembleOperatorStub(channel)

ensemble/members/flux/minicluster.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,20 +57,42 @@ def client(self):
5757
self._client = EnsembleClient(host=self.host)
5858
return self._client
5959

60+
@property
61+
def payload(self):
62+
"""
63+
Return the default payload
64+
"""
65+
return {"version": "v1alpha2", "group": "flux-framework.org"}
66+
6067
def grow(self, rule, record=None):
6168
"""
6269
Request to the API to grow the MiniCluster
6370
"""
6471
name = self.options["name"]
65-
response = self.client.action_request(member=name, action="grow", payload={})
72+
payload = self.payload
73+
74+
# Add the grow value to the payload
75+
payload["grow"] = rule.action.value()
76+
77+
# Member "minicluster" should be plural here
78+
response = self.client.action_request(
79+
member=f"{self.name}s", name=name, action="grow", payload=payload
80+
)
6681
print(response)
6782

6883
def shrink(self, rule, record=None):
6984
"""
7085
Request to the API to shrink the MiniCluster
7186
"""
7287
name = self.options["name"]
73-
response = self.client.action_request(member=name, action="shrink", payload={})
88+
89+
# Add the grow value to the payload
90+
payload = self.payload
91+
payload["shrink"] = rule.action.value()
92+
93+
response = self.client.action_request(
94+
member=f"{self.name}s", name=name, action="shrink", payload=payload
95+
)
7496
print(response)
7597

7698
@property

ensemble/protos/ensemble_service_pb2.py

Lines changed: 10 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ensemble/protos/ensemble_service_pb2.pyi

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,24 @@ from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union
66
DESCRIPTOR: _descriptor.FileDescriptor
77

88
class StatusRequest(_message.Message):
9-
__slots__ = ("member", "namespace")
9+
__slots__ = ("member", "name")
1010
MEMBER_FIELD_NUMBER: _ClassVar[int]
11-
NAMESPACE_FIELD_NUMBER: _ClassVar[int]
11+
NAME_FIELD_NUMBER: _ClassVar[int]
1212
member: str
13-
namespace: str
14-
def __init__(self, member: _Optional[str] = ..., namespace: _Optional[str] = ...) -> None: ...
13+
name: str
14+
def __init__(self, member: _Optional[str] = ..., name: _Optional[str] = ...) -> None: ...
1515

1616
class ActionRequest(_message.Message):
17-
__slots__ = ("member", "namespace", "action", "payload")
17+
__slots__ = ("member", "name", "action", "payload")
1818
MEMBER_FIELD_NUMBER: _ClassVar[int]
19-
NAMESPACE_FIELD_NUMBER: _ClassVar[int]
19+
NAME_FIELD_NUMBER: _ClassVar[int]
2020
ACTION_FIELD_NUMBER: _ClassVar[int]
2121
PAYLOAD_FIELD_NUMBER: _ClassVar[int]
2222
member: str
23-
namespace: str
23+
name: str
2424
action: str
2525
payload: str
26-
def __init__(self, member: _Optional[str] = ..., namespace: _Optional[str] = ..., action: _Optional[str] = ..., payload: _Optional[str] = ...) -> None: ...
26+
def __init__(self, member: _Optional[str] = ..., name: _Optional[str] = ..., action: _Optional[str] = ..., payload: _Optional[str] = ...) -> None: ...
2727

2828
class Response(_message.Message):
2929
__slots__ = ("payload", "status")

ensemble/schema.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
"items": {
6969
"properties": {
7070
"name": {"type": "string"},
71+
"value": {"type": ["number", "string"]},
7172
"label": {"type": ["number", "string"]},
7273
},
7374
"required": ["name"],

0 commit comments

Comments
 (0)