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/__init__.py +1 -1
- mas/cli/aiservice/install/__init__.py +11 -0
- mas/cli/aiservice/install/app.py +810 -0
- mas/cli/aiservice/install/argBuilder.py +232 -0
- mas/cli/aiservice/install/argParser.py +742 -0
- mas/cli/aiservice/install/params.py +120 -0
- mas/cli/aiservice/install/summarizer.py +193 -0
- mas/cli/cli.py +19 -3
- mas/cli/gencfg.py +23 -0
- mas/cli/install/app.py +129 -30
- mas/cli/install/argBuilder.py +57 -9
- mas/cli/install/argParser.py +116 -140
- mas/cli/install/catalogs.py +7 -4
- mas/cli/install/params.py +20 -3
- mas/cli/install/settings/additionalConfigs.py +4 -0
- mas/cli/install/settings/db2Settings.py +82 -36
- mas/cli/install/settings/manageSettings.py +9 -33
- mas/cli/install/settings/mongodbSettings.py +1 -1
- mas/cli/install/summarizer.py +36 -27
- mas/cli/templates/facilities-configs.yml.j2 +25 -0
- mas/cli/templates/ibm-mas-tekton.yaml +11693 -4677
- mas/cli/update/app.py +11 -6
- mas/cli/upgrade/app.py +42 -8
- mas/cli/upgrade/argParser.py +7 -0
- mas/cli/upgrade/settings/__init__.py +19 -0
- mas/cli/validators.py +13 -0
- {mas_cli-13.16.0.data → mas_cli-13.17.2.data}/scripts/mas-cli +4 -0
- {mas_cli-13.16.0.dist-info → mas_cli-13.17.2.dist-info}/METADATA +1 -1
- {mas_cli-13.16.0.dist-info → mas_cli-13.17.2.dist-info}/RECORD +31 -23
- {mas_cli-13.16.0.dist-info → mas_cli-13.17.2.dist-info}/WHEEL +1 -1
- {mas_cli-13.16.0.dist-info → mas_cli-13.17.2.dist-info}/top_level.txt +0 -0
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
|
|
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
|
-
|
|
198
|
-
|
|
199
|
-
|
|
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
|
-
|
|
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="
|
|
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
|
-
|
|
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
|
|
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.
|
|
663
|
-
|
|
664
|
-
self.
|
|
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.
|
|
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.
|
|
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=
|
|
1266
|
+
waitForBind=self.waitForPVC,
|
|
1168
1267
|
configureRBAC=(self.getParam("service_account_name") == "")
|
|
1169
1268
|
)
|
|
1170
1269
|
prepareInstallSecrets(
|
mas/cli/install/argBuilder.py
CHANGED
|
@@ -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') == "
|
|
283
|
+
if self.getParam('cpd_install_spss') == "true":
|
|
240
284
|
command += " --cp4d-install-spss"
|
|
241
|
-
if self.getParam('cpd_install_cognos') == "
|
|
285
|
+
if self.getParam('cpd_install_cognos') == "true":
|
|
242
286
|
command += " --cp4d-install-cognos"
|
|
243
|
-
if self.getParam('cpd_install_ws') == "
|
|
287
|
+
if self.getParam('cpd_install_ws') == "true":
|
|
244
288
|
command += " --cp4d-install-ws"
|
|
245
|
-
if self.getParam('cpd_install_wml') == "
|
|
289
|
+
if self.getParam('cpd_install_wml') == "true":
|
|
246
290
|
command += " --cp4d-install-wml"
|
|
247
|
-
if self.getParam('cpd_install_ae') == "
|
|
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('
|
|
337
|
-
command += f" --eventstreams-instance-name \"{self.getParam('
|
|
338
|
-
command += f" --eventstreams-instance-location \"{self.getParam('
|
|
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
|
# -----------------------------------------------------------------------------
|