From aa5d72a6954f39bb7b41f0a3148a4605b945745d Mon Sep 17 00:00:00 2001 From: Shyam Doshi Date: Tue, 26 May 2026 12:51:34 +0530 Subject: [PATCH 01/11] [patch] Added support for FACILITIES.properties in Facilities --- python/src/mas/cli/install/app.py | 38 +++++++++++++++++++ python/src/mas/cli/install/argParser.py | 13 +++++++ python/src/mas/cli/install/params.py | 4 ++ .../cli/install/settings/additionalConfigs.py | 19 ++++++++++ 4 files changed, 74 insertions(+) diff --git a/python/src/mas/cli/install/app.py b/python/src/mas/cli/install/app.py index b7595d9b53..a530c1d7fd 100644 --- a/python/src/mas/cli/install/app.py +++ b/python/src/mas/cli/install/app.py @@ -1541,6 +1541,42 @@ def facilitiesSettings(self) -> None: "Real Estate and Facilities AES Vault Secret Name", "mas_ws_facilities_vault_secret", ) + + # Prompt for custom FACILITIES.properties file + if self.yesOrNo("Upload custom FACILITIES.properties file"): + self.printDescription( + [ + "Provide the path to your custom FACILITIES.properties file.", + "This file will be uploaded as a secret in OpenShift.", + "If you choose not to upload a custom file, the default FACILITIES.properties will be used." + ] + ) + facilitiesPropertiesFile = self.promptForString( + "Path to FACILITIES.properties file", + "mas_ws_facilities_properties_file_local", + ) + if facilitiesPropertiesFile and path.exists(facilitiesPropertiesFile): + self.setParam("mas_ws_facilities_properties_file_local", facilitiesPropertiesFile) + self.setParam("mas_ws_facilities_custom_properties", "true") + + # Prompt for custom secret name + if self.yesOrNo("Specify a custom name for the secret"): + customSecretName = self.promptForString( + "Secret name (default: facilities-properties)", + "mas_ws_facilities_properties_secret_name", + default="facilities-properties" + ) + if customSecretName and customSecretName != "": + self.setParam("mas_ws_facilities_properties_secret_name", customSecretName) + else: + self.setParam("mas_ws_facilities_properties_secret_name", "facilities-properties") + else: + self.setParam("mas_ws_facilities_properties_secret_name", "facilities-properties") + else: + print_formatted_text(HTML("File not found. Default FACILITIES.properties will be used.")) + self.setParam("mas_ws_facilities_custom_properties", "false") + else: + self.setParam("mas_ws_facilities_custom_properties", "false") self.promptForString( "Set Real Estate and Facilities Routes Timeout:", @@ -2538,6 +2574,7 @@ def install(self, argv): self.podTemplates() self.slsLicenseFile() self.db2LicenseFile() + self.facilitiesPropertiesFile() self.manualCertificates() self.aiserviceConfig() @@ -2744,6 +2781,7 @@ def install(self, argv): namespace=pipelinesNamespace, slsLicenseFile=self.slsLicenseFileSecret, db2LicenseFile=self.db2LicenseFileSecret, + facilitiesProperties=self.facilitiesPropertiesSecret, additionalConfigs=self.additionalConfigsSecret, podTemplates=self.podTemplatesSecret, certs=self.certsSecret, diff --git a/python/src/mas/cli/install/argParser.py b/python/src/mas/cli/install/argParser.py index 603d02dafe..c909a9b8f5 100644 --- a/python/src/mas/cli/install/argParser.py +++ b/python/src/mas/cli/install/argParser.py @@ -818,6 +818,19 @@ def isValidFile(parser: argparse.ArgumentParser, arg: str) -> str: help="Storage size for Facilities user files", default=50, ) +facilitiesArgGroup.add_argument( + "--facilities-properties-file", + dest="mas_ws_facilities_properties_file_local", + required=False, + help="Path to custom FACILITIES.properties file to upload as secret", +) +facilitiesArgGroup.add_argument( + "--facilities-properties-secret-name", + dest="mas_ws_facilities_properties_secret_name", + required=False, + help="Custom name for the Facilities properties secret (default: facilities-properties)", + default="facilities-properties", +) # Open Data Hub # ----------------------------------------------------------------------------- diff --git a/python/src/mas/cli/install/params.py b/python/src/mas/cli/install/params.py index 950ae7d0f3..35a4bffd46 100644 --- a/python/src/mas/cli/install/params.py +++ b/python/src/mas/cli/install/params.py @@ -174,6 +174,10 @@ "mas_ws_facilities_storage_userfiles_size", "mas_ws_facilities_dwfagents", "mas_ws_facilities_db_maxconnpoolsize", + "mas_ws_facilities_properties_file_local", + "mas_ws_facilities_custom_properties", + "mas_ws_facilities_properties_secret", + "mas_ws_facilities_properties_secret_name", # Special chars "mas_special_characters", # ODH diff --git a/python/src/mas/cli/install/settings/additionalConfigs.py b/python/src/mas/cli/install/settings/additionalConfigs.py index c97ac980d8..5791b04f01 100644 --- a/python/src/mas/cli/install/settings/additionalConfigs.py +++ b/python/src/mas/cli/install/settings/additionalConfigs.py @@ -220,6 +220,25 @@ def db2LicenseFile(self) -> None: self.db2LicenseFileSecret = self.addFilesToSecret(db2LicenseFileSecret, self.db2LicenseFileLocal, "") else: self.db2LicenseFileSecret = None + + def facilitiesPropertiesFile(self) -> None: + """Handle Facilities properties file upload""" + self.facilitiesPropertiesSecret = None + facilitiesPropertiesFileLocal = self.getParam("mas_ws_facilities_properties_file_local") + + if facilitiesPropertiesFileLocal and facilitiesPropertiesFileLocal != "": + # Get custom secret name or use default + secretName = self.getParam("mas_ws_facilities_properties_secret_name") + if not secretName or secretName == "": + secretName = "facilities-properties" + + facilitiesPropertiesSecret = {"apiVersion": "v1", "kind": "Secret", "type": "Opaque", "metadata": {"name": secretName}} + self.setParam("mas_ws_facilities_properties_file", "/workspace/facilities/FACILITIES.properties") + self.setParam("mas_ws_facilities_properties_secret", secretName) + self.facilitiesPropertiesSecret = self.addFilesToSecret(facilitiesPropertiesSecret, facilitiesPropertiesFileLocal, "") + else: + self.setParam("mas_ws_facilities_properties_file", "") + self.setParam("mas_ws_facilities_properties_secret", "") def addFilesToSecret(self, secretDict: dict, configPath: str, extension: str, keyPrefix: str = "") -> dict: """ From 108470c73dbc966ee1370fd82f2563eb60d1463a Mon Sep 17 00:00:00 2001 From: Shyam Doshi Date: Tue, 26 May 2026 13:03:26 +0530 Subject: [PATCH 02/11] [patch] Refactor the code --- python/src/mas/cli/install/app.py | 10 ++++------ .../src/mas/cli/install/settings/additionalConfigs.py | 6 +++--- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/python/src/mas/cli/install/app.py b/python/src/mas/cli/install/app.py index a530c1d7fd..3c530b38c4 100644 --- a/python/src/mas/cli/install/app.py +++ b/python/src/mas/cli/install/app.py @@ -1541,14 +1541,14 @@ def facilitiesSettings(self) -> None: "Real Estate and Facilities AES Vault Secret Name", "mas_ws_facilities_vault_secret", ) - + # Prompt for custom FACILITIES.properties file if self.yesOrNo("Upload custom FACILITIES.properties file"): self.printDescription( [ "Provide the path to your custom FACILITIES.properties file.", "This file will be uploaded as a secret in OpenShift.", - "If you choose not to upload a custom file, the default FACILITIES.properties will be used." + "If you choose not to upload a custom file, the default FACILITIES.properties will be used.", ] ) facilitiesPropertiesFile = self.promptForString( @@ -1558,13 +1558,11 @@ def facilitiesSettings(self) -> None: if facilitiesPropertiesFile and path.exists(facilitiesPropertiesFile): self.setParam("mas_ws_facilities_properties_file_local", facilitiesPropertiesFile) self.setParam("mas_ws_facilities_custom_properties", "true") - + # Prompt for custom secret name if self.yesOrNo("Specify a custom name for the secret"): customSecretName = self.promptForString( - "Secret name (default: facilities-properties)", - "mas_ws_facilities_properties_secret_name", - default="facilities-properties" + "Secret name (default: facilities-properties)", "mas_ws_facilities_properties_secret_name", default="facilities-properties" ) if customSecretName and customSecretName != "": self.setParam("mas_ws_facilities_properties_secret_name", customSecretName) diff --git a/python/src/mas/cli/install/settings/additionalConfigs.py b/python/src/mas/cli/install/settings/additionalConfigs.py index 5791b04f01..5fa56b417c 100644 --- a/python/src/mas/cli/install/settings/additionalConfigs.py +++ b/python/src/mas/cli/install/settings/additionalConfigs.py @@ -220,18 +220,18 @@ def db2LicenseFile(self) -> None: self.db2LicenseFileSecret = self.addFilesToSecret(db2LicenseFileSecret, self.db2LicenseFileLocal, "") else: self.db2LicenseFileSecret = None - + def facilitiesPropertiesFile(self) -> None: """Handle Facilities properties file upload""" self.facilitiesPropertiesSecret = None facilitiesPropertiesFileLocal = self.getParam("mas_ws_facilities_properties_file_local") - + if facilitiesPropertiesFileLocal and facilitiesPropertiesFileLocal != "": # Get custom secret name or use default secretName = self.getParam("mas_ws_facilities_properties_secret_name") if not secretName or secretName == "": secretName = "facilities-properties" - + facilitiesPropertiesSecret = {"apiVersion": "v1", "kind": "Secret", "type": "Opaque", "metadata": {"name": secretName}} self.setParam("mas_ws_facilities_properties_file", "/workspace/facilities/FACILITIES.properties") self.setParam("mas_ws_facilities_properties_secret", secretName) From 462a93e66f65836b030438112551a7d41aee6103 Mon Sep 17 00:00:00 2001 From: Shyam Doshi Date: Tue, 26 May 2026 14:19:04 +0530 Subject: [PATCH 03/11] [patch] Trigger the jobs --- python/src/mas/cli/install/argParser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/src/mas/cli/install/argParser.py b/python/src/mas/cli/install/argParser.py index c909a9b8f5..f04d49e5bc 100644 --- a/python/src/mas/cli/install/argParser.py +++ b/python/src/mas/cli/install/argParser.py @@ -822,7 +822,7 @@ def isValidFile(parser: argparse.ArgumentParser, arg: str) -> str: "--facilities-properties-file", dest="mas_ws_facilities_properties_file_local", required=False, - help="Path to custom FACILITIES.properties file to upload as secret", + help="Path to the custom FACILITIES.properties file to upload as secret", ) facilitiesArgGroup.add_argument( "--facilities-properties-secret-name", From cbf7b837e470052b1d9a64695d68293b7e5d6ebf Mon Sep 17 00:00:00 2001 From: Shyam Doshi Date: Tue, 26 May 2026 21:28:44 +0530 Subject: [PATCH 04/11] [patch] Pass the flag for facilities properties in argBuilder --- python/src/mas/cli/install/argBuilder.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/python/src/mas/cli/install/argBuilder.py b/python/src/mas/cli/install/argBuilder.py index cb891849c5..6d35258966 100644 --- a/python/src/mas/cli/install/argBuilder.py +++ b/python/src/mas/cli/install/argBuilder.py @@ -348,6 +348,11 @@ def buildCommand(self) -> str: if self.getParam("mas_ws_facilities_storage_userfiles_size") != "": command += f" --facilities-userfiles-storage-size \"{self.getParam('mas_ws_facilities_storage_userfiles_size')}\"{newline}" + if self.getParam("mas_ws_facilities_properties_file_local") != "": + command += f" --facilities-properties-file \"{self.getParam('mas_ws_facilities_properties_file_local')}\"{newline}" + if self.getParam("mas_ws_facilities_properties_secret_name") != "": + command += f" --facilities-properties-secret-name \"{self.getParam('mas_ws_facilities_properties_secret_name')}\"{newline}" + # AI Service Advanced Settings # ----------------------------------------------------------------------------- if self.installAIService: From 8296d32e626f09f982aee0c48c6f76784bcba373 Mon Sep 17 00:00:00 2001 From: Shyam Doshi Date: Tue, 26 May 2026 22:27:43 +0530 Subject: [PATCH 05/11] [patch] Added facilitiesproperties to summarizer --- python/src/mas/cli/install/summarizer.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/python/src/mas/cli/install/summarizer.py b/python/src/mas/cli/install/summarizer.py index 8f7038f4f7..ad77b0229d 100644 --- a/python/src/mas/cli/install/summarizer.py +++ b/python/src/mas/cli/install/summarizer.py @@ -341,6 +341,8 @@ def facilitiesSummary(self) -> None: "mas_ws_facilities_storage_userfiles_mode", ) # self.printParamSummary(" + User files Storage Size", "mas_ws_facilities_storage_userfiles_size") + self.printParamSummary(" + Properties File", "mas_ws_facilities_properties_file_local") + self.printParamSummary(" + Properties Secret Name", "mas_ws_facilities_properties_secret_name") if self.getParam("db2_action_facilities") == "none": self.printParamSummary(" + Dedicated DB2 Database", "No") else: From b1571718c9cf1d525a42119f773af343bed9a261 Mon Sep 17 00:00:00 2001 From: Shyam Doshi Date: Wed, 27 May 2026 13:00:31 +0530 Subject: [PATCH 06/11] [patch] Added custom property in summarizer --- python/src/mas/cli/install/summarizer.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/python/src/mas/cli/install/summarizer.py b/python/src/mas/cli/install/summarizer.py index ad77b0229d..7ece667080 100644 --- a/python/src/mas/cli/install/summarizer.py +++ b/python/src/mas/cli/install/summarizer.py @@ -341,8 +341,9 @@ def facilitiesSummary(self) -> None: "mas_ws_facilities_storage_userfiles_mode", ) # self.printParamSummary(" + User files Storage Size", "mas_ws_facilities_storage_userfiles_size") - self.printParamSummary(" + Properties File", "mas_ws_facilities_properties_file_local") - self.printParamSummary(" + Properties Secret Name", "mas_ws_facilities_properties_secret_name") + self.printParamSummary(" + Custom FACILITIES.properties", "mas_ws_facilities_custom_properties") + self.printParamSummary(" + Custom FACILITIES.properties File path", "mas_ws_facilities_properties_file_local") + self.printParamSummary(" + Custom FACILITIES.properties Secret Name", "mas_ws_facilities_properties_secret_name") if self.getParam("db2_action_facilities") == "none": self.printParamSummary(" + Dedicated DB2 Database", "No") else: From 65ceea8b6717a297b98425dae8232da634a37bd9 Mon Sep 17 00:00:00 2001 From: Shyam Doshi Date: Wed, 27 May 2026 16:50:28 +0530 Subject: [PATCH 07/11] [patch] Update custom secret name --- python/src/mas/cli/install/params.py | 1 - 1 file changed, 1 deletion(-) diff --git a/python/src/mas/cli/install/params.py b/python/src/mas/cli/install/params.py index 35a4bffd46..5676f79f0d 100644 --- a/python/src/mas/cli/install/params.py +++ b/python/src/mas/cli/install/params.py @@ -176,7 +176,6 @@ "mas_ws_facilities_db_maxconnpoolsize", "mas_ws_facilities_properties_file_local", "mas_ws_facilities_custom_properties", - "mas_ws_facilities_properties_secret", "mas_ws_facilities_properties_secret_name", # Special chars "mas_special_characters", From 4bb9604f3bcac276d284b73f204954c14b113ea9 Mon Sep 17 00:00:00 2001 From: Shyam Doshi Date: Wed, 27 May 2026 18:23:40 +0530 Subject: [PATCH 08/11] [patch] Refactor the code --- python/src/mas/cli/install/settings/additionalConfigs.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/src/mas/cli/install/settings/additionalConfigs.py b/python/src/mas/cli/install/settings/additionalConfigs.py index 5fa56b417c..000ad969cd 100644 --- a/python/src/mas/cli/install/settings/additionalConfigs.py +++ b/python/src/mas/cli/install/settings/additionalConfigs.py @@ -234,11 +234,11 @@ def facilitiesPropertiesFile(self) -> None: facilitiesPropertiesSecret = {"apiVersion": "v1", "kind": "Secret", "type": "Opaque", "metadata": {"name": secretName}} self.setParam("mas_ws_facilities_properties_file", "/workspace/facilities/FACILITIES.properties") - self.setParam("mas_ws_facilities_properties_secret", secretName) + self.setParam("mas_ws_facilities_properties_secret_name", secretName) self.facilitiesPropertiesSecret = self.addFilesToSecret(facilitiesPropertiesSecret, facilitiesPropertiesFileLocal, "") else: self.setParam("mas_ws_facilities_properties_file", "") - self.setParam("mas_ws_facilities_properties_secret", "") + self.setParam("mas_ws_facilities_properties_secret_name", "") def addFilesToSecret(self, secretDict: dict, configPath: str, extension: str, keyPrefix: str = "") -> dict: """ From 4a1f297467ee699d6726c310a5f50684f9ea3daf Mon Sep 17 00:00:00 2001 From: Shyam Doshi Date: Wed, 27 May 2026 19:36:37 +0530 Subject: [PATCH 09/11] [patch] Added facilities properties workspace --- tekton/src/params/install.yml.j2 | 12 ++++++++++++ tekton/src/pipelines/mas-install.yml.j2 | 3 +++ .../pipelines/taskdefs/apps/facilities-app.yml.j2 | 9 +++++++++ 3 files changed, 24 insertions(+) diff --git a/tekton/src/params/install.yml.j2 b/tekton/src/params/install.yml.j2 index 2c0239ab5d..a2a163c998 100644 --- a/tekton/src/params/install.yml.j2 +++ b/tekton/src/params/install.yml.j2 @@ -770,6 +770,18 @@ description: ConfigMap with configurations not supported by Tekton type: string default: "" +- name: mas_ws_facilities_custom_properties + description: Flag indicating if custom FACILITIES.properties file is provided + type: string + default: "" +- name: mas_ws_facilities_properties_file_local + description: Path to custom FACILITIES.properties file in pipeline workspace + type: string + default: "" +- name: mas_ws_facilities_properties_secret_name + description: Name of the secret containing custom FACILITIES.properties + type: string + default: "" # AI Service Configuration # ----------------------------------------------------------------------------- diff --git a/tekton/src/pipelines/mas-install.yml.j2 b/tekton/src/pipelines/mas-install.yml.j2 index e091ec8eee..047d2d43bd 100644 --- a/tekton/src/pipelines/mas-install.yml.j2 +++ b/tekton/src/pipelines/mas-install.yml.j2 @@ -19,6 +19,9 @@ spec: - name: shared-db2 # AIService configurations. Contains Scheduling config file for AI workloads for tenant. - name: shared-aiservice-config + # Facilities Properties File + - name: shared-facilities-properties + optional: true params: # 1. Common Parameters diff --git a/tekton/src/pipelines/taskdefs/apps/facilities-app.yml.j2 b/tekton/src/pipelines/taskdefs/apps/facilities-app.yml.j2 index 154f5143a8..b4b4110fee 100644 --- a/tekton/src/pipelines/taskdefs/apps/facilities-app.yml.j2 +++ b/tekton/src/pipelines/taskdefs/apps/facilities-app.yml.j2 @@ -50,11 +50,20 @@ value: $(params.mas_ws_facilities_storage_userfiles_mode) - name: mas_ws_facilities_config_map_name value: $(params.mas_ws_facilities_config_map_name) + - name: mas_ws_facilities_custom_properties + value: $(params.mas_ws_facilities_custom_properties) + - name: mas_ws_facilities_properties_file_local + value: $(params.mas_ws_facilities_properties_file_local) + - name: mas_ws_facilities_properties_secret_name + value: $(params.mas_ws_facilities_properties_secret_name) workspaces: - name: configs workspace: shared-configs - name: pod-templates workspace: shared-pod-templates + - name: facilities + workspace: shared-facilities-properties + optional: true when: - input: "$(params.mas_app_channel_facilities)" operator: notin From df530fa5542c29831143969ba44bbe9682afddb8 Mon Sep 17 00:00:00 2001 From: Shyam Doshi Date: Wed, 27 May 2026 19:50:18 +0530 Subject: [PATCH 10/11] [patch] Remove optional --- tekton/src/pipelines/taskdefs/apps/facilities-app.yml.j2 | 1 - 1 file changed, 1 deletion(-) diff --git a/tekton/src/pipelines/taskdefs/apps/facilities-app.yml.j2 b/tekton/src/pipelines/taskdefs/apps/facilities-app.yml.j2 index b4b4110fee..71d989ec03 100644 --- a/tekton/src/pipelines/taskdefs/apps/facilities-app.yml.j2 +++ b/tekton/src/pipelines/taskdefs/apps/facilities-app.yml.j2 @@ -63,7 +63,6 @@ workspace: shared-pod-templates - name: facilities workspace: shared-facilities-properties - optional: true when: - input: "$(params.mas_app_channel_facilities)" operator: notin From f8da29d590aa15e144f78868204ebdb4c1334aed Mon Sep 17 00:00:00 2001 From: Shyam Doshi Date: Wed, 27 May 2026 21:16:37 +0530 Subject: [PATCH 11/11] [patch] Made changes to set correct params --- python/src/mas/cli/install/settings/additionalConfigs.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/python/src/mas/cli/install/settings/additionalConfigs.py b/python/src/mas/cli/install/settings/additionalConfigs.py index 000ad969cd..8a951d4fb6 100644 --- a/python/src/mas/cli/install/settings/additionalConfigs.py +++ b/python/src/mas/cli/install/settings/additionalConfigs.py @@ -232,12 +232,13 @@ def facilitiesPropertiesFile(self) -> None: if not secretName or secretName == "": secretName = "facilities-properties" - facilitiesPropertiesSecret = {"apiVersion": "v1", "kind": "Secret", "type": "Opaque", "metadata": {"name": secretName}} - self.setParam("mas_ws_facilities_properties_file", "/workspace/facilities/FACILITIES.properties") + facilitiesPropertiesSecret = {"apiVersion": "v1", "kind": "Secret", "type": "Opaque", "metadata": {"name": "pipeline-facilities-properties"}} + # Set the path in workspace where Ansible will find the file + self.setParam("mas_ws_facilities_properties_file_local", "/workspace/facilities/FACILITIES.properties") self.setParam("mas_ws_facilities_properties_secret_name", secretName) self.facilitiesPropertiesSecret = self.addFilesToSecret(facilitiesPropertiesSecret, facilitiesPropertiesFileLocal, "") else: - self.setParam("mas_ws_facilities_properties_file", "") + self.setParam("mas_ws_facilities_properties_file_local", "") self.setParam("mas_ws_facilities_properties_secret_name", "") def addFilesToSecret(self, secretDict: dict, configPath: str, extension: str, keyPrefix: str = "") -> dict: