Skip to content

Commit fce56d9

Browse files
committed
add: Support for image pull secrets for Ray Cluster images
1 parent b4d84c1 commit fce56d9

File tree

3 files changed

+28
-1
lines changed

3 files changed

+28
-1
lines changed

src/codeflare_sdk/cluster/cluster.py

+2
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ def create_app_wrapper(self):
8484
instascale = self.config.instascale
8585
instance_types = self.config.machine_types
8686
env = self.config.envs
87+
pull_secret = self.config.pull_secret
8788
return generate_appwrapper(
8889
name=name,
8990
namespace=namespace,
@@ -98,6 +99,7 @@ def create_app_wrapper(self):
9899
instascale=instascale,
99100
instance_types=instance_types,
100101
env=env,
102+
pull_secret=pull_secret,
101103
)
102104

103105
# creates a new cluster with the provided or default spec

src/codeflare_sdk/cluster/config.py

+1
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,4 @@ class ClusterConfiguration:
4848
instascale: bool = False
4949
envs: dict = field(default_factory=dict)
5050
image: str = "ghcr.io/foundation-model-stack/base:ray2.1.0-py38-gpu-pytorch1.12.0cu116-20221213-193103"
51+
pull_secret: dict = field(default_factory=dict)

src/codeflare_sdk/utils/generate_yaml.py

+25-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@
2323
import uuid
2424

2525

26+
class NoAliasDumper(yaml.Dumper):
27+
def ignore_aliases(self, data):
28+
return True
29+
30+
2631
def read_template(template):
2732
with open(template, "r") as stream:
2833
try:
@@ -130,6 +135,13 @@ def update_image(spec, image):
130135
container["image"] = image
131136

132137

138+
def update_pull_secret(spec, pull_secret):
139+
if pull_secret:
140+
if "imagePullSecrets" not in spec:
141+
spec["imagePullSecrets"] = []
142+
spec["imagePullSecrets"].append(pull_secret)
143+
144+
133145
def update_env(spec, env):
134146
containers = spec.get("containers")
135147
for container in containers:
@@ -167,6 +179,7 @@ def update_nodes(
167179
image,
168180
instascale,
169181
env,
182+
pull_secret,
170183
):
171184
if "generictemplate" in item.keys():
172185
head = item.get("generictemplate").get("spec").get("headGroupSpec")
@@ -182,6 +195,7 @@ def update_nodes(
182195
for comp in [head, worker]:
183196
spec = comp.get("template").get("spec")
184197
update_affinity(spec, appwrapper_name, instascale)
198+
update_pull_secret(spec, pull_secret)
185199
update_image(spec, image)
186200
update_env(spec, env)
187201
if comp == head:
@@ -193,7 +207,7 @@ def update_nodes(
193207

194208
def write_user_appwrapper(user_yaml, output_file_name):
195209
with open(output_file_name, "w") as outfile:
196-
yaml.dump(user_yaml, outfile, default_flow_style=False)
210+
yaml.dump(user_yaml, outfile, default_flow_style=False, Dumper=NoAliasDumper)
197211
print(f"Written to: {output_file_name}")
198212

199213

@@ -211,6 +225,7 @@ def generate_appwrapper(
211225
instascale: bool,
212226
instance_types: list,
213227
env,
228+
pull_secret: str,
214229
):
215230
user_yaml = read_template(template)
216231
appwrapper_name, cluster_name = gen_names(name)
@@ -234,6 +249,7 @@ def generate_appwrapper(
234249
image,
235250
instascale,
236251
env,
252+
pull_secret,
237253
)
238254
update_dashboard_route(route_item, cluster_name, namespace)
239255
outfile = appwrapper_name + ".yaml"
@@ -315,6 +331,12 @@ def main(): # pragma: no cover
315331
default="default",
316332
help="Set the kubernetes namespace you want to deploy your cluster to. Default. If left blank, uses the 'default' namespace",
317333
)
334+
parser.add_argument(
335+
"--pull-secret",
336+
required=False,
337+
default="",
338+
help="Set pull secret for a private registry",
339+
)
318340

319341
args = parser.parse_args()
320342
name = args.name
@@ -330,6 +352,7 @@ def main(): # pragma: no cover
330352
instance_types = args.instance_types
331353
namespace = args.namespace
332354
env = {}
355+
pull_secret = args.pull_secret
333356

334357
outfile = generate_appwrapper(
335358
name,
@@ -345,6 +368,7 @@ def main(): # pragma: no cover
345368
instascale,
346369
instance_types,
347370
env,
371+
pull_secret,
348372
)
349373
return outfile
350374

0 commit comments

Comments
 (0)