From db687950dbd89c2c173d60aaafdaeaef6ffbe928 Mon Sep 17 00:00:00 2001 From: David Parker Date: Thu, 17 Jul 2025 17:22:05 +0100 Subject: [PATCH 01/11] [major] AI Broker / AI Service cleanup --- .../devops/data/catalogs/v9-250624-amd64.yaml | 5 +- src/mas/devops/tekton.py | 2 +- .../pipelinerun-aiservice-install.yml.j2 | 250 +++++++++--------- .../templates/pipelinerun-install.yml.j2 | 105 +------- 4 files changed, 136 insertions(+), 226 deletions(-) diff --git a/src/mas/devops/data/catalogs/v9-250624-amd64.yaml b/src/mas/devops/data/catalogs/v9-250624-amd64.yaml index f160994..4cb35f0 100644 --- a/src/mas/devops/data/catalogs/v9-250624-amd64.yaml +++ b/src/mas/devops/data/catalogs/v9-250624-amd64.yaml @@ -93,9 +93,10 @@ mas_facilities_version: 9.0.x: "" # Not Supported 8.10.x: "" # Not Supported 8.11.x: "" # Not Supported -mas_aibroker_version: + +aiservice_version: 9.1.x: 9.1.0 - 9.0.x: 9.0.6 + # Extra Images for UDS # ------------------------------------------------------------------------------ uds_extras_version: 1.5.0 diff --git a/src/mas/devops/tekton.py b/src/mas/devops/tekton.py index 5f0bf48..916fb62 100644 --- a/src/mas/devops/tekton.py +++ b/src/mas/devops/tekton.py @@ -406,7 +406,7 @@ def launchInstallPipelineForAiservice(dynClient: DynamicClient, params: dict) -> """ Create a PipelineRun to install the Aiservice """ - instanceId = params["aibroker_instance_id"] + instanceId = params["aiservice_instance_id"] namespace = f"mas-{instanceId}-pipelines" timestamp = launchPipelineRun(dynClient, namespace, "pipelinerun-aiservice-install", params) diff --git a/src/mas/devops/templates/pipelinerun-aiservice-install.yml.j2 b/src/mas/devops/templates/pipelinerun-aiservice-install.yml.j2 index 3a0805b..f692c40 100644 --- a/src/mas/devops/templates/pipelinerun-aiservice-install.yml.j2 +++ b/src/mas/devops/templates/pipelinerun-aiservice-install.yml.j2 @@ -2,7 +2,7 @@ apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: - name: "{{aibroker_instance_id}}-install-{{ timestamp }}" + name: "{{aiservice_instance_id}}-install-{{ timestamp }}" labels: tekton.dev/pipeline: aiservice-install spec: @@ -250,8 +250,8 @@ spec: # Common params # ------------------------------------------------------------------------- - - name: aibroker_instance_id - value: "{{ aibroker_instance_id }}" + - name: aiservice_instance_id + value: "{{ aiservice_instance_id }}" - name: mas_icr_cp value: "{{ mas_icr_cp }}" - name: mas_icr_cpopen @@ -283,42 +283,42 @@ spec: value: "{{ install_dro_aiservice }}" - name: install_db2_aiservice value: "{{ install_db2_aiservice }}" - - name: mas_aibroker_dro_secret_name - value: "{{ mas_aibroker_dro_secret_name }}" - - name: mas_aibroker_dro_api_key - value: "{{ mas_aibroker_dro_api_key }}" - - name: mas_aibroker_dro_url - value: "{{ mas_aibroker_dro_url }}" - - name: mas_aibroker_dro_ca_cert - value: "{{ mas_aibroker_dro_ca_cert }}" - - name: mas_aibroker_db2_username - value: "{{ mas_aibroker_db2_username }}" - - name: mas_aibroker_db2_password - value: "{{ mas_aibroker_db2_password }}" - - name: mas_aibroker_db2_jdbc_url - value: "{{ mas_aibroker_db2_jdbc_url }}" - - name: mas_aibroker_db2_ssl_enabled - value: "{{ mas_aibroker_db2_ssl_enabled }}" - - name: mas_aibroker_db2_ca_cert - value: "{{ mas_aibroker_db2_ca_cert }}" - - name: mas_aibroker_sls_secret_name - value: "{{ mas_aibroker_sls_secret_name }}" - - name: mas_aibroker_sls_registration_key - value: "{{ mas_aibroker_sls_registration_key }}" - - name: mas_aibroker_sls_url - value: "{{ mas_aibroker_sls_url }}" - - name: mas_aibroker_sls_ca_cert - value: "{{ mas_aibroker_sls_ca_cert }}" + - name: aiservice_dro_secret_name + value: "{{ aiservice_dro_secret_name }}" + - name: aiservice_dro_api_key + value: "{{ aiservice_dro_api_key }}" + - name: aiservice_dro_url + value: "{{ aiservice_dro_url }}" + - name: aiservice_dro_ca_cert + value: "{{ aiservice_dro_ca_cert }}" + - name: aiservice_db2_username + value: "{{ aiservice_db2_username }}" + - name: aiservice_db2_password + value: "{{ aiservice_db2_password }}" + - name: aiservice_db2_jdbc_url + value: "{{ aiservice_db2_jdbc_url }}" + - name: aiservice_db2_ssl_enabled + value: "{{ aiservice_db2_ssl_enabled }}" + - name: aiservice_db2_ca_cert + value: "{{ aiservice_db2_ca_cert }}" + - name: aiservice_sls_secret_name + value: "{{ aiservice_sls_secret_name }}" + - name: aiservice_sls_registration_key + value: "{{ aiservice_sls_registration_key }}" + - name: aiservice_sls_url + value: "{{ aiservice_sls_url }}" + - name: aiservice_sls_ca_cert + value: "{{ aiservice_sls_ca_cert }}" - name: environment_type value: "{{ environment_type }}" {%- if install_db2_aiservice is defined and install_db2_aiservice == "false" %} - - name: db2_action_aibroker + - name: db2_action_aiservice value: "not_install" {%- endif %} - # AI Broker Tenant + # AI Service Tenant # ------------------------------------------------------------------------- - name: tenant_entitlement_type value: "{{ tenant_entitlement_type }}" @@ -326,122 +326,122 @@ spec: value: "{{ tenant_entitlement_start_date }}" - name: tenant_entitlement_end_date value: "{{ tenant_entitlement_end_date }}" - - name: mas_aibroker_tenant_s3_bucket_prefix - value: "{{ mas_aibroker_tenant_s3_bucket_prefix }}" - - name: mas_aibroker_tenant_s3_region - value: "{{ mas_aibroker_tenant_s3_region }}" - - name: mas_aibroker_tenant_s3_endpoint_url - value: "{{ mas_aibroker_tenant_s3_endpoint_url }}" - - name: mas_aibroker_tenant_s3_access_key - value: "{{ mas_aibroker_tenant_s3_access_key }}" - - name: mas_aibroker_tenant_s3_secret_key - value: "{{ mas_aibroker_tenant_s3_secret_key }}" + - name: aiservice_tenant_s3_bucket_prefix + value: "{{ aiservice_tenant_s3_bucket_prefix }}" + - name: aiservice_tenant_s3_region + value: "{{ aiservice_tenant_s3_region }}" + - name: aiservice_tenant_s3_endpoint_url + value: "{{ aiservice_tenant_s3_endpoint_url }}" + - name: aiservice_tenant_s3_access_key + value: "{{ aiservice_tenant_s3_access_key }}" + - name: aiservice_tenant_s3_secret_key + value: "{{ aiservice_tenant_s3_secret_key }}" - name: rsl_url value: "{{ rsl_url }}" - name: rsl_org_id value: "{{ rsl_org_id }}" - name: rsl_token value: "{{ rsl_token }}" - - name: mas_aibroker_s3_bucket_prefix - value: "{{ mas_aibroker_s3_bucket_prefix }}" - - name: mas_aibroker_s3_region - value: "{{ mas_aibroker_s3_region }}" - - name: mas_aibroker_s3_endpoint_url - value: "{{ mas_aibroker_s3_endpoint_url }}" - + - name: aiservice_s3_bucket_prefix + value: "{{ aiservice_s3_bucket_prefix }}" + - name: aiservice_s3_region + value: "{{ aiservice_s3_region }}" + - name: aiservice_s3_endpoint_url + value: "{{ aiservice_s3_endpoint_url }}" + {%- endif %} -{%- if mas_aibroker_storage_provider is defined and mas_aibroker_storage_provider != "" %} - - # AI Broker - OpenData Hub Storage - # ------------------------------------------------------------------------- - - name: mas_aibroker_storage_provider - value: "{{ mas_aibroker_storage_provider }}" - - name: mas_aibroker_storage_accesskey - value: "{{ mas_aibroker_storage_accesskey }}" - - name: mas_aibroker_storage_secretkey - value: "{{ mas_aibroker_storage_secretkey }}" - - name: mas_aibroker_storage_host - value: "{{ mas_aibroker_storage_host }}" - - name: mas_aibroker_storage_port - value: "{{ mas_aibroker_storage_port }}" - - name: mas_aibroker_storage_ssl - value: "{{ mas_aibroker_storage_ssl }}" - - name: mas_aibroker_storage_region - value: "{{ mas_aibroker_storage_region }}" - - name: mas_aibroker_storage_pipelines_bucket - value: "{{ mas_aibroker_storage_pipelines_bucket }}" - - name: mas_aibroker_storage_tenants_bucket - value: "{{ mas_aibroker_storage_tenants_bucket }}" - - name: mas_aibroker_storage_templates_bucket - value: "{{ mas_aibroker_storage_templates_bucket }}" - - name: mas_aibroker_tenant_name - value: "{{ mas_aibroker_tenant_name }}" +{%- if aiservice_storage_provider is defined and aiservice_storage_provider != "" %} + + # AI Service - OpenData Hub Storage + # ------------------------------------------------------------------------- + - name: aiservice_storage_provider + value: "{{ aiservice_storage_provider }}" + - name: aiservice_storage_accesskey + value: "{{ aiservice_storage_accesskey }}" + - name: aiservice_storage_secretkey + value: "{{ aiservice_storage_secretkey }}" + - name: aiservice_storage_host + value: "{{ aiservice_storage_host }}" + - name: aiservice_storage_port + value: "{{ aiservice_storage_port }}" + - name: aiservice_storage_ssl + value: "{{ aiservice_storage_ssl }}" + - name: aiservice_storage_region + value: "{{ aiservice_storage_region }}" + - name: aiservice_storage_pipelines_bucket + value: "{{ aiservice_storage_pipelines_bucket }}" + - name: aiservice_storage_tenants_bucket + value: "{{ aiservice_storage_tenants_bucket }}" + - name: aiservice_storage_templates_bucket + value: "{{ aiservice_storage_templates_bucket }}" + - name: aiservice_tenant_name + value: "{{ aiservice_tenant_name }}" - name: minio_root_user value: "{{ minio_root_user }}" - name: minio_root_password value: "{{ minio_root_password }}" {%- endif %} -{%- if mas_aibroker_controller_tag is defined and mas_aibroker_controller_tag != "" %} - - # AI Broker - KModels Tags - # ------------------------------------------------------------------------- - - name: mas_aibroker_controller_tag - value: "{{ mas_aibroker_controller_tag }}" - - name: mas_aibroker_store_tag - value: "{{ mas_aibroker_store_tag }}" - - name: mas_aibroker_watcher_tag - value: "{{ mas_aibroker_watcher_tag }}" - - name: mas_aibroker_connector_tag - value: "{{ mas_aibroker_connector_tag }}" - - name: mas_aibroker_pipeline_steps_tag - value: "{{ mas_aibroker_pipeline_steps_tag }}" +{%- if aiservice_controller_tag is defined and aiservice_controller_tag != "" %} + + # AI Service - KModels Tags + # ------------------------------------------------------------------------- + - name: aiservice_controller_tag + value: "{{ aiservice_controller_tag }}" + - name: aiservice_store_tag + value: "{{ aiservice_store_tag }}" + - name: aiservice_watcher_tag + value: "{{ aiservice_watcher_tag }}" + - name: aiservice_connector_tag + value: "{{ aiservice_connector_tag }}" + - name: aiservice_pipeline_steps_tag + value: "{{ aiservice_pipeline_steps_tag }}" {%- endif %} -{%- if mas_aibroker_watsonxai_apikey is defined and mas_aibroker_watsonxai_apikey != "" %} - - # AI Broker - watsonX - # ------------------------------------------------------------------------- - - name: mas_aibroker_watsonxai_apikey - value: "{{ mas_aibroker_watsonxai_apikey }}" - - name: mas_aibroker_watsonxai_url - value: "{{ mas_aibroker_watsonxai_url }}" - - name: mas_aibroker_watsonxai_project_id - value: "{{ mas_aibroker_watsonxai_project_id }}" - - name: mas_aibroker_watsonx_action - value: "{{ mas_aibroker_watsonx_action }}" +{%- if aiservice_watsonxai_apikey is defined and aiservice_watsonxai_apikey != "" %} + + # AI Service - watsonX + # ------------------------------------------------------------------------- + - name: aiservice_watsonxai_apikey + value: "{{ aiservice_watsonxai_apikey }}" + - name: aiservice_watsonxai_url + value: "{{ aiservice_watsonxai_url }}" + - name: aiservice_watsonxai_project_id + value: "{{ aiservice_watsonxai_project_id }}" + - name: aiservice_watsonx_action + value: "{{ aiservice_watsonx_action }}" {%- endif %} -{%- if mas_aibroker_s3_action is defined and mas_aibroker_s3_action != "" %} +{%- if aiservice_s3_action is defined and aiservice_s3_action != "" %} - # AI Broker - S3 + # AI Service - S3 # ------------------------------------------------------------------------- - - name: mas_aibroker_s3_action - value: "{{ mas_aibroker_s3_action }}" - - name: mas_aibroker_apikey_action - value: "{{ mas_aibroker_apikey_action }}" + - name: aiservice_s3_action + value: "{{ aiservice_s3_action }}" + - name: aiservice_apikey_action + value: "{{ aiservice_apikey_action }}" {%- endif %} -{%- if mas_aibroker_db_host is defined and mas_aibroker_db_host != "" %} - - # AI Broker - Database (DataSciencePipelinesApplication) - # ------------------------------------------------------------------------- - - name: mas_aibroker_db_host - value: "{{ mas_aibroker_db_host }}" - - name: mas_aibroker_db_port - value: "{{ mas_aibroker_db_port }}" - - name: mas_aibroker_db_user - value: "{{ mas_aibroker_db_user }}" - - name: mas_aibroker_db_database - value: "{{ mas_aibroker_db_database }}" - - name: mas_aibroker_db_secret_name - value: "{{ mas_aibroker_db_secret_name }}" - - name: mas_aibroker_db_secret_key - value: "{{ mas_aibroker_db_secret_key }}" - - name: mas_aibroker_db_secret_value - value: "{{ mas_aibroker_db_secret_value }}" +{%- if aiservice_db_host is defined and aiservice_db_host != "" %} + + # AI Service - Database (DataSciencePipelinesApplication) + # ------------------------------------------------------------------------- + - name: aiservice_db_host + value: "{{ aiservice_db_host }}" + - name: aiservice_db_port + value: "{{ aiservice_db_port }}" + - name: aiservice_db_user + value: "{{ aiservice_db_user }}" + - name: aiservice_db_database + value: "{{ aiservice_db_database }}" + - name: aiservice_db_secret_name + value: "{{ aiservice_db_secret_name }}" + - name: aiservice_db_secret_key + value: "{{ aiservice_db_secret_key }}" + - name: aiservice_db_secret_value + value: "{{ aiservice_db_secret_value }}" - name: mariadb_user value: "{{ mariadb_user }}" - name: mariadb_password value: "{{ mariadb_password }}" - + {%- endif %} workspaces: diff --git a/src/mas/devops/templates/pipelinerun-install.yml.j2 b/src/mas/devops/templates/pipelinerun-install.yml.j2 index 2ec392b..775eb49 100644 --- a/src/mas/devops/templates/pipelinerun-install.yml.j2 +++ b/src/mas/devops/templates/pipelinerun-install.yml.j2 @@ -725,97 +725,6 @@ spec: - name: grafana_instance_storage_size value: "{{ grafana_instance_storage_size }}" {%- endif %} -{%- if mas_app_channel_aibroker is defined and mas_app_channel_aibroker != "" %} - - # AI Broker - # ------------------------------------------------------------------------- - - name: mas_app_channel_aibroker - value: "{{ mas_app_channel_aibroker }}" -{%- endif %} -{%- if mas_aibroker_storage_provider is defined and mas_aibroker_storage_provider != "" %} - - # AI Broker - OpenData Hub Storage - # ------------------------------------------------------------------------- - - name: mas_aibroker_storage_provider - value: "{{ mas_aibroker_storage_provider }}" - - name: mas_aibroker_storage_accesskey - value: "{{ mas_aibroker_storage_accesskey }}" - - name: mas_aibroker_storage_secretkey - value: "{{ mas_aibroker_storage_secretkey }}" - - name: mas_aibroker_storage_host - value: "{{ mas_aibroker_storage_host }}" - - name: mas_aibroker_storage_port - value: "{{ mas_aibroker_storage_port }}" - - name: mas_aibroker_storage_ssl - value: "{{ mas_aibroker_storage_ssl }}" - - name: mas_aibroker_storage_region - value: "{{ mas_aibroker_storage_region }}" - - name: mas_aibroker_storage_pipelines_bucket - value: "{{ mas_aibroker_storage_pipelines_bucket }}" - - name: mas_aibroker_storage_tenants_bucket - value: "{{ mas_aibroker_storage_tenants_bucket }}" - - name: mas_aibroker_storage_templates_bucket - value: "{{ mas_aibroker_storage_templates_bucket }}" - - name: mas_aibroker_tenant_name - value: "{{ mas_aibroker_tenant_name }}" -{%- endif %} -{%- if mas_aibroker_controller_tag is defined and mas_aibroker_controller_tag != "" %} - - # AI Broker - KModels Tags - # ------------------------------------------------------------------------- - - name: mas_aibroker_controller_tag - value: "{{ mas_aibroker_controller_tag }}" - - name: mas_aibroker_store_tag - value: "{{ mas_aibroker_store_tag }}" - - name: mas_aibroker_watcher_tag - value: "{{ mas_aibroker_watcher_tag }}" - - name: mas_aibroker_connector_tag - value: "{{ mas_aibroker_connector_tag }}" - - name: mas_aibroker_pipeline_steps_tag - value: "{{ mas_aibroker_pipeline_steps_tag }}" -{%- endif %} -{%- if mas_aibroker_watsonxai_apikey is defined and mas_aibroker_watsonxai_apikey != "" %} - - # AI Broker - watsonX - # ------------------------------------------------------------------------- - - name: mas_aibroker_watsonxai_apikey - value: "{{ mas_aibroker_watsonxai_apikey }}" - - name: mas_aibroker_watsonxai_url - value: "{{ mas_aibroker_watsonxai_url }}" - - name: mas_aibroker_watsonxai_project_id - value: "{{ mas_aibroker_watsonxai_project_id }}" - - name: mas_aibroker_watsonx_action - value: "{{ mas_aibroker_watsonx_action }}" -{%- endif %} -{%- if mas_aibroker_s3_action is defined and mas_aibroker_s3_action != "" %} - - # AI Broker - S3 - # ------------------------------------------------------------------------- - - name: mas_aibroker_s3_action - value: "{{ mas_aibroker_s3_action }}" - - name: mas_aibroker_apikey_action - value: "{{ mas_aibroker_apikey_action }}" -{%- endif %} -{%- if mas_aibroker_db_host is defined and mas_aibroker_db_host != "" %} - - # AI Broker - Database (DataSciencePipelinesApplication) - # ------------------------------------------------------------------------- - - name: mas_aibroker_db_host - value: "{{ mas_aibroker_db_host }}" - - name: mas_aibroker_db_port - value: "{{ mas_aibroker_db_port }}" - - name: mas_aibroker_db_user - value: "{{ mas_aibroker_db_user }}" - - name: mas_aibroker_db_database - value: "{{ mas_aibroker_db_database }}" - - name: mas_aibroker_db_secret_name - value: "{{ mas_aibroker_db_secret_name }}" - - name: mas_aibroker_db_secret_key - value: "{{ mas_aibroker_db_secret_key }}" - - name: mas_aibroker_db_secret_value - value: "{{ mas_aibroker_db_secret_value }}" -{%- endif %} - {%- if mas_app_channel_facilities is defined and mas_app_channel_facilities != "" %} # Real Estate anda Facilities Application @@ -823,35 +732,35 @@ spec: - name: mas_app_channel_facilities value: "{{ mas_app_channel_facilities }}" -{%- if mas_ws_facilities_size is defined and mas_ws_facilities_size != "" %} +{%- if mas_ws_facilities_size is defined and mas_ws_facilities_size != "" %} - name: mas_ws_facilities_size value: "{{ mas_ws_facilities_size }}" {%- endif %} -{%- if mas_ws_facilities_routes_timeout is defined and mas_ws_facilities_routes_timeout != "" %} +{%- if mas_ws_facilities_routes_timeout is defined and mas_ws_facilities_routes_timeout != "" %} - name: mas_ws_facilities_routes_timeout value: "{{ mas_ws_facilities_routes_timeout }}" {%- endif %} -{%- if mas_ws_facilities_liberty_extension_XML is defined and mas_ws_facilities_liberty_extension_XML != "" %} +{%- if mas_ws_facilities_liberty_extension_XML is defined and mas_ws_facilities_liberty_extension_XML != "" %} - name: mas_ws_facilities_liberty_extension_XML value: "{{ mas_ws_facilities_liberty_extension_XML }}" {%- endif %} -{%- if mas_ws_facilities_vault_secret is defined and mas_ws_facilities_vault_secret != "" %} +{%- if mas_ws_facilities_vault_secret is defined and mas_ws_facilities_vault_secret != "" %} - name: mas_ws_facilities_vault_secret value: "{{ mas_ws_facilities_vault_secret }}" {%- endif %} -{%- if mas_ws_facilities_pull_policy is defined and mas_ws_facilities_pull_policy != "" %} +{%- if mas_ws_facilities_pull_policy is defined and mas_ws_facilities_pull_policy != "" %} - name: mas_ws_facilities_pull_policy value: "{{ mas_ws_facilities_pull_policy }}" {%- endif %} - name: mas_ws_facilities_storage_log_class value: "{{ mas_ws_facilities_storage_log_class }}" -{%- if mas_ws_facilities_storage_log_mode is defined and mas_ws_facilities_storage_log_mode != "" %} +{%- if mas_ws_facilities_storage_log_mode is defined and mas_ws_facilities_storage_log_mode != "" %} - name: mas_ws_facilities_storage_log_mode value: "{{ mas_ws_facilities_storage_log_mode }}" {%- endif %} - name: mas_ws_facilities_storage_userfiles_class value: "{{ mas_ws_facilities_storage_userfiles_class }}" -{%- if mas_ws_facilities_storage_userfiles_mode is defined and mas_ws_facilities_storage_userfiles_mode != "" %} +{%- if mas_ws_facilities_storage_userfiles_mode is defined and mas_ws_facilities_storage_userfiles_mode != "" %} - name: mas_ws_facilities_storage_userfiles_mode value: "{{ mas_ws_facilities_storage_userfiles_mode }}" {%- endif %} From 3dec373cc1db3c60f687e8459f936a6bceb401c0 Mon Sep 17 00:00:00 2001 From: David Parker Date: Fri, 18 Jul 2025 09:29:06 +0100 Subject: [PATCH 02/11] Update tekton.py --- src/mas/devops/tekton.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mas/devops/tekton.py b/src/mas/devops/tekton.py index 916fb62..02144a3 100644 --- a/src/mas/devops/tekton.py +++ b/src/mas/devops/tekton.py @@ -407,10 +407,10 @@ def launchInstallPipelineForAiservice(dynClient: DynamicClient, params: dict) -> Create a PipelineRun to install the Aiservice """ instanceId = params["aiservice_instance_id"] - namespace = f"mas-{instanceId}-pipelines" + namespace = f"aiservice-{instanceId}-pipelines" timestamp = launchPipelineRun(dynClient, namespace, "pipelinerun-aiservice-install", params) - pipelineURL = f"{getConsoleURL(dynClient)}/k8s/ns/mas-{instanceId}-pipelines/tekton.dev~v1beta1~PipelineRun/{instanceId}-install-{timestamp}" + pipelineURL = f"{getConsoleURL(dynClient)}/k8s/ns/aiservice-{instanceId}-pipelines/tekton.dev~v1beta1~PipelineRun/{instanceId}-install-{timestamp}" return pipelineURL From 630c0c60a39fdb8a83e7c60d54c342e39a65886a Mon Sep 17 00:00:00 2001 From: David Parker Date: Fri, 18 Jul 2025 14:50:47 +0100 Subject: [PATCH 03/11] Update aiservice pipeline setup --- src/mas/devops/tekton.py | 65 +++++++++++++++---- .../templates/aiservice-pipelines-pvc.yml.j2 | 15 +++++ .../templates/aiservice-pipelines-rbac.yml.j2 | 14 ++++ 3 files changed, 81 insertions(+), 13 deletions(-) create mode 100644 src/mas/devops/templates/aiservice-pipelines-pvc.yml.j2 create mode 100644 src/mas/devops/templates/aiservice-pipelines-rbac.yml.j2 diff --git a/src/mas/devops/tekton.py b/src/mas/devops/tekton.py index 02144a3..cdd4551 100644 --- a/src/mas/devops/tekton.py +++ b/src/mas/devops/tekton.py @@ -170,8 +170,47 @@ def preparePipelinesNamespace(dynClient: DynamicClient, instanceId: str = None, sleep(15) -def prepareInstallSecrets(dynClient: DynamicClient, instanceId: str, slsLicenseFile: str = None, additionalConfigs: dict = None, certs: str = None, podTemplates: str = None) -> None: - namespace = f"mas-{instanceId}-pipelines" +def prepareAiServicePipelinesNamespace(dynClient: DynamicClient, instanceId: str = None, storageClass: str = None, accessMode: str = None, waitForBind: bool = True, configureRBAC: bool = True): + templateDir = path.join(path.abspath(path.dirname(__file__)), "templates") + env = Environment( + loader=FileSystemLoader(searchpath=templateDir) + ) + namespace = f"aiservice-{instanceId}-pipelines" + template = env.get_template("pipelines-rbac.yml.j2") + + if configureRBAC: + # Create RBAC + renderedTemplate = template.render(mas_instance_id=instanceId) + logger.debug(renderedTemplate) + crb = yaml.safe_load(renderedTemplate) + clusterRoleBindingAPI = dynClient.resources.get(api_version="rbac.authorization.k8s.io/v1", kind="ClusterRoleBinding") + clusterRoleBindingAPI.apply(body=crb, namespace=namespace) + + template = env.get_template("aiservice-pipelines-pvc.yml.j2") + renderedTemplate = template.render( + aiservice_instance_id=instanceId, + pipeline_storage_class=storageClass, + pipeline_storage_accessmode=accessMode + ) + logger.debug(renderedTemplate) + pvc = yaml.safe_load(renderedTemplate) + pvcAPI = dynClient.resources.get(api_version="v1", kind="PersistentVolumeClaim") + pvcAPI.apply(body=pvc, namespace=namespace) + + if waitForBind: + logger.debug("Waiting for PVC to be bound") + pvcIsBound = False + while not pvcIsBound: + configPVC = pvcAPI.get(name="config-pvc", namespace=namespace) + if configPVC.status.phase == "Bound": + pvcIsBound = True + else: + logger.debug("Waiting 15s before checking status of PVC again") + logger.debug(configPVC) + sleep(15) + + +def prepareInstallSecrets(dynClient: DynamicClient, namespace: str, slsLicenseFile: str = None, additionalConfigs: dict = None, certs: str = None, podTemplates: str = None) -> None: secretsAPI = dynClient.resources.get(api_version="v1", kind="Secret") # 1. Secret/pipeline-additional-configs @@ -402,24 +441,24 @@ def launchInstallPipeline(dynClient: DynamicClient, params: dict) -> str: return pipelineURL -def launchInstallPipelineForAiservice(dynClient: DynamicClient, params: dict) -> str: +def launchUpdatePipeline(dynClient: DynamicClient, params: dict) -> str: """ - Create a PipelineRun to install the Aiservice + Create a PipelineRun to update the Maximo Operator Catalog """ - instanceId = params["aiservice_instance_id"] - namespace = f"aiservice-{instanceId}-pipelines" - timestamp = launchPipelineRun(dynClient, namespace, "pipelinerun-aiservice-install", params) + namespace = "mas-pipelines" + timestamp = launchPipelineRun(dynClient, namespace, "pipelinerun-update", params) - pipelineURL = f"{getConsoleURL(dynClient)}/k8s/ns/aiservice-{instanceId}-pipelines/tekton.dev~v1beta1~PipelineRun/{instanceId}-install-{timestamp}" + pipelineURL = f"{getConsoleURL(dynClient)}/k8s/ns/mas-pipelines/tekton.dev~v1beta1~PipelineRun/mas-update-{timestamp}" return pipelineURL -def launchUpdatePipeline(dynClient: DynamicClient, params: dict) -> str: +def launchAiServiceInstallPipeline(dynClient: DynamicClient, params: dict) -> str: """ - Create a PipelineRun to update the Maximo Operator Catalog + Create a PipelineRun to install the AI Service """ - namespace = "mas-pipelines" - timestamp = launchPipelineRun(dynClient, namespace, "pipelinerun-update", params) + instanceId = params["aiservice_instance_id"] + namespace = f"aiservice-{instanceId}-pipelines" + timestamp = launchPipelineRun(dynClient, namespace, "pipelinerun-aiservice-install", params) - pipelineURL = f"{getConsoleURL(dynClient)}/k8s/ns/mas-pipelines/tekton.dev~v1beta1~PipelineRun/mas-update-{timestamp}" + pipelineURL = f"{getConsoleURL(dynClient)}/k8s/ns/aiservice-{instanceId}-pipelines/tekton.dev~v1beta1~PipelineRun/{instanceId}-install-{timestamp}" return pipelineURL diff --git a/src/mas/devops/templates/aiservice-pipelines-pvc.yml.j2 b/src/mas/devops/templates/aiservice-pipelines-pvc.yml.j2 new file mode 100644 index 0000000..3bbb7ff --- /dev/null +++ b/src/mas/devops/templates/aiservice-pipelines-pvc.yml.j2 @@ -0,0 +1,15 @@ +--- +# 1. Set up a PVC for shared storage +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: config-pvc + namespace: aiservice-{{ aiservice_instance_id }}-pipelines +spec: + accessModes: + - {{ pipeline_storage_accessmode }} + volumeMode: Filesystem + storageClassName: {{ pipeline_storage_class }} + resources: + requests: + storage: 500Mi diff --git a/src/mas/devops/templates/aiservice-pipelines-rbac.yml.j2 b/src/mas/devops/templates/aiservice-pipelines-rbac.yml.j2 new file mode 100644 index 0000000..ea81ef9 --- /dev/null +++ b/src/mas/devops/templates/aiservice-pipelines-rbac.yml.j2 @@ -0,0 +1,14 @@ +--- +# 1. Configure RBAC for the pipeline tasks +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: aiservice-pipeline-{{ aiservice_instance_id }} +subjects: + - kind: ServiceAccount + name: pipeline + namespace: aiservice-{{ aiservice_instance_id }}-pipelines +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin From 0cbe1530fe39df0a6352c28d0cea08109dfde1f4 Mon Sep 17 00:00:00 2001 From: David Parker Date: Fri, 18 Jul 2025 16:35:27 +0100 Subject: [PATCH 04/11] Update tekton.py --- src/mas/devops/tekton.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mas/devops/tekton.py b/src/mas/devops/tekton.py index cdd4551..d7d9ae0 100644 --- a/src/mas/devops/tekton.py +++ b/src/mas/devops/tekton.py @@ -176,7 +176,7 @@ def prepareAiServicePipelinesNamespace(dynClient: DynamicClient, instanceId: str loader=FileSystemLoader(searchpath=templateDir) ) namespace = f"aiservice-{instanceId}-pipelines" - template = env.get_template("pipelines-rbac.yml.j2") + template = env.get_template("aiservice-pipelines-rbac.yml.j2") if configureRBAC: # Create RBAC From ca5f354c4749be98b96219be1def5c93fd696d2a Mon Sep 17 00:00:00 2001 From: David Parker Date: Fri, 18 Jul 2025 18:36:51 +0100 Subject: [PATCH 05/11] Update tekton.py --- src/mas/devops/tekton.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mas/devops/tekton.py b/src/mas/devops/tekton.py index d7d9ae0..3b4eb1e 100644 --- a/src/mas/devops/tekton.py +++ b/src/mas/devops/tekton.py @@ -180,7 +180,7 @@ def prepareAiServicePipelinesNamespace(dynClient: DynamicClient, instanceId: str if configureRBAC: # Create RBAC - renderedTemplate = template.render(mas_instance_id=instanceId) + renderedTemplate = template.render(aiservice_instance_id=instanceId) logger.debug(renderedTemplate) crb = yaml.safe_load(renderedTemplate) clusterRoleBindingAPI = dynClient.resources.get(api_version="rbac.authorization.k8s.io/v1", kind="ClusterRoleBinding") From dcd9543352c3dd5c409a3312003b7e4a657c1bfc Mon Sep 17 00:00:00 2001 From: David Parker Date: Wed, 23 Jul 2025 00:51:28 +0100 Subject: [PATCH 06/11] Add ocp compatibility info to catalogs --- .../devops/data/catalogs/v9-250109-amd64.yaml | 5 +++++ .../devops/data/catalogs/v9-250109-s390x.yaml | 5 +++++ .../devops/data/catalogs/v9-250206-amd64.yaml | 5 +++++ .../devops/data/catalogs/v9-250206-s390x.yaml | 5 +++++ .../devops/data/catalogs/v9-250306-amd64.yaml | 5 +++++ .../devops/data/catalogs/v9-250306-s390x.yaml | 5 +++++ .../devops/data/catalogs/v9-250403-amd64.yaml | 7 ++++++- .../devops/data/catalogs/v9-250403-s390x.yaml | 5 +++++ .../devops/data/catalogs/v9-250501-amd64.yaml | 5 +++++ .../devops/data/catalogs/v9-250501-s390x.yaml | 5 +++++ .../devops/data/catalogs/v9-250624-amd64.yaml | 7 +++++++ .../devops/data/catalogs/v9-250624-ppc64le.yaml | 8 +++++++- .../devops/data/catalogs/v9-250624-s390x.yaml | 8 +++++++- src/mas/devops/ocp.py | 17 +++++++++++++++++ 14 files changed, 89 insertions(+), 3 deletions(-) diff --git a/src/mas/devops/data/catalogs/v9-250109-amd64.yaml b/src/mas/devops/data/catalogs/v9-250109-amd64.yaml index b6b7113..18071f4 100644 --- a/src/mas/devops/data/catalogs/v9-250109-amd64.yaml +++ b/src/mas/devops/data/catalogs/v9-250109-amd64.yaml @@ -7,6 +7,11 @@ catalog_digest: sha256:028f32213d3f14405eda7e78aaec28411688272f3358c5a34f6ebed6cf46c4c3 +ocp_compatibility: + - 4.14 + - 4.15 + - 4.16 + # Dependencies # ----------------------------------------------------------------------------- ibm_licensing_version: 4.2.10 # Operator version 4.2.7 (https://github.com/IBM/cloud-pak/tree/master/repo/case/ibm-licensing) diff --git a/src/mas/devops/data/catalogs/v9-250109-s390x.yaml b/src/mas/devops/data/catalogs/v9-250109-s390x.yaml index a6e8a21..a4b6485 100644 --- a/src/mas/devops/data/catalogs/v9-250109-s390x.yaml +++ b/src/mas/devops/data/catalogs/v9-250109-s390x.yaml @@ -7,6 +7,11 @@ catalog_digest: sha256:82a017b04ac8f15b14719e77435e1000046e8d90c24fa7fce45421f4e289d0fd +ocp_compatibility: + - 4.14 + - 4.15 + - 4.16 + uds_version: 2.0.12 # Operator version 2.0.12 # sticking to 2.0.12 version # Please do Not Change sls_version: 3.10.3 # Updated # Operator version 3.10.0 (https://github.ibm.com/maximoappsuite/ibm-sls/releases) tsm_version: 1.6.1 # No Update # Operator version 1.5.4 (https://github.ibm.com/maximoappsuite/ibm-truststore-mgr/releases) diff --git a/src/mas/devops/data/catalogs/v9-250206-amd64.yaml b/src/mas/devops/data/catalogs/v9-250206-amd64.yaml index f4da557..9e8ac7c 100644 --- a/src/mas/devops/data/catalogs/v9-250206-amd64.yaml +++ b/src/mas/devops/data/catalogs/v9-250206-amd64.yaml @@ -7,6 +7,11 @@ catalog_digest: sha256:12ece30673a4109123e43f28a8f2d427bd37186c32d961c0dced8866886a2d4c +ocp_compatibility: + - 4.14 + - 4.15 + - 4.16 + # Dependencies # ----------------------------------------------------------------------------- ibm_licensing_version: 4.2.11 # Operator version 4.2.11 (https://github.com/IBM/cloud-pak/tree/master/repo/case/ibm-licensing) diff --git a/src/mas/devops/data/catalogs/v9-250206-s390x.yaml b/src/mas/devops/data/catalogs/v9-250206-s390x.yaml index 801e54c..86700db 100644 --- a/src/mas/devops/data/catalogs/v9-250206-s390x.yaml +++ b/src/mas/devops/data/catalogs/v9-250206-s390x.yaml @@ -7,6 +7,11 @@ catalog_digest: sha256:b9ef2ef8d16bd9bb1015d8f2597c5f4f7daadbbefab700268c914f1b07582d25 +ocp_compatibility: + - 4.14 + - 4.15 + - 4.16 + uds_version: 2.0.12 # Operator version 2.0.12 # sticking to 2.0.12 version # Please do Not Change sls_version: 3.11.0 # Updated # Operator version 3.10.0 (https://github.ibm.com/maximoappsuite/ibm-sls/releases) tsm_version: 1.6.1 # No Update # Operator version 1.5.4 (https://github.ibm.com/maximoappsuite/ibm-truststore-mgr/releases) diff --git a/src/mas/devops/data/catalogs/v9-250306-amd64.yaml b/src/mas/devops/data/catalogs/v9-250306-amd64.yaml index 3bd47b1..395e62a 100644 --- a/src/mas/devops/data/catalogs/v9-250306-amd64.yaml +++ b/src/mas/devops/data/catalogs/v9-250306-amd64.yaml @@ -7,6 +7,11 @@ catalog_digest: sha256:d2ffdec7d99dd4b0027d151b36b08b97efd58a1203bd0874fe782ad497198419 +ocp_compatibility: + - 4.14 + - 4.15 + - 4.16 + # Dependencies # ----------------------------------------------------------------------------- ibm_licensing_version: 4.2.11 # Operator version 4.2.11 (https://github.com/IBM/cloud-pak/tree/master/repo/case/ibm-licensing) diff --git a/src/mas/devops/data/catalogs/v9-250306-s390x.yaml b/src/mas/devops/data/catalogs/v9-250306-s390x.yaml index 857bc80..53e7b74 100644 --- a/src/mas/devops/data/catalogs/v9-250306-s390x.yaml +++ b/src/mas/devops/data/catalogs/v9-250306-s390x.yaml @@ -7,6 +7,11 @@ catalog_digest: sha256:a9f4a2a8aa4ec25b68ff6a1592c0773f730564a833b14eef5585a077e37c203a +ocp_compatibility: + - 4.14 + - 4.15 + - 4.16 + uds_version: 2.0.12 # Operator version 2.0.12 # sticking to 2.0.12 version # Please do Not Change sls_version: 3.11.1 # Updated # Operator version 3.10.0 (https://github.ibm.com/maximoappsuite/ibm-sls/releases) tsm_version: 1.6.1 # No Update # Operator version 1.5.4 (https://github.ibm.com/maximoappsuite/ibm-truststore-mgr/releases) diff --git a/src/mas/devops/data/catalogs/v9-250403-amd64.yaml b/src/mas/devops/data/catalogs/v9-250403-amd64.yaml index 217226d..798eee3 100644 --- a/src/mas/devops/data/catalogs/v9-250403-amd64.yaml +++ b/src/mas/devops/data/catalogs/v9-250403-amd64.yaml @@ -7,6 +7,11 @@ catalog_digest: sha256:e225b03ff1054e2b1bcef0fcc883cc8f53c7b29f472ca7d3c08cb6a6084b2ab4 +ocp_compatibility: + - 4.14 + - 4.15 + - 4.16 + # Dependencies # ----------------------------------------------------------------------------- ibm_licensing_version: 4.2.12 # Operator version 4.2.11 (https://github.com/IBM/cloud-pak/tree/master/repo/case/ibm-licensing) @@ -77,7 +82,7 @@ mas_visualinspection_version: 9.0.x: 9.0.8 # updated 8.10.x: 8.8.4 # No Update 8.11.x: 8.9.11 # updated - + # Extra Images for UDS # ------------------------------------------------------------------------------ uds_extras_version: 1.5.0 diff --git a/src/mas/devops/data/catalogs/v9-250403-s390x.yaml b/src/mas/devops/data/catalogs/v9-250403-s390x.yaml index 1f1bf0d..e9c2dc1 100644 --- a/src/mas/devops/data/catalogs/v9-250403-s390x.yaml +++ b/src/mas/devops/data/catalogs/v9-250403-s390x.yaml @@ -7,6 +7,11 @@ catalog_digest: sha256:45f4a5de29d15b936399adc28a80258557420094f1f7740c97e8d44a84446a85 +ocp_compatibility: + - 4.14 + - 4.15 + - 4.16 + uds_version: 2.0.12 # Operator version 2.0.12 # sticking to 2.0.12 version # Please do Not Change sls_version: 3.11.1 # tbc # Operator version 3.10.0 (https://github.ibm.com/maximoappsuite/ibm-sls/releases) tsm_version: 1.6.1 # No Update # Operator version 1.5.4 (https://github.ibm.com/maximoappsuite/ibm-truststore-mgr/releases) diff --git a/src/mas/devops/data/catalogs/v9-250501-amd64.yaml b/src/mas/devops/data/catalogs/v9-250501-amd64.yaml index bce20a6..f3e5391 100644 --- a/src/mas/devops/data/catalogs/v9-250501-amd64.yaml +++ b/src/mas/devops/data/catalogs/v9-250501-amd64.yaml @@ -7,6 +7,11 @@ catalog_digest: sha256:152bb3a71e029d2215a14816ac928bc28054d85d6123a3813c9679fd7eb91650 +ocp_compatibility: + - 4.14 + - 4.15 + - 4.16 + # Dependencies # ----------------------------------------------------------------------------- ibm_licensing_version: 4.2.12 # Operator version 4.2.11 (https://github.com/IBM/cloud-pak/tree/master/repo/case/ibm-licensing) diff --git a/src/mas/devops/data/catalogs/v9-250501-s390x.yaml b/src/mas/devops/data/catalogs/v9-250501-s390x.yaml index 3174212..9b825aa 100644 --- a/src/mas/devops/data/catalogs/v9-250501-s390x.yaml +++ b/src/mas/devops/data/catalogs/v9-250501-s390x.yaml @@ -7,6 +7,11 @@ catalog_digest: sha256:9d0437b2e7391fb4e28ba42294c442fea5d157bd1699d7d7a415dd7a5a27a6f9 +ocp_compatibility: + - 4.14 + - 4.15 + - 4.16 + uds_version: 2.0.12 # Operator version 2.0.12 # sticking to 2.0.12 version # Please do Not Change sls_version: 3.11.1 # tbc # Operator version 3.10.0 (https://github.ibm.com/maximoappsuite/ibm-sls/releases) tsm_version: 1.6.2 # No Update # Operator version 1.5.4 (https://github.ibm.com/maximoappsuite/ibm-truststore-mgr/releases) diff --git a/src/mas/devops/data/catalogs/v9-250624-amd64.yaml b/src/mas/devops/data/catalogs/v9-250624-amd64.yaml index 4cb35f0..dde522f 100644 --- a/src/mas/devops/data/catalogs/v9-250624-amd64.yaml +++ b/src/mas/devops/data/catalogs/v9-250624-amd64.yaml @@ -7,6 +7,13 @@ catalog_digest: sha256:cf03a9bcfacaf9c354078dfb2f97c166bfb1a6f0776680b52b7325cc469ffb31 +ocp_compatibility: + - 4.14 + - 4.15 + - 4.16 + - 4.17 + - 4.18 + # Dependencies # ----------------------------------------------------------------------------- ibm_licensing_version: 4.2.14 # Operator version 4.2.14 (https://github.com/IBM/cloud-pak/tree/master/repo/case/ibm-licensing) diff --git a/src/mas/devops/data/catalogs/v9-250624-ppc64le.yaml b/src/mas/devops/data/catalogs/v9-250624-ppc64le.yaml index bff24a7..184954e 100644 --- a/src/mas/devops/data/catalogs/v9-250624-ppc64le.yaml +++ b/src/mas/devops/data/catalogs/v9-250624-ppc64le.yaml @@ -7,11 +7,17 @@ catalog_digest: sha256:70b87e1fe64eb46c3796ce0aaa713b0ff3c902732078fc5297c28f7840f23d3e +ocp_compatibility: + - 4.14 + - 4.15 + - 4.16 + - 4.17 + - 4.18 + uds_version: 2.0.12 # Operator version 2.0.12 # sticking to 2.0.12 version # Please do Not Change sls_version: 3.12.0 # Operator version 3.10.0 (https://github.ibm.com/maximoappsuite/ibm-sls/releases) tsm_version: 1.6.2 # Operator version 1.5.4 (https://github.ibm.com/maximoappsuite/ibm-truststore-mgr/releases) - # Maximo Application Suite # ----------------------------------------------------------------------------- mas_core_version: diff --git a/src/mas/devops/data/catalogs/v9-250624-s390x.yaml b/src/mas/devops/data/catalogs/v9-250624-s390x.yaml index 111f609..19c3767 100644 --- a/src/mas/devops/data/catalogs/v9-250624-s390x.yaml +++ b/src/mas/devops/data/catalogs/v9-250624-s390x.yaml @@ -7,11 +7,17 @@ catalog_digest: sha256:5748e21db7f688c8d80c5ab14e394e5575997cfc2e544d77b2173159dc237aba +ocp_compatibility: + - 4.14 + - 4.15 + - 4.16 + - 4.17 + - 4.18 + uds_version: 2.0.12 # Operator version 2.0.12 # sticking to 2.0.12 version # Please do Not Change sls_version: 3.12.0 # Operator version 3.10.0 (https://github.ibm.com/maximoappsuite/ibm-sls/releases) tsm_version: 1.7.0 # Operator version 1.5.4 (https://github.ibm.com/maximoappsuite/ibm-truststore-mgr/releases) - # Maximo Application Suite # ----------------------------------------------------------------------------- mas_core_version: diff --git a/src/mas/devops/ocp.py b/src/mas/devops/ocp.py index e4c5411..031e668 100644 --- a/src/mas/devops/ocp.py +++ b/src/mas/devops/ocp.py @@ -61,6 +61,23 @@ def connect(server: str, token: str, skipVerify: bool = False) -> bool: return True +def getClusterVersion(dynClient: DynamicClient) -> str: + """ + Get a namespace + """ + clusterVersionAPI = dynClient.resources.get(api_version="config.openshift.io/v1", kind="ClusterVersion") + + # Version jsonPath = .status.history[?(@.state=="Completed")].version + try: + clusterVersion = clusterVersionAPI.get(name="version") + for record in clusterVersion.status.history: + if record.state == "Completed": + return record.state.version + except NotFoundError: + logger.debug("Unable to retrieve ClusterVersion") + return None + + def getNamespace(dynClient: DynamicClient, namespace: str) -> dict: """ Get a namespace From bda05349f42072f805d39223ab47161c5095ef97 Mon Sep 17 00:00:00 2001 From: David Parker Date: Mon, 28 Jul 2025 11:23:54 +0100 Subject: [PATCH 07/11] Newer versions of ODH do not need mariadb --- .../pipelinerun-aiservice-install.yml.j2 | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/src/mas/devops/templates/pipelinerun-aiservice-install.yml.j2 b/src/mas/devops/templates/pipelinerun-aiservice-install.yml.j2 index f692c40..6914059 100644 --- a/src/mas/devops/templates/pipelinerun-aiservice-install.yml.j2 +++ b/src/mas/devops/templates/pipelinerun-aiservice-install.yml.j2 @@ -273,8 +273,6 @@ spec: value: "{{ mas_app_channel_aibroker }}" - name: install_minio_aiservice value: "{{ install_minio_aiservice }}" - - name: install_mariadb_aiservice - value: "{{ install_mariadb_aiservice }}" - name: install_mongo_aiservice value: "{{ install_mongo_aiservice }}" - name: install_sls_aiservice @@ -418,30 +416,6 @@ spec: value: "{{ aiservice_s3_action }}" - name: aiservice_apikey_action value: "{{ aiservice_apikey_action }}" -{%- endif %} -{%- if aiservice_db_host is defined and aiservice_db_host != "" %} - - # AI Service - Database (DataSciencePipelinesApplication) - # ------------------------------------------------------------------------- - - name: aiservice_db_host - value: "{{ aiservice_db_host }}" - - name: aiservice_db_port - value: "{{ aiservice_db_port }}" - - name: aiservice_db_user - value: "{{ aiservice_db_user }}" - - name: aiservice_db_database - value: "{{ aiservice_db_database }}" - - name: aiservice_db_secret_name - value: "{{ aiservice_db_secret_name }}" - - name: aiservice_db_secret_key - value: "{{ aiservice_db_secret_key }}" - - name: aiservice_db_secret_value - value: "{{ aiservice_db_secret_value }}" - - name: mariadb_user - value: "{{ mariadb_user }}" - - name: mariadb_password - value: "{{ mariadb_password }}" - {%- endif %} workspaces: From eaa7112373077bf19e9e57e6447fb5fb9f9ca528 Mon Sep 17 00:00:00 2001 From: David Parker Date: Mon, 28 Jul 2025 15:38:48 +0100 Subject: [PATCH 08/11] Remove lots of unnecessary params --- .../pipelinerun-aiservice-install.yml.j2 | 216 +++--------------- .../templates/pipelinerun-install.yml.j2 | 5 +- 2 files changed, 38 insertions(+), 183 deletions(-) diff --git a/src/mas/devops/templates/pipelinerun-aiservice-install.yml.j2 b/src/mas/devops/templates/pipelinerun-aiservice-install.yml.j2 index 6914059..0c777ee 100644 --- a/src/mas/devops/templates/pipelinerun-aiservice-install.yml.j2 +++ b/src/mas/devops/templates/pipelinerun-aiservice-install.yml.j2 @@ -65,20 +65,13 @@ spec: - name: storage_class_rwo value: "{{ storage_class_rwo }}" -{%- if turbonomic_server_url is defined and turbonomic_server_url != "" %} - - # Dependencies - Turbonomic + # MAS Catalog # ------------------------------------------------------------------------- - - name: turbonomic_server_url - value: "{{ turbonomic_server_url }}" - - name: turbonomic_server_version - value: "{{ turbonomic_server_version }}" - - name: turbonomic_target_name - value: "{{ turbonomic_target_name }}" - - name: turbonomic_username - value: "{{ turbonomic_username }}" - - name: turbonomic_password - value: "{{ turbonomic_password }}" + - name: mas_catalog_version + value: "{{ mas_catalog_version }}" +{%- if mas_catalog_digest is defined and mas_catalog_digest != "" %} + - name: mas_catalog_digest + value: "{{ mas_catalog_digest }}" {%- endif %} {%- if mongodb_action is defined and mongodb_action != "" %} @@ -136,7 +129,19 @@ spec: - name: sls_action value: "{{ sls_action }}" {%- endif %} +{%- if aiservice_sls_url is defined and aiservice_sls_url != "" %} + # Remote SLS + # ------------------------------------------------------------------------- + - name: aiservice_sls_secret_name + value: "{{ aiservice_sls_secret_name }}" + - name: aiservice_sls_registration_key + value: "{{ aiservice_sls_registration_key }}" + - name: aiservice_sls_url + value: "{{ aiservice_sls_url }}" + - name: aiservice_sls_ca_cert + value: "{{ aiservice_sls_ca_cert }}" +{%- endif %} # Dependencies - UDS/DRO (Required) # ------------------------------------------------------------------------- @@ -153,168 +158,30 @@ spec: value: "{{ dro_namespace }}" {%- endif %} - # MAS Catalog - # ------------------------------------------------------------------------- - - name: mas_catalog_version - value: "{{ mas_catalog_version }}" -{%- if mas_catalog_digest is defined and mas_catalog_digest != "" %} - - name: mas_catalog_digest - value: "{{ mas_catalog_digest }}" -{%- endif %} - # Dependencies - Certificate Manager # ------------------------------------------------------------------------- - name: cert_manager_provider value: "{{ cert_manager_provider }}" - name: cert_manager_action value: "{{ cert_manager_action }}" -{%- if dns_provider is defined and dns_provider != "" %} - - # MAS DNS Integrations - General - # ------------------------------------------------------------------------- - - name: dns_provider - value: "{{ dns_provider }}" - {%- if cloudflare_apitoken is defined and cloudflare_apitoken != "" %} - - # MAS DNS Integrations - Cloudflare Support - # ------------------------------------------------------------------------- - - name: cloudflare_email - value: "{{ cloudflare_email }}" - - name: cloudflare_apitoken - value: "{{ cloudflare_apitoken }}" - - name: cloudflare_zone - value: "{{ cloudflare_zone }}" - - name: cloudflare_subdomain - value: "{{ cloudflare_subdomain }}" - {%- endif %} - {%- if cis_apikey is defined and cis_apikey != "" %} - - # MAS DNS Integrations - CIS Support - # ------------------------------------------------------------------------- - - name: cis_email - value: "{{ cis_email }}" - - name: cis_apikey - value: "{{ cis_apikey }}" - - name: cis_crn - value: "{{ cis_crn }}" - - name: cis_subdomain - value: "{{ cis_subdomain }}" - {%- endif %} - {%- if cis_service_name is defined and cis_service_name != "" %} - - # MAS DNS Integrations - CIS Security Enhancement Support - # ------------------------------------------------------------------------- - - name: cis_service_name - value: "{{ cis_service_name }}" - - name: cis_enhanced_security - value: "{{ cis_enhanced_security }}" - - name: override_edge_certs - value: "{{ override_edge_certs }}" - - name: cis_proxy - value: "{{ cis_proxy }}" - {%- endif %} -{%- endif %} -{%- if aws_access_key_id is defined and aws_access_key_id != "" %} - - # AWS basic info - # ------------------------------------------------------------------------- - - name: aws_access_key_id - value: "{{ aws_access_key_id }}" - - name: aws_secret_access_key - value: "{{ aws_secret_access_key }}" - - name: aws_region - value: "{{ aws_region }}" -{%- endif %} -{%- if route53_hosted_zone_name is defined and route53_hosted_zone_name != "" %} - - # MAS DNS Integrations - AWS Route 53 - # ------------------------------------------------------------------------- - - name: route53_hosted_zone_name - value: "{{ route53_hosted_zone_name }}" - - name: route53_hosted_zone_region - value: "{{ route53_hosted_zone_region }}" - - name: route53_email - value: "{{ route53_email }}" - - name: route53_subdomain - value: "{{ route53_subdomain }}" -{%- endif %} -{%- if mas_add_catalog is defined and mas_add_catalog != "" %} - # Data Dictionary + # Dependencies - Db2 # ------------------------------------------------------------------------- - - name: mas_add_catalog - value: "{{ mas_add_catalog }}" - - name: mas_add_channel - value: "{{ mas_add_channel }}" -{%- endif %} + - name: db2_action_aiservice + value: "{{ db2_action_aiservice }}" - # Common params + # AI Service # ------------------------------------------------------------------------- + - name: mas_app_channel_aibroker + value: "{{ mas_app_channel_aibroker }}" + - name: environment_type + value: "{{ environment_type }}" - name: aiservice_instance_id value: "{{ aiservice_instance_id }}" - name: mas_icr_cp value: "{{ mas_icr_cp }}" - name: mas_icr_cpopen value: "{{ mas_icr_cpopen }}" -{%- if mas_trust_default_cas is defined and mas_trust_default_cas != "" %} - - name: mas_trust_default_cas - value: "{{ mas_trust_default_cas }}" -{%- endif %} -{%- if mas_manual_cert_mgmt is defined %} - - name: mas_manual_cert_mgmt - value: "{{ mas_manual_cert_mgmt }}" -{%- endif %} - -{%- if mas_app_channel_aibroker is defined and mas_app_channel_aibroker != "" %} - - # AI Broker - # ------------------------------------------------------------------------- - - name: mas_app_channel_aibroker - value: "{{ mas_app_channel_aibroker }}" - - name: install_minio_aiservice - value: "{{ install_minio_aiservice }}" - - name: install_mongo_aiservice - value: "{{ install_mongo_aiservice }}" - - name: install_sls_aiservice - value: "{{ install_sls_aiservice }}" - - name: install_dro_aiservice - value: "{{ install_dro_aiservice }}" - - name: install_db2_aiservice - value: "{{ install_db2_aiservice }}" - - name: aiservice_dro_secret_name - value: "{{ aiservice_dro_secret_name }}" - - name: aiservice_dro_api_key - value: "{{ aiservice_dro_api_key }}" - - name: aiservice_dro_url - value: "{{ aiservice_dro_url }}" - - name: aiservice_dro_ca_cert - value: "{{ aiservice_dro_ca_cert }}" - - name: aiservice_db2_username - value: "{{ aiservice_db2_username }}" - - name: aiservice_db2_password - value: "{{ aiservice_db2_password }}" - - name: aiservice_db2_jdbc_url - value: "{{ aiservice_db2_jdbc_url }}" - - name: aiservice_db2_ssl_enabled - value: "{{ aiservice_db2_ssl_enabled }}" - - name: aiservice_db2_ca_cert - value: "{{ aiservice_db2_ca_cert }}" - - name: aiservice_sls_secret_name - value: "{{ aiservice_sls_secret_name }}" - - name: aiservice_sls_registration_key - value: "{{ aiservice_sls_registration_key }}" - - name: aiservice_sls_url - value: "{{ aiservice_sls_url }}" - - name: aiservice_sls_ca_cert - value: "{{ aiservice_sls_ca_cert }}" - - name: environment_type - value: "{{ environment_type }}" - - {%- if install_db2_aiservice is defined and install_db2_aiservice == "false" %} - - name: db2_action_aiservice - value: "not_install" - {%- endif %} - # AI Service Tenant # ------------------------------------------------------------------------- @@ -334,12 +201,18 @@ spec: value: "{{ aiservice_tenant_s3_access_key }}" - name: aiservice_tenant_s3_secret_key value: "{{ aiservice_tenant_s3_secret_key }}" + + # RSL + # ------------------------------------------------------------------------- - name: rsl_url value: "{{ rsl_url }}" - name: rsl_org_id value: "{{ rsl_org_id }}" - name: rsl_token value: "{{ rsl_token }}" + + # S3 Buckets + # ------------------------------------------------------------------------- - name: aiservice_s3_bucket_prefix value: "{{ aiservice_s3_bucket_prefix }}" - name: aiservice_s3_region @@ -347,9 +220,6 @@ spec: - name: aiservice_s3_endpoint_url value: "{{ aiservice_s3_endpoint_url }}" -{%- endif %} -{%- if aiservice_storage_provider is defined and aiservice_storage_provider != "" %} - # AI Service - OpenData Hub Storage # ------------------------------------------------------------------------- - name: aiservice_storage_provider @@ -366,36 +236,22 @@ spec: value: "{{ aiservice_storage_ssl }}" - name: aiservice_storage_region value: "{{ aiservice_storage_region }}" + - name: aiservice_storage_pipelines_bucket value: "{{ aiservice_storage_pipelines_bucket }}" - name: aiservice_storage_tenants_bucket value: "{{ aiservice_storage_tenants_bucket }}" - name: aiservice_storage_templates_bucket value: "{{ aiservice_storage_templates_bucket }}" + - name: aiservice_tenant_name value: "{{ aiservice_tenant_name }}" + - name: minio_root_user value: "{{ minio_root_user }}" - name: minio_root_password value: "{{ minio_root_password }}" -{%- endif %} -{%- if aiservice_controller_tag is defined and aiservice_controller_tag != "" %} - - # AI Service - KModels Tags - # ------------------------------------------------------------------------- - - name: aiservice_controller_tag - value: "{{ aiservice_controller_tag }}" - - name: aiservice_store_tag - value: "{{ aiservice_store_tag }}" - - name: aiservice_watcher_tag - value: "{{ aiservice_watcher_tag }}" - - name: aiservice_connector_tag - value: "{{ aiservice_connector_tag }}" - - name: aiservice_pipeline_steps_tag - value: "{{ aiservice_pipeline_steps_tag }}" -{%- endif %} -{%- if aiservice_watsonxai_apikey is defined and aiservice_watsonxai_apikey != "" %} # AI Service - watsonX # ------------------------------------------------------------------------- @@ -407,7 +263,7 @@ spec: value: "{{ aiservice_watsonxai_project_id }}" - name: aiservice_watsonx_action value: "{{ aiservice_watsonx_action }}" -{%- endif %} + {%- if aiservice_s3_action is defined and aiservice_s3_action != "" %} # AI Service - S3 diff --git a/src/mas/devops/templates/pipelinerun-install.yml.j2 b/src/mas/devops/templates/pipelinerun-install.yml.j2 index 775eb49..a40aeea 100644 --- a/src/mas/devops/templates/pipelinerun-install.yml.j2 +++ b/src/mas/devops/templates/pipelinerun-install.yml.j2 @@ -112,6 +112,8 @@ spec: value: "{{ db2_action_system }}" - name: db2_action_manage value: "{{ db2_action_manage }}" + - name: db2_action_facilities + value: "{{ db2_action_facilities}}" # Dependencies - Db2u Operator # ------------------------------------------------------------------------- @@ -769,9 +771,6 @@ spec: value: "{{ mas_ws_facilities_config_map_name }}" {%- endif %} - - name: db2_action_facilities - value: "{{ db2_action_facilities}}" - {%- endif %} workspaces: From da6894f56208c573d68e7def922a9091de4dae6d Mon Sep 17 00:00:00 2001 From: David Parker Date: Tue, 29 Jul 2025 16:05:59 +0100 Subject: [PATCH 09/11] aiservice_channel missing --- .../templates/pipelinerun-aiservice-install.yml.j2 | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/mas/devops/templates/pipelinerun-aiservice-install.yml.j2 b/src/mas/devops/templates/pipelinerun-aiservice-install.yml.j2 index 0c777ee..e53175b 100644 --- a/src/mas/devops/templates/pipelinerun-aiservice-install.yml.j2 +++ b/src/mas/devops/templates/pipelinerun-aiservice-install.yml.j2 @@ -172,12 +172,14 @@ spec: # AI Service # ------------------------------------------------------------------------- - - name: mas_app_channel_aibroker - value: "{{ mas_app_channel_aibroker }}" - - name: environment_type - value: "{{ environment_type }}" - name: aiservice_instance_id value: "{{ aiservice_instance_id }}" + - name: aiservice_channel + value: "{{ aiservice_channel }}" + + - name: environment_type + value: "{{ environment_type }}" + - name: mas_icr_cp value: "{{ mas_icr_cp }}" - name: mas_icr_cpopen From f63855f1541a39d134d86f85f7009f2c92f94a9d Mon Sep 17 00:00:00 2001 From: David Parker Date: Tue, 29 Jul 2025 18:30:24 +0100 Subject: [PATCH 10/11] Cleanup: unnecessary ai_tenant_name --- src/mas/devops/templates/pipelinerun-aiservice-install.yml.j2 | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/mas/devops/templates/pipelinerun-aiservice-install.yml.j2 b/src/mas/devops/templates/pipelinerun-aiservice-install.yml.j2 index e53175b..ed8d54c 100644 --- a/src/mas/devops/templates/pipelinerun-aiservice-install.yml.j2 +++ b/src/mas/devops/templates/pipelinerun-aiservice-install.yml.j2 @@ -246,9 +246,6 @@ spec: - name: aiservice_storage_templates_bucket value: "{{ aiservice_storage_templates_bucket }}" - - name: aiservice_tenant_name - value: "{{ aiservice_tenant_name }}" - - name: minio_root_user value: "{{ minio_root_user }}" - name: minio_root_password From e23fd269bee257104e5ed2eef8a488e26f22ac3c Mon Sep 17 00:00:00 2001 From: David Parker Date: Wed, 30 Jul 2025 13:00:24 +0100 Subject: [PATCH 11/11] Create starter august catalog for ai service work --- .../devops/data/catalogs/v9-250624-amd64.yaml | 2 +- .../devops/data/catalogs/v9-250828-amd64.yaml | 139 ++++++++++++++++++ test/src/test_data.py | 2 +- 3 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 src/mas/devops/data/catalogs/v9-250828-amd64.yaml diff --git a/src/mas/devops/data/catalogs/v9-250624-amd64.yaml b/src/mas/devops/data/catalogs/v9-250624-amd64.yaml index 911446e..1c12692 100644 --- a/src/mas/devops/data/catalogs/v9-250624-amd64.yaml +++ b/src/mas/devops/data/catalogs/v9-250624-amd64.yaml @@ -102,7 +102,7 @@ mas_facilities_version: 8.11.x: "" # Not Supported aiservice_version: - 9.1.x: 9.1.0 + 9.1.x: "" # Not Ready Yet # Extra Images for UDS # ------------------------------------------------------------------------------ diff --git a/src/mas/devops/data/catalogs/v9-250828-amd64.yaml b/src/mas/devops/data/catalogs/v9-250828-amd64.yaml new file mode 100644 index 0000000..1a74c74 --- /dev/null +++ b/src/mas/devops/data/catalogs/v9-250828-amd64.yaml @@ -0,0 +1,139 @@ +--- +# Case bundle configuration for IBM Maximo Operator Catalog 250624 (AMD64) +# ----------------------------------------------------------------------------- +# In the future this won't be necessary as we'll be able to mirror from the +# catalog itself, but not everything in the catalog supports this yet (including MAS) +# so we need to use the CASE bundle mirror process still. + +catalog_digest: sha256:cf03a9bcfacaf9c354078dfb2f97c166bfb1a6f0776680b52b7325cc469ffb31 + +ocp_compatibility: + - 4.15 + - 4.16 + - 4.17 + - 4.18 + +# Dependencies +# ----------------------------------------------------------------------------- +ibm_licensing_version: 4.2.14 # Operator version 4.2.14 (https://github.com/IBM/cloud-pak/tree/master/repo/case/ibm-licensing) +common_svcs_version: 4.12.0 # Operator version 4.12.0 (https://github.com/IBM/cloud-pak/tree/master/repo/case/ibm-cp-common-services) +common_svcs_version_1: 4.11.0 # Additional version 4.11.0 + +cp4d_platform_version: 5.1.1 # Operator version 5.1.1 (https://github.com/IBM/cloud-pak/tree/master/repo/case/ibm-cp-datacore/) +ibm_zen_version: 6.1.1+20250218.180746.89 # For CPD5 ibm-zen has to be explicitily mirrored + +db2u_version: 6.0.1+20240704.142950.9960 # Operator version 110509.0.2 to find the version 6.0.1, search CASE_VERSION in db2u, catalog.yaml into ibm-maximo-operator-catalog (https://github.com/IBM/cloud-pak/tree/master/repo/case/ibm-db2uoperator) +events_version: 5.0.1 # Operator version 5.0.1 (https://github.com/IBM/cloud-pak/tree/master/repo/case/ibm-events-operator) +uds_version: 2.0.12 # Operator version 2.0.12 # sticking to 2.0.12 version # Please do Not Change +sls_version: 3.12.0 # Operator version 3.10.0 (https://github.ibm.com/maximoappsuite/ibm-sls/releases) +tsm_version: 1.7.0 # Operator version 1.5.4 (https://github.ibm.com/maximoappsuite/ibm-truststore-mgr/releases) +dd_version: 1.1.19 # Operator version 1.1.14 (https://github.ibm.com/maximoappsuite/ibm-data-dictionary/releases) +appconnect_version: 6.2.0 # Operator version 6.2.0 # sticking to 6.2.0 version # Please do Not Change +wsl_version: 10.2.0 # used for wsl and wsl_runtimes unless wsl_runtimes_version also specified +wsl_runtimes_version: 10.3.0 # cpd 5.1.3 uses version 10.3.0 of wsl runtimes but only 10.2.0 for wsl itself +wml_version: 10.2.0 # Operator version 5.0.0 + +# Why are these commented out? +# ccs_build: +20240528.144404.460 # ibm-ccs from version 9.0.0 requires the build version +# datarefinery_build: +20240517.202103.146 + +spark_version: 10.2.0 # Operator version 7.3.0 +cognos_version: 27.2.0 # Operator version 25.0.0 +couchdb_version: 1.0.13 # Operator version 2.2.1 (1.0.13) sticking with 1.0.13 # (This is required for Assist 9.0, https://github.com/IBM/cloud-pak/blob/master/repo/case/ibm-couchdb/index.yaml) +elasticsearch_version: 1.1.2570 # Operator version 1.1.2470 + + +# Maximo Application Suite +# ----------------------------------------------------------------------------- +mas_core_version: + 9.1.x-feature: 9.1.0 # Updated + 9.1.x: 9.1.0 # Updated + 9.0.x: 9.0.12 # Updated + 8.10.x: 8.10.26 # Updated + 8.11.x: 8.11.23 # Updated +mas_assist_version: + 9.1.x: 9.1.0 # Updated + 9.0.x: 9.0.6 # Updated + 8.10.x: 8.7.8 # No Update + 8.11.x: 8.8.7 # No Update +mas_hputilities_version: + 9.1.x: "" # Not Supported + 9.0.x: "" # Not Supported + 8.10.x: 8.6.7 # No Update + 8.11.x: "" # Not Supported +mas_iot_version: + 9.1.x: 9.1.0 # Updated + 9.0.x: 9.0.9 # Updated + 8.10.x: 8.7.23 # Updated + 8.11.x: 8.8.19 # Updated +mas_manage_version: + 9.1.x-feature: 9.1.0 # Updated + 9.1.x: 9.1.0 # Updated + 9.0.x: 9.0.14 # Updated + 8.10.x: 8.6.27 # Updated + 8.11.x: 8.7.21 # Updated +mas_monitor_version: + 9.1.x: 9.1.0 # Updated + 9.0.x: 9.0.10 # updated + 8.10.x: 8.10.20 # updated + 8.11.x: 8.11.18 # updated +mas_optimizer_version: + 9.1.x-feature: 9.1.0 # Updated + 9.1.x: 9.1.0 # Updated + 9.0.x: 9.0.12 # Updated + 8.10.x: 8.4.19 # Updated + 8.11.x: 8.5.18 # Updated +mas_predict_version: + 9.1.x: 9.1.0 # Updated + 9.0.x: 9.0.7 # No Update + 8.10.x: 8.8.8 # No Update + 8.11.x: 8.9.10 # No Update +mas_visualinspection_version: + 9.1.x-feature: 9.1.0 # Updated + 9.1.x: 9.1.0 # Updated + 9.0.x: 9.0.9 # No Update + 8.10.x: 8.8.4 # No Update + 8.11.x: 8.9.12 # No Update +mas_facilities_version: + 9.1.x: 9.1.0 # Updated + 9.0.x: "" # Not Supported + 8.10.x: "" # Not Supported + 8.11.x: "" # Not Supported + +aiservice_version: + 9.1.x: 9.1.3 + +# Extra Images for UDS +# ------------------------------------------------------------------------------ +uds_extras_version: 1.5.0 + +# Extra Images for Mongo +# ------------------------------------------------------------------------------ +mongo_extras_version_default: 7.0.12 + +# Variables used to mirror additional mongo image versions +mongo_extras_version_4: 4.4.21 +mongo_extras_version_5: 5.0.23 +mongo_extras_version_6: 6.0.12 +mongo_extras_version_7: 7.0.12 + +# Extra Images for Db2u +# ------------------------------------------------------------------------------ +db2u_extras_version: 1.0.6 # No Update +db2u_filter: db2 + +# Extra Images for IBM Watson Discovery +# ------------------------------------------------------------------------------ +#wd_extras_version: 1.0.4 + +# Extra Images for Amlen +# ------------------------------------------------------------------------------ +amlen_extras_version: 1.1.3 + +# Default Cloud Pak for Data version +# ------------------------------------------------------------------------------ +cpd_product_version_default: 5.1.3 + +# Extra Images for kmodels +# ------------------------------------------------------------------------------ +kmodels_extras_version_default: 1.0.13 diff --git a/test/src/test_data.py b/test/src/test_data.py index f67e5ac..a466917 100644 --- a/test/src/test_data.py +++ b/test/src/test_data.py @@ -26,7 +26,7 @@ def test_list_catalogs(): def test_get_newest_catalog_tag(): catalogTag = getNewestCatalogTag("amd64") # Reminder: update this test when adding a new catalog each month! - assert catalogTag == "v9-250624-amd64" + assert catalogTag == "v9-250828-amd64" def test_get_newest_catalog_tag_fail():