Skip to content

Commit 6a3e843

Browse files
authored
Merge branch 'main' into nb-sync-RHOAIENG-11541
2 parents fb13933 + 9047a4c commit 6a3e843

File tree

5 files changed

+87
-22
lines changed

5 files changed

+87
-22
lines changed

.github/workflows/release.yaml

-17
Original file line numberDiff line numberDiff line change
@@ -86,23 +86,6 @@ jobs:
8686
- name: Publish package distributions to PyPI
8787
uses: pypa/gh-action-pypi-publish@release/v1
8888

89-
- name: Notebook Image Build and Push
90-
run: |
91-
gh workflow run image-build-and-push.yaml --repo ${{ github.event.inputs.codeflare-repository-organization }}/codeflare-sdk --ref ${{ github.ref }} --field is-stable=${{ github.event.inputs.is-stable }} --field release-version=${{ github.event.inputs.release-version }} --field quay-organization=${{ github.event.inputs.quay-organization }}
92-
env:
93-
GITHUB_TOKEN: ${{ secrets.CODEFLARE_MACHINE_ACCOUNT_TOKEN }}
94-
shell: bash
95-
96-
- name: Wait for Notebook image build and push to finish
97-
run: |
98-
# wait for a while for Run to be started
99-
sleep 5
100-
run_id=$(gh run list --workflow image-build-and-push.yaml --repo ${{ github.event.inputs.codeflare-repository-organization }}/codeflare-sdk --limit 1 --json databaseId --jq .[].databaseId)
101-
gh run watch ${run_id} --repo ${{ github.event.inputs.codeflare-repository-organization }}/codeflare-sdk --interval 10 --exit-status
102-
env:
103-
GITHUB_TOKEN: ${{ secrets.CODEFLARE_MACHINE_ACCOUNT_TOKEN }}
104-
shell: bash
105-
10689
- name: Sync ODH Notebooks
10790
run: |
10891
gh workflow run odh-notebooks-sync.yml \

coverage.svg

+2-2
Loading

docs/detailed-documentation/utils/generate_cert.html

+57-2
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ <h1 class="title">Module <code>codeflare_sdk.utils.generate_cert</code></h1>
4949
import datetime
5050
from ..cluster.auth import config_check, api_config_handler
5151
from kubernetes import client, config
52+
from .kube_api_helpers import _kube_api_error_handling
5253

5354

5455
def generate_ca_cert(days: int = 30):
@@ -102,6 +103,24 @@ <h1 class="title">Module <code>codeflare_sdk.utils.generate_cert</code></h1>
102103
return key, certificate
103104

104105

