namespace: str = 'kube-system',
reuse_cluster_uuid=None
) -> (str, bool):
+ """
+ It prepares a given K8s cluster environment to run Charts on both sides:
+ client (OSM)
+ server (Tiller)
+
+ :param k8s_creds: credentials to access a given K8s cluster, i.e. a valid '.kube/config'
+ :param namespace: optional namespace to be used for helm. By default, 'kube-system' will be used
+ :param reuse_cluster_uuid: existing cluster uuid for reuse
+ :return: uuid of the K8s cluster and True if connector has installed some software in the cluster
+ (on error, an exception will be raised)
+ """
cluster_uuid = reuse_cluster_uuid
if not cluster_uuid:
atomic: bool = True,
timeout: float = 300,
params: dict = None,
- db_dict: dict = None
+ db_dict: dict = None,
+ kdu_name: str = None
):
self.debug('installing {} in cluster {}'.format(kdu_model, cluster_uuid))
if result is not None:
# instance already exists: generate a new one
kdu_instance = None
- except Exception as e:
- kdu_instance = None
+ except K8sException:
+ pass
# helm repo install
command = '{} install {} --output yaml --kubeconfig={} --home={} {} {} --name={} {} {}'\
def _generate_release_name(
chart_name: str
):
+ # check embeded chart (file or dir)
+ if chart_name.startswith('/'):
+ # extract file or directory name
+ chart_name = chart_name[chart_name.rfind('/')+1:]
+ # check URL
+ elif '://' in chart_name:
+ # extract last portion of URL
+ chart_name = chart_name[chart_name.rfind('/')+1:]
+
name = ''
for c in chart_name:
if c.isalpha() or c.isnumeric():
self.debug('Return code: {}'.format(return_code))
if raise_exception_on_error and return_code != 0:
- raise Exception(output)
+ raise K8sException(output)
if encode_utf8:
output = output.encode('utf-8').strip()
return output, return_code
+ except K8sException:
+ raise
except Exception as e:
msg = 'Exception executing command: {} -> {}'.format(command, e)
- if show_error_log:
- self.error(msg)
- return '', -1
+ self.error(msg)
+ if raise_exception_on_error:
+ raise K8sException(e) from e
+ else:
+ return '', -1
def _remote_exec(
self,