Skip to content

Commit ad5f592

Browse files
committed
allow providing addons at cluster creation
Signed-off-by: Chris Snow <[email protected]>
1 parent 7c56d23 commit ad5f592

File tree

2 files changed

+35
-8
lines changed

2 files changed

+35
-8
lines changed

bin/cli.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -735,6 +735,7 @@ def create(
735735
pod_dns_domain="cluster.local",
736736
persistent_storage_local=False,
737737
persistent_storage_nimble_csi=False,
738+
addons=[],
738739
):
739740
"""Create a K8s Cluster.
740741
@@ -750,7 +751,10 @@ def create(
750751
:param pod_dns_domain: the pod dns domain, default='cluster.local'
751752
:param persistent_storage_local: True/False
752753
:param persistent_storage_nimble_csi: True/False
754+
:param addons: list of required addons. See:
755+
`hpecp k8scluster get-available-addons`
753756
"""
757+
754758
host_config = [
755759
K8sClusterHostConfig.create_from_list(h.split(":"))
756760
for h in k8shosts_config.split(",")
@@ -767,6 +771,7 @@ def create(
767771
persistent_storage_local=persistent_storage_local,
768772
persistent_storage_nimble_csi=persistent_storage_nimble_csi,
769773
k8shosts_config=host_config,
774+
addons=addons,
770775
)
771776
)
772777

@@ -804,14 +809,25 @@ def dashboard_token(
804809
else:
805810
print(base64.b64decode(token.encode()).decode("utf-8"))
806811

807-
def get_installed_addons(self, id):
812+
def get_installed_addons(self, id, k8s_version):
808813
"""Retrieve the installed addons on the cluster.
809814
810-
:param id: the cluster ID
815+
:param id: get available addons for a specific cluster (opt)
816+
:param k8s_version: get available addons for a cluster version (opt)
811817
"""
818+
if id is not None or k8s_version is not None:
819+
print(
820+
"Either 'id' or 'k8s_version' parameter must be provided",
821+
file=sys.stdout,
822+
)
823+
if id is None or k8s_version is None:
824+
print(
825+
"Either 'id' or 'k8s_version' parameter must be provided",
826+
file=sys.stdout,
827+
)
812828
print(get_client().k8s_cluster.get(id=id).addons)
813829

814-
def get_available_addons(self, id):
830+
def get_available_addons(self, id, k8s_version):
815831
"""Retrieve the available addons for a cluster.
816832
817833
:param id: the cluster ID

hpecp/k8s_cluster.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,7 @@ def create(
290290
persistent_storage_local=False,
291291
persistent_storage_nimble_csi=False,
292292
k8shosts_config=[],
293+
addons=[],
293294
):
294295
"""Send an API request to create a K8s Cluster. The cluster creation
295296
will be asynchronous - use the :py:meth:`wait_for_status` method to
@@ -310,6 +311,8 @@ def create(
310311
pod_network_range: str
311312
Network range to be used for kubernetes pods. Defaults to
312313
`10.192.0.0/12`
314+
addons: list
315+
Addons - See :py:method:`get_available_addons`.
313316
service_network_range: str
314317
Network range to be used for kubernetes services that are
315318
exposed with Cluster IP. Defaults to `10.96.0.0/12`
@@ -371,12 +374,14 @@ def create(
371374
"'k8shosts_config' item '{}' is not of"
372375
" type K8sClusterHostConfig"
373376
).format(i)
377+
assert isinstance(addons, list), "'addons' must be a list"
374378

375379
data = {
376380
"label": {"name": name},
377381
"pod_network_range": pod_network_range,
378382
"service_network_range": service_network_range,
379383
"pod_dns_domain": pod_dns_domain,
384+
"addons": addons,
380385
"persistent_storage": {
381386
"local": persistent_storage_local,
382387
"nimble_csi": persistent_storage_nimble_csi,
@@ -428,7 +433,7 @@ def k8s_supported_versions(self):
428433
)
429434
return response.json()["supported_versions"]
430435

431-
def get_available_addons(self, id):
436+
def get_available_addons(self, id=None, k8s_version=None):
432437
"""Retrieve list of K8S Supported Versions.
433438
434439
Parameters
@@ -445,14 +450,20 @@ def get_available_addons(self, id):
445450
------
446451
APIException
447452
"""
448-
current_cluster_k8s_version = self.get(id).k8s_version
453+
assert (
454+
id is not None or k8s_version is not None
455+
), "Either 'id' or 'k8s_version' parameter must be provided"
456+
assert (
457+
id is None or k8s_version is None
458+
), "Either 'id' or 'k8s_version' parameter must be provided"
459+
460+
if id:
461+
k8s_version = self.get(id).k8s_version
449462

450463
response = self.client._request(
451464
url="/api/v2/k8smanifest",
452465
http_method="get",
453466
description="k8s_cluster/get_available_addons",
454467
)
455-
addons = response.json()["version_info"][current_cluster_k8s_version][
456-
"addons"
457-
]
468+
addons = response.json()["version_info"][k8s_version]["addons"]
458469
return addons

0 commit comments

Comments
 (0)