106+
def get_secret_name(cluster_name, namespace, api_instance):
107+
label_selector = f&#34;ray.openshift.ai/cluster-name={cluster_name}&#34;
108+
try:
109+
secrets = api_instance.list_namespaced_secret(
110+
namespace, label_selector=label_selector
111+
)
112+
for secret in secrets.items:
113+
if (
114+
f&#34;{cluster_name}-ca-secret-&#34; in secret.metadata.name
115+
): # Oauth secret share the same label this conditional is to make things more specific
116+
return secret.metadata.name
117+
else:
118+
continue
119+
raise KeyError(f&#34;Unable to gather secret name for {cluster_name}&#34;)
120+
except Exception as e: # pragma: no cover
121+
return _kube_api_error_handling(e)
122+
123+
105124
def generate_tls_cert(cluster_name, namespace, days=30):
106125
# Create a folder tls-&lt;cluster&gt;-&lt;namespace&gt; and store three files: ca.crt, tls.crt, and tls.key
107126
tls_dir = os.path.join(os.getcwd(), f&#34;tls-{cluster_name}-{namespace}&#34;)
@@ -113,7 +132,11 @@ <h1 class="title">Module <code>codeflare_sdk.utils.generate_cert</code></h1>
113132
# oc get secret ca-secret-&lt;cluster-name&gt; -o template=&#39;{{index .data &#34;ca.crt&#34;}}&#39;|base64 -d &gt; ${TLSDIR}/ca.crt
114133
config_check()
115134
v1 = client.CoreV1Api(api_config_handler())
116-
secret = v1.read_namespaced_secret(f&#34;ca-secret-{cluster_name}&#34;, namespace).data
135+
136+
# Secrets have a suffix appended to the end so we must list them and gather the secret that includes cluster_name-ca-secret-
137+
secret_name = get_secret_name(cluster_name, namespace, v1)
138+
secret = v1.read_namespaced_secret(secret_name, namespace).data
139+
117140
ca_cert = secret.get(&#34;ca.crt&#34;)
118141
ca_key = secret.get(&#34;ca.key&#34;)
119142

@@ -294,7 +317,11 @@ <h2 class="section-title" id="header-functions">Functions</h2>
294317
# oc get secret ca-secret-&lt;cluster-name&gt; -o template=&#39;{{index .data &#34;ca.crt&#34;}}&#39;|base64 -d &gt; ${TLSDIR}/ca.crt
295318
config_check()
296319
v1 = client.CoreV1Api(api_config_handler())
297-
secret = v1.read_namespaced_secret(f&#34;ca-secret-{cluster_name}&#34;, namespace).data
320+
321+
# Secrets have a suffix appended to the end so we must list them and gather the secret that includes cluster_name-ca-secret-
322+
secret_name = get_secret_name(cluster_name, namespace, v1)
323+
secret = v1.read_namespaced_secret(secret_name, namespace).data
324+
298325
ca_cert = secret.get(&#34;ca.crt&#34;)
299326
ca_key = secret.get(&#34;ca.key&#34;)
300327

@@ -363,6 +390,33 @@ <h2 class="section-title" id="header-functions">Functions</h2>
363390
f.write(tls_cert.public_bytes(serialization.Encoding.PEM).decode(&#34;utf-8&#34;))</code></pre>
364391
</details>
365392
</dd>
393+
<dt id="codeflare_sdk.utils.generate_cert.get_secret_name"><code class="name flex">
394+
<span>def <span class="ident">get_secret_name</span></span>(<span>cluster_name, namespace, api_instance)</span>
395+
</code></dt>
396+
<dd>
397+
<div class="desc"></div>
398+
<details class="source">
399+
<summary>
400+
<span>Expand source code</span>
401+
</summary>
402+
<pre><code class="python">def get_secret_name(cluster_name, namespace, api_instance):
403+
label_selector = f&#34;ray.openshift.ai/cluster-name={cluster_name}&#34;
404+
try:
405+
secrets = api_instance.list_namespaced_secret(
406+
namespace, label_selector=label_selector
407+
)
408+
for secret in secrets.items:
409+
if (
410+
f&#34;{cluster_name}-ca-secret-&#34; in secret.metadata.name
411+
): # Oauth secret share the same label this conditional is to make things more specific
412+
return secret.metadata.name
413+
else:
414+
continue
415+
raise KeyError(f&#34;Unable to gather secret name for {cluster_name}&#34;)
416+
except Exception as e: # pragma: no cover
417+
return _kube_api_error_handling(e)</code></pre>
418+
</details>
419+
</dd>
366420
</dl>
367421
</section>
368422
<section>
@@ -384,6 +438,7 @@ <h1>Index</h1>
384438
<li><code><a title="codeflare_sdk.utils.generate_cert.export_env" href="#codeflare_sdk.utils.generate_cert.export_env">export_env</a></code></li>
385439
<li><code><a title="codeflare_sdk.utils.generate_cert.generate_ca_cert" href="#codeflare_sdk.utils.generate_cert.generate_ca_cert">generate_ca_cert</a></code></li>
386440
<li><code><a title="codeflare_sdk.utils.generate_cert.generate_tls_cert" href="#codeflare_sdk.utils.generate_cert.generate_tls_cert">generate_tls_cert</a></code></li>
441+
<li><code><a title="codeflare_sdk.utils.generate_cert.get_secret_name" href="#codeflare_sdk.utils.generate_cert.get_secret_name">get_secret_name</a></code></li>
387442
</ul>
388443
</li>
389444
</ul>

src/codeflare_sdk/utils/generate_cert.py

+24-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import datetime
2222
from ..cluster.auth import config_check, api_config_handler
2323
from kubernetes import client, config
24+
from .kube_api_helpers import _kube_api_error_handling
2425

2526

2627
def generate_ca_cert(days: int = 30):
@@ -74,6 +75,24 @@ def generate_ca_cert(days: int = 30):
7475
return key, certificate
7576

7677

78+
def get_secret_name(cluster_name, namespace, api_instance):
79+
label_selector = f"ray.openshift.ai/cluster-name={cluster_name}"
80+
try:
81+
secrets = api_instance.list_namespaced_secret(
82+
namespace, label_selector=label_selector
83+
)
84+
for secret in secrets.items:
85+
if (
86+
f"{cluster_name}-ca-secret-" in secret.metadata.name
87+
): # Oauth secret share the same label this conditional is to make things more specific
88+
return secret.metadata.name
89+
else:
90+
continue
91+
raise KeyError(f"Unable to gather secret name for {cluster_name}")
92+
except Exception as e: # pragma: no cover
93+
return _kube_api_error_handling(e)
94+
95+
7796
def generate_tls_cert(cluster_name, namespace, days=30):
7897
# Create a folder tls-<cluster>-<namespace> and store three files: ca.crt, tls.crt, and tls.key
7998
tls_dir = os.path.join(os.getcwd(), f"tls-{cluster_name}-{namespace}")
@@ -85,7 +104,11 @@ def generate_tls_cert(cluster_name, namespace, days=30):
85104
# oc get secret ca-secret-<cluster-name> -o template='{{index .data "ca.crt"}}'|base64 -d > ${TLSDIR}/ca.crt
86105
config_check()
87106
v1 = client.CoreV1Api(api_config_handler())
88-
secret = v1.read_namespaced_secret(f"ca-secret-{cluster_name}", namespace).data
107+
108+
# Secrets have a suffix appended to the end so we must list them and gather the secret that includes cluster_name-ca-secret-
109+
secret_name = get_secret_name(cluster_name, namespace, v1)
110+
secret = v1.read_namespaced_secret(secret_name, namespace).data
111+
89112
ca_cert = secret.get("ca.crt")
90113
ca_key = secret.get("ca.key")
91114

tests/unit_test.py

+4
Original file line numberDiff line numberDiff line change
@@ -2619,6 +2619,10 @@ def test_generate_tls_cert(mocker):
26192619
test the function codeflare_sdk.utils.generate_ca_cert generates the correct outputs
26202620
"""
26212621
mocker.patch("kubernetes.config.load_kube_config", return_value="ignore")
2622+
mocker.patch(
2623+
"codeflare_sdk.utils.generate_cert.get_secret_name",
2624+
return_value="ca-secret-cluster",
2625+
)
26222626
mocker.patch(
26232627
"kubernetes.client.CoreV1Api.read_namespaced_secret",
26242628
side_effect=secret_ca_retreival,

0 commit comments

Comments
 (0)