mas-cli 13.16.0__py3-none-any.whl → 13.17.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of mas-cli might be problematic. Click here for more details.

mas/cli/install/app.py CHANGED
@@ -40,11 +40,16 @@ from mas.cli.validators import (
40
40
  WorkspaceNameFormatValidator,
41
41
  TimeoutFormatValidator,
42
42
  StorageClassValidator,
43
+ JsonValidator,
43
44
  OptimizerInstallPlanValidator
44
45
  )
45
46
 
46
47
  from mas.devops.ocp import createNamespace, getStorageClasses
47
- from mas.devops.mas import getCurrentCatalog, getDefaultStorageClasses
48
+ from mas.devops.mas import (
49
+ getCurrentCatalog,
50
+ getDefaultStorageClasses,
51
+ isVersionEqualOrAfter
52
+ )
48
53
  from mas.devops.sls import findSLSByNamespace
49
54
  from mas.devops.data import getCatalog
50
55
  from mas.devops.tekton import (
@@ -163,7 +168,7 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
163
168
  def processCatalogChoice(self) -> list:
164
169
  self.catalogDigest = self.chosenCatalog["catalog_digest"]
165
170
  self.catalogMongoDbVersion = self.chosenCatalog["mongo_extras_version_default"]
166
- if self.architecture != "s390x":
171
+ if self.architecture != "s390x" and self.architecture != "ppc64le":
167
172
  self.catalogCp4dVersion = self.chosenCatalog["cpd_product_version_default"]
168
173
 
169
174
  applications = {
@@ -175,6 +180,7 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
175
180
  "Optimizer": "mas_optimizer_version",
176
181
  "Predict": "mas_predict_version",
177
182
  "Inspection": "mas_visualinspection_version",
183
+ "Facilities": "mas_facilities_version",
178
184
  }
179
185
  else:
180
186
  applications = {
@@ -194,13 +200,14 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
194
200
  # Generate catalogTable
195
201
  for application, key in applications.items():
196
202
  # Add 9.1-feature channel based off 9.0 to those apps that have not onboarded yet
197
- tempChosenCatalog = self.chosenCatalog[key].copy()
198
- if '9.1.x-feature' not in tempChosenCatalog:
199
- tempChosenCatalog.update({"9.1.x-feature": tempChosenCatalog["9.0.x"]})
203
+ if key in self.chosenCatalog:
204
+ tempChosenCatalog = self.chosenCatalog[key].copy()
205
+ if '9.1.x-feature' not in tempChosenCatalog:
206
+ tempChosenCatalog.update({"9.1.x-feature": tempChosenCatalog["9.0.x"]})
200
207
 
201
- self.catalogTable.append({"": application} | {key.replace(".x", ""): value for key, value in sorted(tempChosenCatalog.items(), reverse=True)})
208
+ self.catalogTable.append({"": application} | {key.replace(".x", ""): value for key, value in sorted(tempChosenCatalog.items(), reverse=True)})
202
209
 
203
- if self.architecture == "s390x":
210
+ if self.architecture == "s390x" or self.architecture == "ppc64le":
204
211
  summary = [
205
212
  "",
206
213
  "<u>Catalog Details</u>",
@@ -326,8 +333,8 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
326
333
 
327
334
  @logMethodCall
328
335
  def configGrafana(self) -> None:
329
- if self.architecture == "s390x":
330
- # We are not supporting Grafana on s390x at the moment
336
+ if self.architecture == "s390x" or self.architecture == "ppc64le":
337
+ # We are not supporting Grafana on s390x /ppc64le at the moment
331
338
  self.setParam("grafana_action", "none")
332
339
  else:
333
340
  try:
@@ -369,7 +376,7 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
369
376
  self.printDescription([
370
377
  f"Unknown catalog {self.getParam('mas_catalog_version')}, please manually select the version of Cloud Pak for Data to use"
371
378
  ])
372
- self.promptForString("Cloud Pak for Data product version", "cpd_product_version", default="4.8.0")
379
+ self.promptForString("Cloud Pak for Data product version", "cpd_product_version", default="5.1.3")
373
380
  logger.debug(f"Using user-provided (prompt) CP4D product version: {self.getParam('cpd_product_version')}")
374
381
  else:
375
382
  logger.debug(f"Using user-provided (flags) CP4D product version: {self.getParam('cpd_product_version')}")
@@ -626,6 +633,7 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
626
633
  self.installManage = True
627
634
  self.isManageFoundation = True
628
635
  self.setParam("is_full_manage", "false")
636
+ self.setParam("mas_app_settings_aio_flag", "false")
629
637
  self.manageAppName = "Manage foundation"
630
638
  self.printDescription([f"{self.manageAppName} installs the following capabilities: User, Security groups, Application configurator and Mobile configurator."])
631
639
  else:
@@ -634,8 +642,7 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
634
642
  if self.installManage:
635
643
  self.configAppChannel("manage")
636
644
 
637
- # Predict for MAS 8.10 is effectively unsupported now, because it has not shipped support for Cloud Pak for Data 4.8 as of June 2023 catalog update
638
- if self.installIoT and self.installManage and self.getParam("mas_channel") != "8.10.x":
645
+ if self.installIoT and self.installManage:
639
646
  self.installPredict = self.yesOrNo("Install Predict")
640
647
  else:
641
648
  self.installPredict = False
@@ -644,7 +651,7 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
644
651
  self.configAppChannel("predict")
645
652
 
646
653
  # Assist is only installable on MAS 9.0.x due to withdrawal of support for Watson Discovery in our managed dependency stack and the inability of Assist 8.x to support this
647
- if not self.getParam("mas_channel").startswith("8."):
654
+ if isVersionEqualOrAfter('9.0.0', self.getParam("mas_channel")):
648
655
  self.installAssist = self.yesOrNo("Install Assist")
649
656
  if self.installAssist:
650
657
  self.configAppChannel("assist")
@@ -659,9 +666,12 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
659
666
  if self.installInspection:
660
667
  self.configAppChannel("visualinspection")
661
668
 
662
- self.installAiBroker = self.yesOrNo("Install AI Broker")
663
- if self.installAiBroker:
664
- self.configAppChannel("aibroker")
669
+ if isVersionEqualOrAfter('9.1.0', self.getParam("mas_channel")) and self.getParam("mas_channel") != '9.1.x-feature':
670
+ self.installFacilities = self.yesOrNo("Install Real Estate and Facilities")
671
+ if self.installFacilities:
672
+ self.configAppChannel("facilities")
673
+ else:
674
+ self.installFacilities = False
665
675
 
666
676
  @logMethodCall
667
677
  def configAppChannel(self, appId):
@@ -756,6 +766,81 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
756
766
  self.promptForString("IBM Cloud API Key", "cos_apikey", isPassword=True)
757
767
  self.promptForString("IBM Cloud Resource Group", "cos_resourcegroup")
758
768
 
769
+ @logMethodCall
770
+ def facilitiesSettings(self) -> None:
771
+ if self.installFacilities:
772
+ self.printH1("Configure Maximo Real Estate and Facilities")
773
+ self.printDescription([
774
+ "Real Estate and Facilities custom configurations"
775
+ ])
776
+ self.printDescription([
777
+ "Maximo Real Estate and Facilities Size:",
778
+ " 1. Small",
779
+ " 2. Medium",
780
+ " 3. Large"
781
+ ])
782
+ self.promptForListSelect("Select the size:", ["small", "medium", "large"], "mas_ws_facilities_size")
783
+
784
+ if self.showAdvancedOptions:
785
+ self.printH2("Maximo Real Estate and Facilities Settings - Advanced")
786
+ self.printDescription([
787
+ "Advanced configurations for Real Estate and Facilities are added through an additional file called facilities-configs.yaml"
788
+ ])
789
+ if self.yesOrNo("Supply extra XML tags for Real Estate and Facilities server.xml"):
790
+ self.promptForString("Real Estate and Facilities Liberty Extension Secret Name", "mas_ws_facilities_liberty_extension_XML")
791
+ if self.yesOrNo("Supply custom AES Encryption Password"):
792
+ self.promptForString("Real Estate and Facilities AES Vault Secret Name", "mas_ws_facilities_vault_secret")
793
+
794
+ self.promptForString("Set Real Estate and Facilities Routes Timeout:", "mas_ws_facilities_routes_timeout", default="600s")
795
+ self.promptForInt("Set Facilities maximum connection poll size:", "mas_ws_facilities_db_maxconnpoolsize", default=200)
796
+
797
+ self.printDescription(["Real Estate and Facilities Persistent Volume Storage Configuration"])
798
+ defaultStorageClasses = getDefaultStorageClasses(self.dynamicClient)
799
+ notUseAutodetectedStorageClasses = False
800
+ if defaultStorageClasses.provider is not None:
801
+ self.storageClassProvider = defaultStorageClasses.provider
802
+ print_formatted_text(HTML(f"<MediumSeaGreen>Storage provider auto-detected: {defaultStorageClasses.providerName}</MediumSeaGreen>"))
803
+ print_formatted_text(HTML(f"<LightSlateGrey> - Storage class (ReadWriteMany): {defaultStorageClasses.rwx}</LightSlateGrey>"))
804
+ print_formatted_text(HTML(f"<LightSlateGrey> - Storage class (ReadWriteOnce): {defaultStorageClasses.rwo}</LightSlateGrey>"))
805
+ if self.yesOrNo("Use the auto-detected storage classes"):
806
+ self.printDescription([
807
+ "Storage Mode for Userfiles PVC:",
808
+ " 1. ReadWriteMany",
809
+ " 2. ReadWriteOnce"
810
+ ])
811
+ storageMode = self.promptForListSelect("Select the storage mode for user files PVC:", ["ReadWriteMany", "ReadWriteOnce"], "mas_ws_facilities_storage_userfiles_mode", default=1)
812
+ _ = self.setParam("mas_ws_facilities_storage_userfiles_class", defaultStorageClasses.rwx) if storageMode == "ReadWriteMany" else self.setParam("mas_ws_facilities_storage_userfiles_class", defaultStorageClasses.rwo)
813
+ self.promptForInt("User file PVC size (Gb):", "mas_ws_facilities_storage_userfiles_size", default=50)
814
+ storageMode = self.promptForListSelect("Select the storage mode for log PVC:", ["ReadWriteMany", "ReadWriteOnce"], "mas_ws_facilities_storage_log_mode", default=1)
815
+ _ = self.setParam("mas_ws_facilities_storage_log_class", defaultStorageClasses.rwx) if storageMode == "ReadWriteMany" else self.setParam("mas_ws_facilities_storage_log_class", defaultStorageClasses.rwo)
816
+ self.promptForInt("Log PVC size (Gb):", "mas_ws_facilities_storage_log_size", default=30)
817
+ else:
818
+ notUseAutodetectedStorageClasses = True
819
+ if defaultStorageClasses.provider is None or notUseAutodetectedStorageClasses:
820
+ for storageClass in getStorageClasses(self.dynamicClient):
821
+ print_formatted_text(HTML(f"<LightSlateGrey> - {storageClass.metadata.name}</LightSlateGrey>"))
822
+ self.promptForString("Select storage class for user files PVC:", "mas_ws_facilities_storage_userfiles_class")
823
+ self.promptForString("Select storage class for log PVC:", "mas_ws_facilities_storage_log_class")
824
+ self.printDescription([
825
+ "Storage Mode for Userfiles PVC:",
826
+ " 1. ReadWriteMany",
827
+ " 2. ReadWriteOnce"
828
+ ])
829
+ self.promptForListSelect("Select the storage mode for user files PVC:", ["ReadWriteMany", "ReadWriteOnce"], "mas_ws_facilities_storage_userfiles_mode", default=1)
830
+ self.promptForListSelect("Select the storage mode for log PVC:", ["ReadWriteMany", "ReadWriteOnce"], "mas_ws_facilities_storage_log_mode", default=1)
831
+ self.promptForInt("User file PVC size (Gb):", "mas_ws_facilities_storage_userfiles_size", default=50)
832
+ self.promptForInt("Log PVC size (Gb):", "mas_ws_facilities_storage_log_size", default=30)
833
+
834
+ if self.yesOrNo("Supply configuration for dedicated workflow agents"):
835
+ print_formatted_text(HTML("<LightSlateGrey> Example: '[{\"name\":\"dwfa1\",\"members\":[{\"name\": \"u1\", \"class\": \"user\"}]}, {\"name\":\"dwfa2\",\"members\":[{\"name\": \"u2\", \"class\": \"user\"},{\"name\":\"g1\", \"class\":\"group\"}]}]' </LightSlateGrey>"))
836
+ self.promptForString("Dedicated Workflow Agent JSON:", "mas_ws_facilities_dwfagents", validator=JsonValidator())
837
+
838
+ # If advanced options is selected, we need to create a file to add props not supported by Tekton
839
+ self.selectLocalConfigDir()
840
+ facilitiesConfigsPath = path.join(self.localConfigDir, "facilities-configs.yaml")
841
+ self.generateFacilitiesCfg(destination=facilitiesConfigsPath)
842
+ self.setParam("mas_ws_facilities_config_file", "/workspace/configs/facilities-configs.yaml")
843
+
759
844
  @logMethodCall
760
845
  def chooseInstallFlavour(self) -> None:
761
846
  self.printH1("Choose Install Mode")
@@ -773,6 +858,7 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
773
858
  " - Enable optional Maximo Manage integration Cognos Analytics and Watson Studio Local",
774
859
  " - Enable optional Maximo Predict integration with SPSS",
775
860
  " - Enable optional IBM Turbonomic integration",
861
+ " - Enable optional Real Estate and Facilities configurations",
776
862
  " - Customize Db2 node affinity and tolerations, memory, cpu, and storage settings (when using the IBM Db2 Universal Operator)",
777
863
  " - Choose alternative Apache Kafka providers (default to Strimzi)",
778
864
  " - Customize Grafana storage settings"
@@ -818,7 +904,7 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
818
904
  self.optimizerSettings()
819
905
  self.predictSettings()
820
906
  self.assistSettings()
821
- self.aibrokerSettings()
907
+ self.facilitiesSettings()
822
908
 
823
909
  # Dependencies
824
910
  self.configMongoDb()
@@ -848,7 +934,7 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
848
934
  self.installPredict = False
849
935
  self.installInspection = False
850
936
  self.installOptimizer = False
851
- self.installAiBroker = False
937
+ self.installFacilities = False
852
938
  self.deployCP4D = False
853
939
  self.db2SetAffinity = False
854
940
  self.db2SetTolerations = False
@@ -862,7 +948,8 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
862
948
  "approval_monitor": {"id": "app-cfg-monitor"}, # After Monitor workspace has been configured
863
949
  "approval_optimizer": {"id": "app-cfg-optimizer"}, # After Optimizer workspace has been configured
864
950
  "approval_predict": {"id": "app-cfg-predict"}, # After Predict workspace has been configured
865
- "approval_visualinspection": {"id": "app-cfg-visualinspection"} # After Visual Inspection workspace has been configured
951
+ "approval_visualinspection": {"id": "app-cfg-visualinspection"}, # After Visual Inspection workspace has been configured
952
+ "approval_facilities": {"id": "app-cfg-facilities"}, # After Facilities workspace has been configured 
866
953
  }
867
954
 
868
955
  self.configGrafana()
@@ -945,10 +1032,6 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
945
1032
  if value is not None and value != "":
946
1033
  self.setParam("mas_app_channel_visualinspection", value)
947
1034
  self.installInspection = True
948
- elif key == "aibroker_channel":
949
- if value is not None and value != "":
950
- self.setParam("mas_app_channel_aibroker", value)
951
- self.installAiBroker = True
952
1035
  elif key == "optimizer_channel":
953
1036
  if value is not None and value != "":
954
1037
  self.setParam("mas_app_channel_optimizer", value)
@@ -956,6 +1039,10 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
956
1039
  elif key == "optimizer_plan":
957
1040
  if value is not None and value != "":
958
1041
  self.setParam("mas_app_plan_optimizer", value)
1042
+ elif key == "facilities_channel":
1043
+ if value is not None and value != "":
1044
+ self.setParam("mas_app_channel_facilities", value)
1045
+ self.installFacilities = True
959
1046
 
960
1047
  # Manage advanced settings that need extra processing
961
1048
  elif key == "mas_app_settings_server_bundle_size":
@@ -1017,6 +1104,9 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
1017
1104
  self.setParam("mas_manual_cert_mgmt", False)
1018
1105
  self.manualCertsDir = None
1019
1106
 
1107
+ elif key == "enable_ipv6":
1108
+ self.setParam("enable_ipv6", True)
1109
+
1020
1110
  # Fail if there's any arguments we don't know how to handle
1021
1111
  else:
1022
1112
  print(f"Unknown option: {key} {value}")
@@ -1030,6 +1120,14 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
1030
1120
  # Configure Storage and Access mode
1031
1121
  self.manageStorageAndAccessMode()
1032
1122
 
1123
+ if self.installFacilities:
1124
+ # Verifiy if any of the props that needs to be in a file are given
1125
+ if self.getParam("mas_ws_facilities_storage_log_size") != "" or self.getParam("mas_ws_facilities_storage_userfiles_size") != "" or self.getParam("mas_ws_facilities_db_maxconnpoolsize") or self.getParam("mas_ws_facilities_dwfagents"):
1126
+ self.selectLocalConfigDir()
1127
+ facilitiesConfigsPath = path.join(self.localConfigDir, "facilities-configs.yaml")
1128
+ self.generateFacilitiesCfg(destination=facilitiesConfigsPath)
1129
+ self.setParam("mas_ws_facilities_config_map_name", "facilities-config")
1130
+
1033
1131
  # Load the catalog information
1034
1132
  self.chosenCatalog = getCatalog(self.getParam("mas_catalog_version"))
1035
1133
 
@@ -1120,6 +1218,13 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
1120
1218
  self.slsLicenseFile()
1121
1219
  self.manualCertificates()
1122
1220
 
1221
+ if not self.noConfirm and not self.waitForPVC:
1222
+ self.printDescription(["If you are using storage classes that utilize 'WaitForFirstConsumer' binding mode choose 'No' at the prompt below"])
1223
+ self.waitForPVC = self.yesOrNo("Wait for PVCs to bind")
1224
+
1225
+ if not self.waitForPVC:
1226
+ self.setParam("no_wait_for_pvc", True)
1227
+
1123
1228
  # Show a summary of the installation configuration
1124
1229
  self.printH1("Non-Interactive Install Command")
1125
1230
  self.printDescription([
@@ -1147,12 +1252,6 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
1147
1252
  self.printH1("Launch Install")
1148
1253
  pipelinesNamespace = f"mas-{self.getParam('mas_instance_id')}-pipelines"
1149
1254
 
1150
- if not self.noConfirm:
1151
- self.printDescription(["If you are using storage classes that utilize 'WaitForFirstConsumer' binding mode choose 'No' at the prompt below"])
1152
- wait = self.yesOrNo("Wait for PVCs to bind")
1153
- else:
1154
- wait = False
1155
-
1156
1255
  with Halo(text='Validating OpenShift Pipelines installation', spinner=self.spinner) as h:
1157
1256
  installOpenShiftPipelines(self.dynamicClient)
1158
1257
  h.stop_and_persist(symbol=self.successIcon, text="OpenShift Pipelines Operator is installed and ready to use")
@@ -1164,7 +1263,7 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
1164
1263
  instanceId=self.getParam("mas_instance_id"),
1165
1264
  storageClass=self.pipelineStorageClass,
1166
1265
  accessMode=self.pipelineStorageAccessMode,
1167
- waitForBind=wait,
1266
+ waitForBind=self.waitForPVC,
1168
1267
  configureRBAC=(self.getParam("service_account_name") == "")
1169
1268
  )
1170
1269
  prepareInstallSecrets(
@@ -113,6 +113,9 @@ class installArgBuilderMixin():
113
113
  if self.getParam('mas_enable_walkme') == "false":
114
114
  command += f" --disable-walkme{newline}"
115
115
 
116
+ if self.getParam('enable_ipv6') is True:
117
+ command += f" --enable-ipv6{newline}"
118
+
116
119
  # Storage
117
120
  # -----------------------------------------------------------------------------
118
121
  command += f" --storage-class-rwo \"{self.getParam('storage_class_rwo')}\""
@@ -168,6 +171,8 @@ class installArgBuilderMixin():
168
171
  command += f" --predict-channel \"{self.getParam('mas_app_channel_predict')}\"{newline}"
169
172
  if self.installInspection:
170
173
  command += f" --visualinspection-channel \"{self.getParam('mas_app_channel_visualinspection')}\"{newline}"
174
+ if self.installFacilities:
175
+ command += f" --facilities-channel \"{self.getParam('mas_app_channel_facilities')}\"{newline}"
171
176
 
172
177
  # Arcgis
173
178
  # -----------------------------------------------------------------------------
@@ -232,29 +237,70 @@ class installArgBuilderMixin():
232
237
  if self.getParam('mas_appws_bindings_health_wsl_flag') == "true":
233
238
  command += f" --manage-health-wsl{newline}"
234
239
 
240
+ # Facilities Advanced Settings
241
+ # -----------------------------------------------------------------------------
242
+ # TODO: Fix type for storage sizes and max conn pool size
243
+ if self.installFacilities:
244
+ if self.getParam('mas_ws_facilities_size') != "":
245
+ command += f" --facilities-size \"{self.getParam('mas_ws_facilities_size')}\"{newline}"
246
+
247
+ if self.getParam('mas_ws_facilities_pull_policy') != "":
248
+ command += f" --facilities-pull-policy \"{self.getParam('mas_ws_facilities_pull_policy')}\"{newline}"
249
+
250
+ if self.getParam('mas_ws_facilities_routes_timeout') != "":
251
+ command += f" --facilities-routes-timeout \"{self.getParam('mas_ws_facilities_routes_timeout')}\"{newline}"
252
+
253
+ if self.getParam('mas_ws_facilities_liberty_extension_XML') != "":
254
+ command += f" --facilities-xml-extension \"{self.getParam('mas_ws_facilities_liberty_extension_XML')}\"{newline}"
255
+
256
+ if self.getParam('mas_ws_facilities_vault_secret') != "":
257
+ command += f" --facilities-vault-secret \"{self.getParam('mas_ws_facilities_vault_secret')}\"{newline}"
258
+
259
+ if self.getParam('mas_ws_facilities_dwfagents') != "":
260
+ command += f" --facilities-dwfagent \'{self.getParam('mas_ws_facilities_dwfagents')}\'{newline}"
261
+
262
+ if self.getParam('mas_ws_facilities_db_maxconnpoolsize') != "":
263
+ command += f" --facilities-maxconnpoolsize \"{self.getParam('mas_ws_facilities_db_maxconnpoolsize')}\"{newline}"
264
+
265
+ if self.getParam('mas_ws_facilities_storage_log_class') != "":
266
+ command += f" --facilities-log-storage-class \"{self.getParam('mas_ws_facilities_storage_log_class')}\"{newline}"
267
+ if self.getParam('mas_ws_facilities_storage_log_mode') != "":
268
+ command += f" --facilities-log-storage-mode \"{self.getParam('mas_ws_facilities_storage_log_mode')}\"{newline}"
269
+ if self.getParam('mas_ws_facilities_storage_log_size') != "":
270
+ command += f" --facilities-log-storage-size \"{self.getParam('mas_ws_facilities_storage_log_size')}\"{newline}"
271
+
272
+ if self.getParam('mas_ws_facilities_storage_userfiles_class') != "":
273
+ command += f" --facilities-userfiles-storage-class \"{self.getParam('mas_ws_facilities_storage_userfiles_class')}\"{newline}"
274
+ if self.getParam('mas_ws_facilities_storage_userfiles_mode') != "":
275
+ command += f" --facilities-userfiles-storage-mode \"{self.getParam('mas_ws_facilities_storage_userfiles_mode')}\"{newline}"
276
+ if self.getParam('mas_ws_facilities_storage_userfiles_size') != "":
277
+ command += f" --facilities-userfiles-storage-size \"{self.getParam('mas_ws_facilities_storage_userfiles_size')}\"{newline}"
278
+
235
279
  # IBM Cloud Pak for Data
236
280
  # -----------------------------------------------------------------------------
237
281
  if self.getParam('cpd_product_version') != "":
238
282
  command += f" --cp4d-version \"{self.getParam('cpd_product_version')}\""
239
- if self.getParam('cpd_install_spss') == "install":
283
+ if self.getParam('cpd_install_spss') == "true":
240
284
  command += " --cp4d-install-spss"
241
- if self.getParam('cpd_install_cognos') == "install":
285
+ if self.getParam('cpd_install_cognos') == "true":
242
286
  command += " --cp4d-install-cognos"
243
- if self.getParam('cpd_install_ws') == "install":
287
+ if self.getParam('cpd_install_ws') == "true":
244
288
  command += " --cp4d-install-ws"
245
- if self.getParam('cpd_install_wml') == "install":
289
+ if self.getParam('cpd_install_wml') == "true":
246
290
  command += " --cp4d-install-wml"
247
- if self.getParam('cpd_install_ae') == "install":
291
+ if self.getParam('cpd_install_ae') == "true":
248
292
  command += " --cp4d-install-ae"
249
293
  command += newline
250
294
 
251
295
  # IBM Db2 Universal Operator
252
296
  # -----------------------------------------------------------------------------
253
- if self.getParam('db2_action_system') == "install" or self.getParam('db2_action_manage') == "install":
297
+ if self.getParam('db2_action_system') == "install" or self.getParam('db2_action_manage') == "install" or self.getParam('db2_action_facilities') == "install":
254
298
  if self.getParam('db2_action_system') == "install":
255
299
  command += f" --db2-system{newline}"
256
300
  if self.getParam('db2_action_manage') == "install":
257
301
  command += f" --db2-manage{newline}"
302
+ if self.getParam('db2_action_facilities') == "install":
303
+ command += f" --db2-facilities{newline}"
258
304
 
259
305
  if self.getParam('db2_channel') != "":
260
306
  command += f" --db2-channel \"{self.getParam('db2_channel')}\"{newline}"
@@ -333,9 +379,9 @@ class installArgBuilderMixin():
333
379
  # Kafka - Event Streams
334
380
  # -----------------------------------------------------------------------------
335
381
  if self.getParam('eventstreams_instance_name') != "":
336
- command += f" --eventstreams-resource-group \"{self.getParam('eventstreams_resource_group')}\""
337
- command += f" --eventstreams-instance-name \"{self.getParam('eventstreams_instance_name')}\""
338
- command += f" --eventstreams-instance-location \"{self.getParam('eventstreams_instance_location')}\"{newline}"
382
+ command += f" --eventstreams-resource-group \"{self.getParam('eventstreams_resourcegroup')}\""
383
+ command += f" --eventstreams-instance-name \"{self.getParam('eventstreams_name')}\""
384
+ command += f" --eventstreams-instance-location \"{self.getParam('eventstreams_location')}\"{newline}"
339
385
 
340
386
  # COS
341
387
  # -----------------------------------------------------------------------------
@@ -395,6 +441,8 @@ class installArgBuilderMixin():
395
441
  command += f" --approval-predict \"{self.getParam('approval_predict')}\"{newline}"
396
442
  if self.getParam('approval_visualinspection') != "":
397
443
  command += f" --approval-visualinspection \"{self.getParam('approval_visualinspection')}\"{newline}"
444
+ if self.getParam('approval_facilities') != "":
445
+ command += f" --approval-facilities \"{self.getParam('approval_facilities')}\"{newline}"
398
446
 
399
447
  # More Options
400
448
  # -----------------------------------------------------------------------------