mas-cli 14.0.0__tar.gz → 15.0.0__tar.gz
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-14.0.0 → mas_cli-15.0.0}/PKG-INFO +1 -1
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/__init__.py +1 -1
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/aiservice/install/app.py +209 -133
- mas_cli-15.0.0/src/mas/cli/aiservice/install/argBuilder.py +180 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/aiservice/install/argParser.py +138 -373
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/aiservice/install/params.py +30 -50
- mas_cli-15.0.0/src/mas/cli/aiservice/install/summarizer.py +134 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/cli.py +1 -1
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/install/app.py +2 -2
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/install/params.py +0 -23
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/ibm-mas-tekton.yaml +8748 -11094
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas_cli.egg-info/PKG-INFO +1 -1
- mas_cli-14.0.0/src/mas/cli/aiservice/install/argBuilder.py +0 -246
- mas_cli-14.0.0/src/mas/cli/aiservice/install/summarizer.py +0 -192
- {mas_cli-14.0.0 → mas_cli-15.0.0}/MANIFEST.in +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/README.rst +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/pyproject.toml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/setup.cfg +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/setup.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/aiservice/install/__init__.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/displayMixins.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/gencfg.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/install/__init__.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/install/argBuilder.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/install/argParser.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/install/catalogs.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/install/settings/__init__.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/install/settings/additionalConfigs.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/install/settings/db2Settings.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/install/settings/kafkaSettings.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/install/settings/manageSettings.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/install/settings/mongodbSettings.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/install/settings/turbonomicSettings.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/install/summarizer.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/facilities-configs.yml.j2 +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/jdbccfg.yml.j2 +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-data-dictionary-assetdatadictionary.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-bascfg.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-coreidp.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-actions.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-auth.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-datapower.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-devops.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-dm.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-dsc.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-edgeconfig.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-fpl.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-guardian.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-iot.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-mbgx.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-mfgx.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-monitor.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-orgmgmt.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-provision.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-registry.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-state.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-webui.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-healthextaccelerator.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-healthextworkspace.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-imagestitching.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-manageaccelerators.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-manageapp.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-manageworkspace.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-slackproxy.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-pushnotificationcfg.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-scimcfg.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-slscfg.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-smtpcfg.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-suite.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-visualinspection.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-sls-licenseservice.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-data-dictionary-assetdatadictionary.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-bascfg.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-coreidp.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-actions.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-auth.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-datapower.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-devops.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-dm.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-dsc.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-edgeconfig.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-fpl.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-guardian.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-iot.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-mbgx.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-mfgx.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-monitor.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-orgmgmt.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-provision.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-registry.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-state.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-webui.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-healthextaccelerator.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-healthextworkspace.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-imagestitching.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-manageaccelerators.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-manageapp.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-manageworkspace.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-slackproxy.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-pushnotificationcfg.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-scimcfg.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-slscfg.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-smtpcfg.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-suite.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-visualinspection.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-sls-licenseservice.yml +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/templates/suite_mongocfg.yml.j2 +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/uninstall/__init__.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/uninstall/app.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/uninstall/argParser.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/update/__init__.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/update/app.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/update/argParser.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/upgrade/__init__.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/upgrade/app.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/upgrade/argParser.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/upgrade/settings/__init__.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas/cli/validators.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas-cli +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas_cli.egg-info/SOURCES.txt +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas_cli.egg-info/dependency_links.txt +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas_cli.egg-info/requires.txt +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/src/mas_cli.egg-info/top_level.txt +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/test/test_help.py +0 -0
- {mas_cli-14.0.0 → mas_cli-15.0.0}/test/test_install.py +0 -0
|
@@ -32,9 +32,9 @@ from .params import requiredParams, optionalParams
|
|
|
32
32
|
|
|
33
33
|
from ...install.catalogs import supportedCatalogs
|
|
34
34
|
|
|
35
|
-
#
|
|
35
|
+
# AI Service relies on SLS, which in turn depends on MongoDB.
|
|
36
36
|
# SLS will utilize the shared MongoDB resource that would be used by MAS if it were deployed within the same OpenShift cluster.
|
|
37
|
-
#
|
|
37
|
+
# AI Service utilizes two distinct databases: DB2 is employed by the AiBroker component.
|
|
38
38
|
# By default, AiService will deploy DB2 within the same namespace as MAS (db2u), but it will be configured as a separate DB2 instance.
|
|
39
39
|
|
|
40
40
|
from ...install.settings.mongodbSettings import MongoDbSettingsMixin
|
|
@@ -56,10 +56,10 @@ from mas.devops.data import getCatalog
|
|
|
56
56
|
from mas.devops.tekton import (
|
|
57
57
|
installOpenShiftPipelines,
|
|
58
58
|
updateTektonDefinitions,
|
|
59
|
-
|
|
59
|
+
prepareAiServicePipelinesNamespace,
|
|
60
60
|
prepareInstallSecrets,
|
|
61
61
|
testCLI,
|
|
62
|
-
|
|
62
|
+
launchAiServiceInstallPipeline
|
|
63
63
|
)
|
|
64
64
|
|
|
65
65
|
logger = logging.getLogger(__name__)
|
|
@@ -80,7 +80,7 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
80
80
|
self.catalogDigest = self.chosenCatalog["catalog_digest"]
|
|
81
81
|
self.catalogMongoDbVersion = self.chosenCatalog["mongo_extras_version_default"]
|
|
82
82
|
applications = {
|
|
83
|
-
"Aibroker": "
|
|
83
|
+
"Aibroker": "aiservice_version",
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
self.catalogReleases = {}
|
|
@@ -96,9 +96,6 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
96
96
|
for application, key in applications.items():
|
|
97
97
|
# Add 9.1-feature channel based off 9.0 to those apps that have not onboarded yet
|
|
98
98
|
tempChosenCatalog = self.chosenCatalog[key].copy()
|
|
99
|
-
if '9.1.x-feature' not in tempChosenCatalog:
|
|
100
|
-
tempChosenCatalog.update({"9.1.x-feature": tempChosenCatalog["9.0.x"]})
|
|
101
|
-
|
|
102
99
|
self.catalogTable.append({"": application} | {key.replace(".x", ""): value for key, value in sorted(tempChosenCatalog.items(), reverse=True)})
|
|
103
100
|
|
|
104
101
|
if self.architecture == "s390x":
|
|
@@ -132,10 +129,10 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
132
129
|
" - Must start with a lowercase letter",
|
|
133
130
|
" - Must end with a lowercase letter or a number"
|
|
134
131
|
])
|
|
135
|
-
self.promptForString("Instance ID", "
|
|
132
|
+
self.promptForString("Instance ID", "aiservice_instance_id", validator=InstanceIDFormatValidator())
|
|
136
133
|
|
|
137
134
|
if self.slsMode == 2 and not self.getParam("sls_namespace"):
|
|
138
|
-
self.setParam("sls_namespace", f"mas-{self.getParam('
|
|
135
|
+
self.setParam("sls_namespace", f"mas-{self.getParam('aiservice_instance_id')}-sls")
|
|
139
136
|
|
|
140
137
|
self.configOperationMode()
|
|
141
138
|
|
|
@@ -145,18 +142,6 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
145
142
|
self.interactiveMode = True
|
|
146
143
|
|
|
147
144
|
self.storageClassProvider = "custom"
|
|
148
|
-
self.installAssist = False
|
|
149
|
-
self.installIoT = False
|
|
150
|
-
self.installMonitor = False
|
|
151
|
-
self.installManage = False
|
|
152
|
-
self.installPredict = False
|
|
153
|
-
self.installInspection = False
|
|
154
|
-
self.installOptimizer = False
|
|
155
|
-
self.installFacilities = False
|
|
156
|
-
self.installAiBroker = True
|
|
157
|
-
self.deployCP4D = False
|
|
158
|
-
self.db2SetAffinity = False
|
|
159
|
-
self.db2SetTolerations = False
|
|
160
145
|
self.slsLicenseFileLocal = None
|
|
161
146
|
|
|
162
147
|
if simplified:
|
|
@@ -185,7 +170,9 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
185
170
|
if self.devMode:
|
|
186
171
|
self.configAppChannel("aibroker")
|
|
187
172
|
|
|
188
|
-
self.
|
|
173
|
+
self.aiServiceSettings()
|
|
174
|
+
self.aiServiceTenantSettings()
|
|
175
|
+
self.aiServiceIntegrations()
|
|
189
176
|
|
|
190
177
|
# Dependencies
|
|
191
178
|
self.configMongoDb()
|
|
@@ -201,18 +188,6 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
201
188
|
self.setParam("mongodb_action", "install")
|
|
202
189
|
|
|
203
190
|
self.storageClassProvider = "custom"
|
|
204
|
-
self.installAssist = False
|
|
205
|
-
self.installIoT = False
|
|
206
|
-
self.installMonitor = False
|
|
207
|
-
self.installManage = False
|
|
208
|
-
self.installPredict = False
|
|
209
|
-
self.installInspection = False
|
|
210
|
-
self.installFacilities = False
|
|
211
|
-
self.installOptimizer = False
|
|
212
|
-
self.installAiBroker = True
|
|
213
|
-
self.deployCP4D = False
|
|
214
|
-
self.db2SetAffinity = False
|
|
215
|
-
self.db2SetTolerations = False
|
|
216
191
|
self.slsLicenseFileLocal = None
|
|
217
192
|
|
|
218
193
|
self.approvals = {
|
|
@@ -233,6 +208,54 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
233
208
|
if value is not None:
|
|
234
209
|
self.setParam(key, value)
|
|
235
210
|
|
|
211
|
+
elif key == "install_minio_aiservice":
|
|
212
|
+
incompatibleWithMinioInstall = [
|
|
213
|
+
"aiservice_storage_provider",
|
|
214
|
+
"aiservice_storage_accesskey",
|
|
215
|
+
"aiservice_storage_secretkey",
|
|
216
|
+
"aiservice_storage_host",
|
|
217
|
+
"aiservice_storage_port",
|
|
218
|
+
"aiservice_storage_ssl",
|
|
219
|
+
"aiservice_s3_endpoint_url",
|
|
220
|
+
"aiservice_storage_region",
|
|
221
|
+
"aiservice_tenant_s3_access_key",
|
|
222
|
+
"aiservice_tenant_s3_secret_key",
|
|
223
|
+
"aiservice_tenant_s3_endpoint_url",
|
|
224
|
+
"aiservice_tenant_s3_region"
|
|
225
|
+
]
|
|
226
|
+
if value is None:
|
|
227
|
+
for uKey in incompatibleWithMinioInstall:
|
|
228
|
+
if vars(self.args)[uKey] is None:
|
|
229
|
+
self.fatalError(f"Parameter is required when --install-minio is not set: {uKey}")
|
|
230
|
+
elif value is not None and value == "true":
|
|
231
|
+
# If user is installing Minio in-cluster then we know how to connect to it already
|
|
232
|
+
for uKey in incompatibleWithMinioInstall:
|
|
233
|
+
if vars(self.args)[uKey] is not None:
|
|
234
|
+
self.fatalError(f"Unsupported parameter for --install-minio: {uKey}")
|
|
235
|
+
for rKey in ["minio_root_user", "minio_root_password"]:
|
|
236
|
+
if vars(self.args)[rKey] is None:
|
|
237
|
+
self.fatalError(f"Missing required parameter for --install-minio: {rKey}")
|
|
238
|
+
|
|
239
|
+
self.setParam("aiservice_storage_provider", "minio")
|
|
240
|
+
|
|
241
|
+
self.setParam("aiservice_storage_accesskey", self.args.minio_root_user)
|
|
242
|
+
self.setParam("aiservice_storage_secretkey", self.args.minio_root_password)
|
|
243
|
+
|
|
244
|
+
# TODO: Duplication -- we already have the URL, why do we need all the individual parts,
|
|
245
|
+
# especially when we don't need them for the tenant?
|
|
246
|
+
self.setParam("aiservice_storage_host", "minio-service.minio.svc.cluster.local")
|
|
247
|
+
self.setParam("aiservice_storage_port", "9000")
|
|
248
|
+
self.setParam("aiservice_storage_ssl", "false")
|
|
249
|
+
self.setParam("aiservice_s3_endpoint_url", "http://minio-service.minio.svc.cluster.local:9000")
|
|
250
|
+
self.setParam("aiservice_storage_region", "none")
|
|
251
|
+
|
|
252
|
+
self.setParam("aiservice_tenant_s3_access_key", self.args.minio_root_user)
|
|
253
|
+
self.setParam("aiservice_tenant_s3_secret_key", self.args.minio_root_password)
|
|
254
|
+
self.setParam("aiservice_tenant_s3_endpoint_url", "http://minio-service.minio.svc.cluster.local:9000")
|
|
255
|
+
self.setParam("aiservice_tenant_s3_region", "none")
|
|
256
|
+
else:
|
|
257
|
+
self.fatalError(f"Unsupported value for --install-minio: {value}")
|
|
258
|
+
|
|
236
259
|
elif key == "non_prod":
|
|
237
260
|
if not value:
|
|
238
261
|
self.operationalMode = 1
|
|
@@ -258,18 +281,10 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
258
281
|
|
|
259
282
|
# We check for both None and "" values for the application channel parameters
|
|
260
283
|
# value = None means the parameter wasn't set at all
|
|
261
|
-
# value = "" means the
|
|
262
|
-
elif key == "
|
|
284
|
+
# value = "" means the parameter was explicitly set to "don't install this application"
|
|
285
|
+
elif key == "aiservice_channel":
|
|
263
286
|
if value is not None and value != "":
|
|
264
|
-
self.setParam("
|
|
265
|
-
self.installAiBroker = True
|
|
266
|
-
|
|
267
|
-
# Manage advanced settings that need extra processing
|
|
268
|
-
elif key == "mas_app_settings_server_bundle_size":
|
|
269
|
-
if value is not None:
|
|
270
|
-
self.setParam(key, value)
|
|
271
|
-
if value in ["jms", "snojms"]:
|
|
272
|
-
self.setParam("mas_app_settings_persistent_volumes_flag", "true")
|
|
287
|
+
self.setParam("aiservice_channel", value)
|
|
273
288
|
|
|
274
289
|
# MongoDB
|
|
275
290
|
elif key == "mongodb_namespace":
|
|
@@ -284,7 +299,7 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
284
299
|
self.setParam("sls_action", "install")
|
|
285
300
|
elif key == "dedicated_sls":
|
|
286
301
|
if value:
|
|
287
|
-
self.setParam("sls_namespace", f"mas-{self.args.
|
|
302
|
+
self.setParam("sls_namespace", f"mas-{self.args.aiservice_instance_id}-sls")
|
|
288
303
|
|
|
289
304
|
# These settings are used by the CLI rather than passed to the PipelineRun
|
|
290
305
|
elif key == "storage_accessmode":
|
|
@@ -337,8 +352,7 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
337
352
|
|
|
338
353
|
# License file is only optional for existing SLS instance
|
|
339
354
|
if self.slsLicenseFileLocal is None:
|
|
340
|
-
|
|
341
|
-
self.fatalError("--license-file must be set for new SLS install")
|
|
355
|
+
self.fatalError("--license-file must be set for new SLS install")
|
|
342
356
|
|
|
343
357
|
# Once we've processed the inputs, we should validate the catalog source & prompt to accept the license terms
|
|
344
358
|
if not self.devMode:
|
|
@@ -354,7 +368,7 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
354
368
|
|
|
355
369
|
# We use the presence of --mas-instance-id to determine whether
|
|
356
370
|
# the CLI is being started in interactive mode or not
|
|
357
|
-
instanceId = args.
|
|
371
|
+
instanceId = args.aiservice_instance_id
|
|
358
372
|
|
|
359
373
|
# Properties for arguments that control the behavior of the CLI
|
|
360
374
|
self.noConfirm = args.no_confirm
|
|
@@ -401,6 +415,9 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
401
415
|
# UDS install has not been supported since the January 2024 catalog update
|
|
402
416
|
self.setParam("uds_action", "install-dro")
|
|
403
417
|
|
|
418
|
+
# Install Db2 for AI Service
|
|
419
|
+
self.setParam("db2_action_aiservice", "install")
|
|
420
|
+
|
|
404
421
|
# User must either provide the configuration via numerous command line arguments, or the interactive prompts
|
|
405
422
|
if instanceId is None:
|
|
406
423
|
self.interactiveMode(simplified=args.simplified, advanced=args.advanced)
|
|
@@ -432,7 +449,7 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
432
449
|
self.createTektonFileWithDigest()
|
|
433
450
|
|
|
434
451
|
self.printH1("Launch Install")
|
|
435
|
-
pipelinesNamespace = f"
|
|
452
|
+
pipelinesNamespace = f"aiservice-{self.getParam('aiservice_instance_id')}-pipelines"
|
|
436
453
|
|
|
437
454
|
if not self.noConfirm:
|
|
438
455
|
self.printDescription(["If you are using storage classes that utilize 'WaitForFirstConsumer' binding mode choose 'No' at the prompt below"])
|
|
@@ -446,9 +463,9 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
446
463
|
|
|
447
464
|
with Halo(text=f'Preparing namespace ({pipelinesNamespace})', spinner=self.spinner) as h:
|
|
448
465
|
createNamespace(self.dynamicClient, pipelinesNamespace)
|
|
449
|
-
|
|
466
|
+
prepareAiServicePipelinesNamespace(
|
|
450
467
|
dynClient=self.dynamicClient,
|
|
451
|
-
instanceId=self.getParam("
|
|
468
|
+
instanceId=self.getParam("aiservice_instance_id"),
|
|
452
469
|
storageClass=self.pipelineStorageClass,
|
|
453
470
|
accessMode=self.pipelineStorageAccessMode,
|
|
454
471
|
waitForBind=wait,
|
|
@@ -456,7 +473,7 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
456
473
|
)
|
|
457
474
|
prepareInstallSecrets(
|
|
458
475
|
dynClient=self.dynamicClient,
|
|
459
|
-
|
|
476
|
+
namespace=pipelinesNamespace,
|
|
460
477
|
slsLicenseFile=self.slsLicenseFileSecret,
|
|
461
478
|
additionalConfigs=self.additionalConfigsSecret,
|
|
462
479
|
podTemplates=self.podTemplatesSecret,
|
|
@@ -475,13 +492,13 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
475
492
|
updateTektonDefinitions(pipelinesNamespace, self.tektonDefsPath)
|
|
476
493
|
h.stop_and_persist(symbol=self.successIcon, text=f"Latest Tekton definitions are installed (v{self.version})")
|
|
477
494
|
|
|
478
|
-
with Halo(text=f"Submitting PipelineRun for {self.getParam('
|
|
479
|
-
pipelineURL =
|
|
495
|
+
with Halo(text=f"Submitting PipelineRun for {self.getParam('aiservice_instance_id')} install", spinner=self.spinner) as h:
|
|
496
|
+
pipelineURL = launchAiServiceInstallPipeline(dynClient=self.dynamicClient, params=self.params)
|
|
480
497
|
if pipelineURL is not None:
|
|
481
|
-
h.stop_and_persist(symbol=self.successIcon, text=f"PipelineRun for {self.getParam('
|
|
498
|
+
h.stop_and_persist(symbol=self.successIcon, text=f"PipelineRun for {self.getParam('aiservice_instance_id')} install submitted")
|
|
482
499
|
print_formatted_text(HTML(f"\nView progress:\n <Cyan><u>{pipelineURL}</u></Cyan>\n"))
|
|
483
500
|
else:
|
|
484
|
-
h.stop_and_persist(symbol=self.failureIcon, text=f"Failed to submit PipelineRun for {self.getParam('
|
|
501
|
+
h.stop_and_persist(symbol=self.failureIcon, text=f"Failed to submit PipelineRun for {self.getParam('aiservice_instance_id')} install, see log file for details")
|
|
485
502
|
print()
|
|
486
503
|
|
|
487
504
|
@logMethodCall
|
|
@@ -499,81 +516,140 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
499
516
|
|
|
500
517
|
@logMethodCall
|
|
501
518
|
def chooseInstallFlavour(self) -> None:
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
519
|
+
self.showAdvancedOptions = False
|
|
520
|
+
|
|
521
|
+
def aiServiceSettings(self) -> None:
|
|
522
|
+
self.printH1("AI Service Settings")
|
|
523
|
+
|
|
524
|
+
# Ask about MinIO installation FIRST (moved from aiServiceDependencies)
|
|
525
|
+
self.printH2("Storage Configuration")
|
|
526
|
+
self.printDescription(["AI Service requires object storage for pipelines, tenants, and templates. You can either install MinIO in-cluster or connect to external storage."])
|
|
527
|
+
|
|
528
|
+
if self.yesOrNo("Install Minio"):
|
|
529
|
+
# Only ask for MinIO credentials
|
|
530
|
+
self.promptForString("minio root username", "minio_root_user")
|
|
531
|
+
self.promptForString("minio root password", "minio_root_password", isPassword=True)
|
|
532
|
+
|
|
533
|
+
# Auto-set MinIO storage defaults (same as non-interactive mode)
|
|
534
|
+
self._setMinioStorageDefaults()
|
|
535
|
+
else:
|
|
536
|
+
# Ask for external storage configuration
|
|
537
|
+
self.printDescription(["Configure your external object storage (S3-compatible) connection details:"])
|
|
538
|
+
self.promptForString("Storage provider", "aiservice_storage_provider")
|
|
539
|
+
self.promptForString("Storage access key", "aiservice_storage_accesskey")
|
|
540
|
+
self.promptForString("Storage secret key", "aiservice_storage_secretkey", isPassword=True)
|
|
541
|
+
self.promptForString("Storage host", "aiservice_storage_host")
|
|
542
|
+
self.promptForString("Storage port", "aiservice_storage_port")
|
|
543
|
+
self.promptForString("Storage ssl", "aiservice_storage_ssl")
|
|
544
|
+
self.promptForString("Storage region", "aiservice_storage_region")
|
|
545
|
+
self.promptForString("Storage pipelines bucket", "aiservice_storage_pipelines_bucket")
|
|
546
|
+
self.promptForString("Storage tenants bucket", "aiservice_storage_tenants_bucket")
|
|
547
|
+
self.promptForString("Storage templates bucket", "aiservice_storage_templates_bucket")
|
|
548
|
+
|
|
549
|
+
# S3 parameters are now auto-derived from storage configuration
|
|
550
|
+
self._deriveS3ParametersFromStorage()
|
|
551
|
+
|
|
552
|
+
def aiServiceTenantSettings(self) -> None:
|
|
553
|
+
self.printH1("AI Service Tenant Settings")
|
|
554
|
+
self.promptForString("Tenant entitlement type", "tenant_entitlement_type")
|
|
555
|
+
self.promptForString("Tenant start date", "tenant_entitlement_start_date")
|
|
556
|
+
self.promptForString("Tenant end date", "tenant_entitlement_end_date")
|
|
557
|
+
|
|
558
|
+
def _deriveS3ParametersFromStorage(self) -> None:
|
|
559
|
+
"""
|
|
560
|
+
Auto-derive S3 and tenant S3 parameters from the aiservice_storage_* parameters.
|
|
561
|
+
This reuses the values provided for kmodel object storage to avoid redundant prompts.
|
|
562
|
+
"""
|
|
563
|
+
storage_provider = self.getParam("aiservice_storage_provider")
|
|
564
|
+
storage_host = self.getParam("aiservice_storage_host")
|
|
565
|
+
storage_port = self.getParam("aiservice_storage_port")
|
|
566
|
+
storage_ssl = self.getParam("aiservice_storage_ssl")
|
|
567
|
+
storage_region = self.getParam("aiservice_storage_region")
|
|
568
|
+
storage_accesskey = self.getParam("aiservice_storage_accesskey")
|
|
569
|
+
storage_secretkey = self.getParam("aiservice_storage_secretkey")
|
|
570
|
+
|
|
571
|
+
# Build endpoint URL from storage configuration
|
|
572
|
+
protocol = "https" if storage_ssl == "true" else "http"
|
|
573
|
+
|
|
574
|
+
if storage_provider == "minio":
|
|
575
|
+
endpoint_url = f"{protocol}://{storage_host}:{storage_port}"
|
|
576
|
+
elif storage_provider == "s3":
|
|
577
|
+
# For AWS S3, construct proper endpoint
|
|
578
|
+
if storage_region and storage_region != "none":
|
|
579
|
+
endpoint_url = f"{protocol}://s3.{storage_region}.amazonaws.com"
|
|
580
|
+
else:
|
|
581
|
+
endpoint_url = f"{protocol}://s3.amazonaws.com"
|
|
582
|
+
else:
|
|
583
|
+
# For other providers, construct basic endpoint
|
|
584
|
+
endpoint_url = f"{protocol}://{storage_host}:{storage_port}" if storage_port else f"{protocol}://{storage_host}"
|
|
585
|
+
|
|
586
|
+
# Set S3 parameters (reusing storage configuration)
|
|
587
|
+
self.setParam("aiservice_s3_bucket_prefix", "aiservice") # Default prefix
|
|
588
|
+
if endpoint_url:
|
|
589
|
+
self.setParam("aiservice_s3_endpoint_url", endpoint_url)
|
|
590
|
+
self.setParam("aiservice_s3_region", storage_region if storage_region else "none")
|
|
591
|
+
|
|
592
|
+
# Set tenant S3 parameters (reusing same storage configuration)
|
|
593
|
+
self.setParam("aiservice_tenant_s3_bucket_prefix", "tenant") # Default tenant prefix
|
|
594
|
+
self.setParam("aiservice_tenant_s3_access_key", storage_accesskey)
|
|
595
|
+
self.setParam("aiservice_tenant_s3_secret_key", storage_secretkey)
|
|
596
|
+
if endpoint_url:
|
|
597
|
+
self.setParam("aiservice_tenant_s3_endpoint_url", endpoint_url)
|
|
598
|
+
self.setParam("aiservice_tenant_s3_region", storage_region if storage_region else "none")
|
|
599
|
+
|
|
600
|
+
def _setMinioStorageDefaults(self) -> None:
|
|
601
|
+
"""
|
|
602
|
+
Set MinIO storage defaults when MinIO is being installed in-cluster.
|
|
603
|
+
This mirrors the logic from non-interactive mode.
|
|
604
|
+
"""
|
|
605
|
+
self.setParam("aiservice_storage_provider", "minio")
|
|
606
|
+
self.setParam("aiservice_storage_accesskey", self.getParam("minio_root_user"))
|
|
607
|
+
self.setParam("aiservice_storage_secretkey", self.getParam("minio_root_password"))
|
|
608
|
+
self.setParam("aiservice_storage_host", "minio-service.minio.svc.cluster.local")
|
|
609
|
+
self.setParam("aiservice_storage_port", "9000")
|
|
610
|
+
self.setParam("aiservice_storage_ssl", "false")
|
|
611
|
+
self.setParam("aiservice_storage_region", "none")
|
|
612
|
+
|
|
613
|
+
# Set default bucket names
|
|
614
|
+
self.setParam("aiservice_storage_pipelines_bucket", "km-pipelines")
|
|
615
|
+
self.setParam("aiservice_storage_tenants_bucket", "km-tenants")
|
|
616
|
+
self.setParam("aiservice_storage_templates_bucket", "km-templates")
|
|
617
|
+
|
|
618
|
+
def aiServiceIntegrations(self) -> None:
|
|
619
|
+
self.printH1("WatsonX Integration")
|
|
620
|
+
self.printDescription([
|
|
621
|
+
"This CLI section configures the integration between the AI Service and IBM watsonx.ai. AI Service",
|
|
622
|
+
"uses watsonx for model deployment and inferencing.",
|
|
623
|
+
"",
|
|
624
|
+
"The WatsonX API key must be a **platform API key** associated with a user that has at least:",
|
|
625
|
+
"- **Editor permission** for the project",
|
|
626
|
+
"- **Viewer permission** for the space",
|
|
627
|
+
"You can generate this key by following IBM's documentation: https://www.ibm.com/docs/en/watsonx/w-and-w/2.2.0?topic=tutorials-generating-api-keys#api-keys__platform__title__1",
|
|
628
|
+
"",
|
|
629
|
+
"The endpoint URL is your WatsonX Machine Learning service URL. It can be found in the watsonx.ai",
|
|
630
|
+
"documentation: https://cloud.ibm.com/apidocs/watsonx-ai-cp/watsonx-ai-cp-2.2.0#endpoint-url",
|
|
631
|
+
"",
|
|
632
|
+
"The project ID refers to your specific watsonx.ai project where your ML models and assets are stored.",
|
|
633
|
+
"",
|
|
634
|
+
])
|
|
635
|
+
self.promptForString("Watsonxai api key", "aiservice_watsonxai_apikey", isPassword=True)
|
|
636
|
+
self.promptForString("Watsonxai machine learning url", "aiservice_watsonxai_url")
|
|
637
|
+
self.promptForString("Watsonxai project id", "aiservice_watsonxai_project_id")
|
|
638
|
+
|
|
639
|
+
self.printH1("RSL Integration")
|
|
505
640
|
self.printDescription([
|
|
506
|
-
"
|
|
507
|
-
"
|
|
641
|
+
"RSL (Reliable Strategy Library) connects to strategic asset management via STRATEGIZEAPI.",
|
|
642
|
+
"",
|
|
643
|
+
"RSL URL: https://api.rsl-service.suite.maximo.com (standard for all customers)",
|
|
644
|
+
"Org ID: Get from MAS Manage > System Properties > 'mxe.rs.rslorgid'",
|
|
645
|
+
"Token: Use your IBM entitlement key (same as MAS installation)",
|
|
646
|
+
"",
|
|
647
|
+
"Note: Future versions will auto-configure these from MAS Manage.",
|
|
648
|
+
""
|
|
508
649
|
])
|
|
509
|
-
self.
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
if self.installAiBroker:
|
|
513
|
-
self.printH2("AI Service Settings - Storage, WatsonX, MariaDB details")
|
|
514
|
-
self.printDescription(["Customise AI Broker details"])
|
|
515
|
-
self.promptForString("Storage provider", "mas_aibroker_storage_provider")
|
|
516
|
-
self.promptForString("Storage access key", "mas_aibroker_storage_accesskey")
|
|
517
|
-
self.promptForString("Storage secret key", "mas_aibroker_storage_secretkey", isPassword=True)
|
|
518
|
-
self.promptForString("Storage host", "mas_aibroker_storage_host")
|
|
519
|
-
self.promptForString("Storage port", "mas_aibroker_storage_port")
|
|
520
|
-
self.promptForString("Storage ssl", "mas_aibroker_storage_ssl")
|
|
521
|
-
self.promptForString("Storage region", "mas_aibroker_storage_region")
|
|
522
|
-
self.promptForString("Storage pipelines bucket", "mas_aibroker_storage_pipelines_bucket")
|
|
523
|
-
self.promptForString("Storage tenants bucket", "mas_aibroker_storage_tenants_bucket")
|
|
524
|
-
self.promptForString("Storage templates bucket", "mas_aibroker_storage_templates_bucket")
|
|
525
|
-
|
|
526
|
-
self.promptForString("Watsonxai api key", "mas_aibroker_watsonxai_apikey", isPassword=True)
|
|
527
|
-
self.promptForString("Watsonxai machine learning url", "mas_aibroker_watsonxai_url")
|
|
528
|
-
self.promptForString("Watsonxai project id", "mas_aibroker_watsonxai_project_id")
|
|
529
|
-
|
|
530
|
-
self.promptForString("Database host", "mas_aibroker_db_host")
|
|
531
|
-
self.promptForString("Database port", "mas_aibroker_db_port")
|
|
532
|
-
self.promptForString("Database user", "mas_aibroker_db_user")
|
|
533
|
-
self.promptForString("Database name", "mas_aibroker_db_database")
|
|
534
|
-
self.promptForString("Database Secretname", "mas_aibroker_db_secret_name", isPassword=True)
|
|
535
|
-
self.promptForString("Database password", "mas_aibroker_db_secret_value", isPassword=True)
|
|
536
|
-
|
|
537
|
-
if self.getParam("mas_app_channel_aibroker") != "9.0.x":
|
|
538
|
-
self.promptForString("Mariadb username", "mariadb_user")
|
|
539
|
-
self.promptForString("Mariadb password", "mariadb_password", isPassword=True)
|
|
540
|
-
self.promptForString("Tenant entitlement type", "tenant_entitlement_type")
|
|
541
|
-
self.promptForString("Tenant start date", "tenant_entitlement_start_date")
|
|
542
|
-
self.promptForString("Tenant end date", "tenant_entitlement_end_date")
|
|
543
|
-
self.promptForString("S3 bucket prefix", "mas_aibroker_s3_bucket_prefix")
|
|
544
|
-
self.promptForString("S3 endpoint url", "mas_aibroker_s3_endpoint_url")
|
|
545
|
-
self.promptForString("S3 bucket prefix (tenant level)", "mas_aibroker_tenant_s3_bucket_prefix")
|
|
546
|
-
self.promptForString("S3 region (tenant level)", "mas_aibroker_tenant_s3_region")
|
|
547
|
-
self.promptForString("S3 endpoint url (tenant level)", "mas_aibroker_tenant_s3_endpoint_url")
|
|
548
|
-
self.promptForString("S3 access key (tenant level)", "mas_aibroker_tenant_s3_access_key", isPassword=True)
|
|
549
|
-
self.promptForString("S3 secret key (tenant level)", "mas_aibroker_tenant_s3_secret_key", isPassword=True)
|
|
550
|
-
self.promptForString("RSL url", "rsl_url")
|
|
551
|
-
self.promptForString("ORG Id of RSL", "rsl_org_id")
|
|
552
|
-
self.promptForString("Token for RSL", "rsl_token", isPassword=True)
|
|
553
|
-
self.yesOrNo("Install minio", "install_minio_aiservice")
|
|
554
|
-
if self.getParam("install_minio_aiservice") == "true":
|
|
555
|
-
self.promptForString("minio root username", "minio_root_user")
|
|
556
|
-
self.promptForString("minio root password", "minio_root_password", isPassword=True)
|
|
557
|
-
self.yesOrNo("Install SLS", "install_sls_aiservice")
|
|
558
|
-
if self.getParam("install_sls_aiservice") != "true":
|
|
559
|
-
self.promptForString("SLS secret name", "mas_aibroker_sls_secret_name")
|
|
560
|
-
self.promptForString("SLS registration key", "mas_aibroker_sls_registration_key")
|
|
561
|
-
self.promptForString("SLS URL", "mas_aibroker_sls_url")
|
|
562
|
-
self.promptForString("SLS CA certificate", "mas_aibroker_sls_ca_cert")
|
|
563
|
-
self.yesOrNo("Install DRO", "install_dro_aiservice")
|
|
564
|
-
if self.getParam("install_dro_aiservice") != "true":
|
|
565
|
-
self.promptForString("DRO secret name", "mas_aibroker_dro_secret_name")
|
|
566
|
-
self.promptForString("DRO API key", "mas_aibroker_dro_api_key")
|
|
567
|
-
self.promptForString("DRO URL", "mas_aibroker_dro_url")
|
|
568
|
-
self.promptForString("DRO CA certificate", "mas_aibroker_dro_ca_cert")
|
|
569
|
-
self.yesOrNo("Install DB2", "install_db2_aiservice")
|
|
570
|
-
if self.getParam("install_db2_aiservice") != "true":
|
|
571
|
-
self.promptForString("DB2 username", "mas_aibroker_db2_username")
|
|
572
|
-
self.promptForString("DB2 password", "mas_aibroker_db2_password")
|
|
573
|
-
self.promptForString("DB2 JDBC URL", "mas_aibroker_db2_jdbc_url")
|
|
574
|
-
self.promptForString("DB2 SSL enabled (yes/no)", "mas_aibroker_db2_ssl_enabled")
|
|
575
|
-
self.promptForString("DB2 CA certificate", "mas_aibroker_db2_ca_cert")
|
|
576
|
-
# self.promptForString("Environment type", "environment_type")
|
|
650
|
+
self.promptForString("RSL url", "rsl_url")
|
|
651
|
+
self.promptForString("ORG Id of RSL", "rsl_org_id")
|
|
652
|
+
self.promptForString("Token for RSL", "rsl_token", isPassword=True)
|
|
577
653
|
|
|
578
654
|
# These are all candidates to centralise in a new mixin used by both install and aiservice-install
|
|
579
655
|
|
|
@@ -656,7 +732,7 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
656
732
|
releaseCompleter = WordCompleter(sorted(self.catalogReleases, reverse=True))
|
|
657
733
|
releaseSelection = self.promptForString("Select release", completer=releaseCompleter)
|
|
658
734
|
|
|
659
|
-
self.setParam("
|
|
735
|
+
self.setParam("aiservice_channel", self.catalogReleases[releaseSelection])
|
|
660
736
|
|
|
661
737
|
@logMethodCall
|
|
662
738
|
def validateCatalogSource(self):
|
|
@@ -688,7 +764,7 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
688
764
|
self.printH1("License Terms")
|
|
689
765
|
self.printDescription([
|
|
690
766
|
"To continue with the installation, you must accept the license terms:",
|
|
691
|
-
self.licenses[f"aibroker-{self.getParam('
|
|
767
|
+
self.licenses[f"aibroker-{self.getParam('aiservice_channel')}"]
|
|
692
768
|
])
|
|
693
769
|
|
|
694
770
|
if self.noConfirm:
|