mas-cli 13.2.0__tar.gz → 13.4.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-13.2.0 → mas_cli-13.4.0}/PKG-INFO +1 -1
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/__init__.py +1 -1
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/cli.py +3 -2
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/install/app.py +88 -24
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/install/argBuilder.py +18 -3
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/install/argParser.py +39 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/install/catalogs.py +2 -1
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/install/params.py +4 -2
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/install/settings/additionalConfigs.py +14 -1
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/install/summarizer.py +10 -2
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/ibm-mas-tekton.yaml +353 -124
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/update/app.py +8 -6
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas_cli.egg-info/PKG-INFO +1 -1
- {mas_cli-13.2.0 → mas_cli-13.4.0}/MANIFEST.in +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/README.rst +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/pyproject.toml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/setup.cfg +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/setup.py +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/displayMixins.py +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/gencfg.py +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/install/__init__.py +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/install/settings/__init__.py +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/install/settings/db2Settings.py +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/install/settings/kafkaSettings.py +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/install/settings/manageSettings.py +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/install/settings/mongodbSettings.py +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/install/settings/turbonomicSettings.py +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/jdbccfg.yml.j2 +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-data-dictionary-assetdatadictionary.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-bascfg.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-coreidp.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-actions.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-auth.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-datapower.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-devops.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-dm.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-dsc.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-edgeconfig.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-fpl.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-guardian.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-iot.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-mbgx.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-mfgx.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-monitor.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-orgmgmt.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-provision.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-registry.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-state.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-webui.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-healthextaccelerator.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-healthextworkspace.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-imagestitching.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-manageaccelerators.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-manageapp.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-manageworkspace.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-slackproxy.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-pushnotificationcfg.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-scimcfg.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-slscfg.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-smtpcfg.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-suite.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-visualinspection.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-sls-licenseservice.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-data-dictionary-assetdatadictionary.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-bascfg.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-coreidp.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-actions.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-auth.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-datapower.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-devops.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-dm.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-dsc.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-edgeconfig.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-fpl.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-guardian.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-iot.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-mbgx.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-mfgx.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-monitor.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-orgmgmt.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-provision.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-registry.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-state.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-webui.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-healthextaccelerator.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-healthextworkspace.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-imagestitching.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-manageaccelerators.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-manageapp.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-manageworkspace.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-slackproxy.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-pushnotificationcfg.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-scimcfg.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-slscfg.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-smtpcfg.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-suite.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-visualinspection.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-sls-licenseservice.yml +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/templates/suite_mongocfg.yml.j2 +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/uninstall/__init__.py +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/uninstall/app.py +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/uninstall/argParser.py +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/update/__init__.py +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/update/argParser.py +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/upgrade/__init__.py +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/upgrade/app.py +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/upgrade/argParser.py +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas/cli/validators.py +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas-cli +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas_cli.egg-info/SOURCES.txt +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas_cli.egg-info/dependency_links.txt +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas_cli.egg-info/requires.txt +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/src/mas_cli.egg-info/top_level.txt +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/test/test_help.py +0 -0
- {mas_cli-13.2.0 → mas_cli-13.4.0}/test/test_install.py +0 -0
|
@@ -117,7 +117,7 @@ class BaseApp(PrintMixin, PromptMixin):
|
|
|
117
117
|
logging.getLogger('asyncio').setLevel(logging.INFO)
|
|
118
118
|
|
|
119
119
|
# Supports extended semver, unlike mas.cli.__version__
|
|
120
|
-
self.version = "13.
|
|
120
|
+
self.version = "13.4.0"
|
|
121
121
|
self.h1count = 0
|
|
122
122
|
self.h2count = 0
|
|
123
123
|
|
|
@@ -132,9 +132,10 @@ class BaseApp(PrintMixin, PromptMixin):
|
|
|
132
132
|
# Initialize the dictionary that will hold the parameters we pass to a PipelineRun
|
|
133
133
|
self.params = dict()
|
|
134
134
|
|
|
135
|
-
# These dicts will hold the additional-configs, pod-templates and manual certificates secrets
|
|
135
|
+
# These dicts will hold the additional-configs, pod-templates, sls license file and manual certificates secrets
|
|
136
136
|
self.additionalConfigsSecret = None
|
|
137
137
|
self.podTemplatesSecret = None
|
|
138
|
+
self.slsLicenseFileSecret = None
|
|
138
139
|
self.certsSecret = None
|
|
139
140
|
|
|
140
141
|
self._isSNO = None
|
|
@@ -45,6 +45,7 @@ from mas.cli.validators import (
|
|
|
45
45
|
|
|
46
46
|
from mas.devops.ocp import createNamespace, getStorageClasses
|
|
47
47
|
from mas.devops.mas import getCurrentCatalog, getDefaultStorageClasses
|
|
48
|
+
from mas.devops.sls import findSLSByNamespace
|
|
48
49
|
from mas.devops.data import getCatalog
|
|
49
50
|
from mas.devops.tekton import (
|
|
50
51
|
installOpenShiftPipelines,
|
|
@@ -158,9 +159,6 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
|
|
|
158
159
|
year = date[:2]
|
|
159
160
|
return f" - {monthName} 20{year} Update\n <Orange><u>https://ibm-mas.github.io/cli/catalogs/{name}</u></Orange>"
|
|
160
161
|
|
|
161
|
-
def formatRelease(self, release: str) -> str:
|
|
162
|
-
return f"{release} ... {self.catalogReleases[release]['core']}"
|
|
163
|
-
|
|
164
162
|
@logMethodCall
|
|
165
163
|
def processCatalogChoice(self) -> list:
|
|
166
164
|
self.catalogDigest = self.chosenCatalog["catalog_digest"]
|
|
@@ -184,17 +182,23 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
|
|
|
184
182
|
"Manage": "mas_manage_version",
|
|
185
183
|
}
|
|
186
184
|
|
|
187
|
-
self.catalogReleases =
|
|
185
|
+
self.catalogReleases = {}
|
|
188
186
|
self.catalogTable = []
|
|
189
187
|
|
|
190
188
|
# Dynamically fetch the channels from the chosen catalog
|
|
191
189
|
# based on mas core
|
|
192
190
|
for channel in self.chosenCatalog["mas_core_version"]:
|
|
193
|
-
|
|
191
|
+
# {"9.1-feature": "9.1.x-feature"}
|
|
192
|
+
self.catalogReleases.update({channel.replace('.x', ''): channel})
|
|
194
193
|
|
|
195
194
|
# Generate catalogTable
|
|
196
195
|
for application, key in applications.items():
|
|
197
|
-
|
|
196
|
+
# 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"]})
|
|
200
|
+
|
|
201
|
+
self.catalogTable.append({"": application} | {key.replace(".x", ""): value for key, value in sorted(tempChosenCatalog.items(), reverse=True)})
|
|
198
202
|
|
|
199
203
|
if self.architecture == "s390x":
|
|
200
204
|
summary = [
|
|
@@ -202,7 +206,7 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
|
|
|
202
206
|
"<u>Catalog Details</u>",
|
|
203
207
|
f"Catalog Image: icr.io/cpopen/ibm-maximo-operator-catalog:{self.getParam('mas_catalog_version')}",
|
|
204
208
|
f"Catalog Digest: {self.catalogDigest}",
|
|
205
|
-
f"MAS Releases: {', '.join(self.catalogReleases)}",
|
|
209
|
+
f"MAS Releases: {', '.join(sorted(self.catalogReleases, reverse=True))}",
|
|
206
210
|
f"MongoDb: {self.catalogMongoDbVersion}",
|
|
207
211
|
]
|
|
208
212
|
else:
|
|
@@ -211,7 +215,7 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
|
|
|
211
215
|
"<u>Catalog Details</u>",
|
|
212
216
|
f"Catalog Image: icr.io/cpopen/ibm-maximo-operator-catalog:{self.getParam('mas_catalog_version')}",
|
|
213
217
|
f"Catalog Digest: {self.catalogDigest}",
|
|
214
|
-
f"MAS Releases: {', '.join(self.catalogReleases)}",
|
|
218
|
+
f"MAS Releases: {', '.join(sorted(self.catalogReleases, reverse=True))}",
|
|
215
219
|
f"Cloud Pak for Data: {self.catalogCp4dVersion}",
|
|
216
220
|
f"MongoDb: {self.catalogMongoDbVersion}",
|
|
217
221
|
]
|
|
@@ -254,28 +258,64 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
|
|
|
254
258
|
self.printDescription(catalogSummary)
|
|
255
259
|
self.printDescription([
|
|
256
260
|
"",
|
|
257
|
-
"
|
|
258
|
-
"
|
|
261
|
+
"Two types of release are available:",
|
|
262
|
+
" - GA releases of Maximo Application Suite are supported under IBM's standard 3+1+3 support lifecycle policy.",
|
|
263
|
+
" - 'Feature' releases allow early access to new features for evaluation in non-production environments and are only supported through to the next GA release.",
|
|
259
264
|
""
|
|
260
265
|
])
|
|
261
266
|
|
|
262
267
|
print(tabulate(self.catalogTable, headers="keys", tablefmt="simple_grid"))
|
|
263
268
|
|
|
264
|
-
releaseCompleter = WordCompleter(self.catalogReleases)
|
|
269
|
+
releaseCompleter = WordCompleter(sorted(self.catalogReleases, reverse=True))
|
|
265
270
|
releaseSelection = self.promptForString("Select release", completer=releaseCompleter)
|
|
266
271
|
|
|
267
|
-
self.setParam("mas_channel", releaseSelection)
|
|
272
|
+
self.setParam("mas_channel", self.catalogReleases[releaseSelection])
|
|
268
273
|
|
|
269
274
|
@logMethodCall
|
|
270
275
|
def configSLS(self) -> None:
|
|
271
|
-
self.printH1("Configure
|
|
276
|
+
self.printH1("Configure AppPoint Licensing")
|
|
277
|
+
self.printDescription(
|
|
278
|
+
[
|
|
279
|
+
"By default the MAS instance will be configured to use a cluster-shared License, this provides a shared pool of AppPoints available to all MAS instances on the cluster.",
|
|
280
|
+
"",
|
|
281
|
+
]
|
|
282
|
+
)
|
|
283
|
+
|
|
284
|
+
self.slsMode = 1
|
|
285
|
+
self.slsLicenseFileLocal = None
|
|
286
|
+
|
|
287
|
+
if self.showAdvancedOptions:
|
|
288
|
+
self.printDescription(
|
|
289
|
+
[
|
|
290
|
+
"Alternatively you may choose to install using a dedicated license only available to this MAS instance.",
|
|
291
|
+
" 1. Install MAS with Cluster-Shared License (AppPoints)",
|
|
292
|
+
" 2. Install MAS with Dedicated License (AppPoints)",
|
|
293
|
+
]
|
|
294
|
+
)
|
|
295
|
+
self.slsMode = self.promptForInt("SLS Mode", default=1)
|
|
296
|
+
|
|
297
|
+
if self.slsMode not in [1, 2]:
|
|
298
|
+
self.fatalError(f"Invalid selection: {self.slsMode}")
|
|
299
|
+
|
|
300
|
+
if not (self.slsMode == 2 and not self.getParam("sls_namespace")):
|
|
301
|
+
sls_namespace = "ibm-sls" if self.slsMode == 1 else self.getParam("sls_namespace")
|
|
302
|
+
if findSLSByNamespace(sls_namespace, dynClient=self.dynamicClient):
|
|
303
|
+
print_formatted_text(HTML(f"<MediumSeaGreen>SLS auto-detected: {sls_namespace}</MediumSeaGreen>"))
|
|
304
|
+
print()
|
|
305
|
+
if not self.yesOrNo("Upload/Replace the license file"):
|
|
306
|
+
self.setParam("sls_action", "gencfg")
|
|
307
|
+
return
|
|
308
|
+
|
|
272
309
|
self.slsLicenseFileLocal = self.promptForFile("License file", mustExist=True, envVar="SLS_LICENSE_FILE_LOCAL")
|
|
310
|
+
self.setParam("sls_action", "install")
|
|
311
|
+
|
|
312
|
+
@logMethodCall
|
|
313
|
+
def configDRO(self) -> None:
|
|
273
314
|
self.promptForString("Contact e-mail address", "uds_contact_email")
|
|
274
315
|
self.promptForString("Contact first name", "uds_contact_firstname")
|
|
275
316
|
self.promptForString("Contact last name", "uds_contact_lastname")
|
|
276
317
|
|
|
277
318
|
if self.showAdvancedOptions:
|
|
278
|
-
self.promptForString("IBM Suite License Services (SLS) Namespace", "sls_namespace", default="ibm-sls")
|
|
279
319
|
self.promptForString("IBM Data Reporter Operator (DRO) Namespace", "dro_namespace", default="redhat-marketplace")
|
|
280
320
|
|
|
281
321
|
@logMethodCall
|
|
@@ -396,6 +436,9 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
|
|
|
396
436
|
])
|
|
397
437
|
self.promptForString("Workspace name", "mas_workspace_name", validator=WorkspaceNameFormatValidator())
|
|
398
438
|
|
|
439
|
+
if self.slsMode == 2 and not self.getParam("sls_namespace"):
|
|
440
|
+
self.setParam("sls_namespace", f"mas-{self.getParam('mas_instance_id')}-sls")
|
|
441
|
+
|
|
399
442
|
self.configOperationMode()
|
|
400
443
|
self.configCATrust()
|
|
401
444
|
self.configDNSAndCerts()
|
|
@@ -747,6 +790,7 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
|
|
|
747
790
|
|
|
748
791
|
# Licensing (SLS and DRO)
|
|
749
792
|
self.configSLS()
|
|
793
|
+
self.configDRO()
|
|
750
794
|
self.configICRCredentials()
|
|
751
795
|
|
|
752
796
|
# MAS Core
|
|
@@ -795,6 +839,7 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
|
|
|
795
839
|
self.deployCP4D = False
|
|
796
840
|
self.db2SetAffinity = False
|
|
797
841
|
self.db2SetTolerations = False
|
|
842
|
+
self.slsLicenseFileLocal = None
|
|
798
843
|
|
|
799
844
|
self.approvals = {
|
|
800
845
|
"approval_core": {"id": "suite-verify"}, # After Core Platform verification has completed
|
|
@@ -904,6 +949,21 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
|
|
|
904
949
|
if value in ["jms", "snojms"]:
|
|
905
950
|
self.setParam("mas_app_settings_persistent_volumes_flag", "true")
|
|
906
951
|
|
|
952
|
+
# MongoDB
|
|
953
|
+
elif key == "mongodb_namespace":
|
|
954
|
+
if value is not None and value != "":
|
|
955
|
+
self.setParam(key, value)
|
|
956
|
+
self.setParam("sls_mongodb_cfg_file", f"/workspace/configs/mongo-{value}.yml")
|
|
957
|
+
|
|
958
|
+
# SLS
|
|
959
|
+
elif key == "license_file":
|
|
960
|
+
if value is not None and value != "":
|
|
961
|
+
self.slsLicenseFileLocal = value
|
|
962
|
+
self.setParam("sls_action", "install")
|
|
963
|
+
elif key == "dedicated_sls":
|
|
964
|
+
if value:
|
|
965
|
+
self.setParam("sls_namespace", f"mas-{self.args.mas_instance_id}-sls")
|
|
966
|
+
|
|
907
967
|
# These settings are used by the CLI rather than passed to the PipelineRun
|
|
908
968
|
elif key == "storage_accessmode":
|
|
909
969
|
if value is None:
|
|
@@ -913,10 +973,6 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
|
|
|
913
973
|
if value is None:
|
|
914
974
|
self.fatalError(f"{key} must be set")
|
|
915
975
|
self.pipelineStorageClass = value
|
|
916
|
-
elif key == "license_file":
|
|
917
|
-
if value is None:
|
|
918
|
-
self.fatalError(f"{key} must be set")
|
|
919
|
-
self.slsLicenseFileLocal = value
|
|
920
976
|
|
|
921
977
|
elif key.startswith("approval_"):
|
|
922
978
|
if key not in self.approvals:
|
|
@@ -954,6 +1010,13 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
|
|
|
954
1010
|
# Load the catalog information
|
|
955
1011
|
self.chosenCatalog = getCatalog(self.getParam("mas_catalog_version"))
|
|
956
1012
|
|
|
1013
|
+
# License file is only optional for existing SLS instance
|
|
1014
|
+
if self.slsLicenseFileLocal is None:
|
|
1015
|
+
if findSLSByNamespace(self.getParam("sls_namespace"), dynClient=self.dynamicClient):
|
|
1016
|
+
self.setParam("sls_action", "gencfg")
|
|
1017
|
+
else:
|
|
1018
|
+
self.fatalError("--license-file must be set for new SLS install")
|
|
1019
|
+
|
|
957
1020
|
# Once we've processed the inputs, we should validate the catalog source & prompt to accept the license terms
|
|
958
1021
|
if not self.devMode:
|
|
959
1022
|
self.validateCatalogSource()
|
|
@@ -977,6 +1040,10 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
|
|
|
977
1040
|
self.devMode = args.dev_mode
|
|
978
1041
|
self.skipGrafanaInstall = args.skip_grafana_install
|
|
979
1042
|
|
|
1043
|
+
# Set image_pull_policy of the CLI in interactive mode
|
|
1044
|
+
if args.image_pull_policy and args.image_pull_policy != "":
|
|
1045
|
+
self.setParam("image_pull_policy", args.image_pull_policy)
|
|
1046
|
+
|
|
980
1047
|
self.approvals = {}
|
|
981
1048
|
|
|
982
1049
|
# Store all args
|
|
@@ -1024,13 +1091,10 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
|
|
|
1024
1091
|
if self.deployCP4D:
|
|
1025
1092
|
self.configCP4D()
|
|
1026
1093
|
|
|
1027
|
-
#
|
|
1028
|
-
entitlementFileBaseName = path.basename(self.slsLicenseFileLocal)
|
|
1029
|
-
self.setParam("sls_entitlement_file", f"/workspace/entitlement/{entitlementFileBaseName}")
|
|
1030
|
-
|
|
1031
|
-
# Set up the secrets for additional configs, podtemplates and manual certificates
|
|
1094
|
+
# Set up the secrets for additional configs, podtemplates, sls license file and manual certificates
|
|
1032
1095
|
self.additionalConfigs()
|
|
1033
1096
|
self.podTemplates()
|
|
1097
|
+
self.slsLicenseFile()
|
|
1034
1098
|
self.manualCertificates()
|
|
1035
1099
|
|
|
1036
1100
|
# Show a summary of the installation configuration
|
|
@@ -1082,7 +1146,7 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
|
|
|
1082
1146
|
prepareInstallSecrets(
|
|
1083
1147
|
dynClient=self.dynamicClient,
|
|
1084
1148
|
instanceId=self.getParam("mas_instance_id"),
|
|
1085
|
-
slsLicenseFile=self.
|
|
1149
|
+
slsLicenseFile=self.slsLicenseFileSecret,
|
|
1086
1150
|
additionalConfigs=self.additionalConfigsSecret,
|
|
1087
1151
|
podTemplates=self.podTemplatesSecret,
|
|
1088
1152
|
certs=self.certsSecret
|
|
@@ -122,9 +122,15 @@ class installArgBuilderMixin():
|
|
|
122
122
|
|
|
123
123
|
# IBM Suite License Service
|
|
124
124
|
# -----------------------------------------------------------------------------
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
125
|
+
if self.getParam("sls_namespace") and self.getParam("sls_namespace") != "ibm-sls":
|
|
126
|
+
if self.getParam("mas_instance_id") and self.getParam("sls_namespace") == f"mas-{self.getParam('mas_instance_id')}-sls":
|
|
127
|
+
command += " --dedicated-sls"
|
|
128
|
+
else:
|
|
129
|
+
command += f" --sls-namespace \"{self.getParam('sls_namespace')}\""
|
|
130
|
+
if self.slsLicenseFileLocal:
|
|
131
|
+
command += f" --license-file \"{self.slsLicenseFileLocal}\""
|
|
132
|
+
if self.getParam("sls_namespace") and self.getParam("sls_namespace") != "ibm-sls" or self.slsLicenseFileLocal:
|
|
133
|
+
command += newline
|
|
128
134
|
|
|
129
135
|
# IBM Data Reporting Operator (DRO)
|
|
130
136
|
# -----------------------------------------------------------------------------
|
|
@@ -222,6 +228,9 @@ class installArgBuilderMixin():
|
|
|
222
228
|
if self.getParam('mas_manage_attachment_configuration_mode') != "":
|
|
223
229
|
command += f" --manage-attachments-mode \"{self.getParam('mas_manage_attachment_configuration_mode')}\"{newline}"
|
|
224
230
|
|
|
231
|
+
if self.getParam('mas_appws_bindings_health_wsl_flag') == "true":
|
|
232
|
+
command += f" --manage-health-wsl{newline}"
|
|
233
|
+
|
|
225
234
|
# IBM Cloud Pak for Data
|
|
226
235
|
# -----------------------------------------------------------------------------
|
|
227
236
|
if self.getParam('cpd_product_version') != "":
|
|
@@ -232,6 +241,12 @@ class installArgBuilderMixin():
|
|
|
232
241
|
command += " --cp4d-install-openscal"
|
|
233
242
|
if self.getParam('cpd_install_cognos') == "install":
|
|
234
243
|
command += " --cp4d-install-cognos"
|
|
244
|
+
if self.getParam('cpd_install_ws') == "install":
|
|
245
|
+
command += " --cp4d-install-ws"
|
|
246
|
+
if self.getParam('cpd_install_wml') == "install":
|
|
247
|
+
command += " --cp4d-install-wml"
|
|
248
|
+
if self.getParam('cpd_install_ae') == "install":
|
|
249
|
+
command += " --cp4d-install-ae"
|
|
235
250
|
command += newline
|
|
236
251
|
|
|
237
252
|
# IBM Db2 Universal Operator
|
|
@@ -263,6 +263,12 @@ slsArgGroup.add_argument(
|
|
|
263
263
|
help="Customize the SLS install namespace",
|
|
264
264
|
default="ibm-sls"
|
|
265
265
|
)
|
|
266
|
+
slsArgGroup.add_argument(
|
|
267
|
+
"--dedicated-sls",
|
|
268
|
+
action="store_true",
|
|
269
|
+
default=False,
|
|
270
|
+
help="Set the SLS namespace to mas-<instanceid>-sls"
|
|
271
|
+
)
|
|
266
272
|
|
|
267
273
|
# IBM Data Reporting Operator (DRO)
|
|
268
274
|
# -----------------------------------------------------------------------------
|
|
@@ -562,6 +568,15 @@ manageArgGroup.add_argument(
|
|
|
562
568
|
default="base=latest,health=latest"
|
|
563
569
|
)
|
|
564
570
|
|
|
571
|
+
manageArgGroup.add_argument(
|
|
572
|
+
"--manage-health-wsl",
|
|
573
|
+
dest="mas_appws_bindings_health_wsl_flag",
|
|
574
|
+
required=False,
|
|
575
|
+
help="Set boolean value indicating if Watson Studio must be bound to Manage. It is expected a system level WatsonStudioCfg applied in the cluster.",
|
|
576
|
+
action="store_const",
|
|
577
|
+
const="true"
|
|
578
|
+
)
|
|
579
|
+
|
|
565
580
|
manageArgGroup.add_argument(
|
|
566
581
|
"--manage-customization-archive-name",
|
|
567
582
|
dest="mas_app_settings_customization_archive_name",
|
|
@@ -707,6 +722,30 @@ cpdAppsArgGroup.add_argument(
|
|
|
707
722
|
action="store_const",
|
|
708
723
|
const="install"
|
|
709
724
|
)
|
|
725
|
+
cpdAppsArgGroup.add_argument(
|
|
726
|
+
"--cp4d-install-ws",
|
|
727
|
+
dest="cpd_install_ws",
|
|
728
|
+
required=False,
|
|
729
|
+
help="Add Watson Studio as part of Cloud Pak for Data",
|
|
730
|
+
action="store_const",
|
|
731
|
+
const="install"
|
|
732
|
+
)
|
|
733
|
+
cpdAppsArgGroup.add_argument(
|
|
734
|
+
"--cp4d-install-wml",
|
|
735
|
+
dest="cpd_install_wml",
|
|
736
|
+
required=False,
|
|
737
|
+
help="Add Watson Machine Learning as part of Cloud Pak for Data",
|
|
738
|
+
action="store_const",
|
|
739
|
+
const="install"
|
|
740
|
+
)
|
|
741
|
+
cpdAppsArgGroup.add_argument(
|
|
742
|
+
"--cp4d-install-ae",
|
|
743
|
+
dest="cpd_install_ae",
|
|
744
|
+
required=False,
|
|
745
|
+
help="Add Spark Analytics Engine as part of Cloud Pak for Data",
|
|
746
|
+
action="store_const",
|
|
747
|
+
const="install"
|
|
748
|
+
)
|
|
710
749
|
|
|
711
750
|
# IBM Db2 Universal Operator
|
|
712
751
|
# -----------------------------------------------------------------------------
|
|
@@ -9,12 +9,13 @@
|
|
|
9
9
|
# *****************************************************************************
|
|
10
10
|
supportedCatalogs = {
|
|
11
11
|
"amd64": [
|
|
12
|
+
"v9-250206-amd64",
|
|
12
13
|
"v9-250109-amd64",
|
|
13
14
|
"v9-241205-amd64",
|
|
14
15
|
"v9-241107-amd64",
|
|
15
|
-
"v9-241003-amd64",
|
|
16
16
|
],
|
|
17
17
|
"s390x": [
|
|
18
|
+
"v9-250206-s390x",
|
|
18
19
|
"v9-250109-s390x",
|
|
19
20
|
"v9-241205-s390x",
|
|
20
21
|
"v9-241107-s390x",
|
|
@@ -57,6 +57,7 @@ optionalParams = [
|
|
|
57
57
|
"mas_app_settings_server_timezone",
|
|
58
58
|
"mas_appws_bindings_jdbc_manage",
|
|
59
59
|
"mas_appws_components",
|
|
60
|
+
"mas_appws_bindings_health_wsl_flag",
|
|
60
61
|
"mas_domain",
|
|
61
62
|
# SLS
|
|
62
63
|
"sls_namespace",
|
|
@@ -70,8 +71,6 @@ optionalParams = [
|
|
|
70
71
|
"mas_cluster_issuer",
|
|
71
72
|
# DRO
|
|
72
73
|
"dro_namespace",
|
|
73
|
-
# MongoDb
|
|
74
|
-
"mongodb_namespace",
|
|
75
74
|
# Db2
|
|
76
75
|
"db2_action_system",
|
|
77
76
|
"db2_action_manage",
|
|
@@ -98,6 +97,9 @@ optionalParams = [
|
|
|
98
97
|
"cpd_install_cognos",
|
|
99
98
|
"cpd_install_openscale",
|
|
100
99
|
"cpd_install_spss",
|
|
100
|
+
"cpd_install_ws",
|
|
101
|
+
"cpd_install_wml",
|
|
102
|
+
"cpd_install_ae",
|
|
101
103
|
# Kafka
|
|
102
104
|
"kafka_namespace",
|
|
103
105
|
"kafka_version",
|
|
@@ -89,7 +89,7 @@ class AdditionalConfigsMixin():
|
|
|
89
89
|
elif podTemplateChoice == 2:
|
|
90
90
|
self.setParam("mas_pod_templates_dir", path.join(self.templatesDir, "pod-templates", "best-effort"))
|
|
91
91
|
elif podTemplateChoice == 3:
|
|
92
|
-
self.promptForDir("Pod templates directory",
|
|
92
|
+
self.setParam("mas_pod_templates_dir", self.promptForDir("Pod templates directory", mustExist=True))
|
|
93
93
|
else:
|
|
94
94
|
self.fatalError(f"Invalid selection: {podTemplateChoice}")
|
|
95
95
|
|
|
@@ -182,6 +182,19 @@ class AdditionalConfigsMixin():
|
|
|
182
182
|
|
|
183
183
|
self.certsSecret = certsSecret
|
|
184
184
|
|
|
185
|
+
def slsLicenseFile(self) -> None:
|
|
186
|
+
if self.slsLicenseFileLocal:
|
|
187
|
+
slsLicenseFileSecret = {
|
|
188
|
+
"apiVersion": "v1",
|
|
189
|
+
"kind": "Secret",
|
|
190
|
+
"type": "Opaque",
|
|
191
|
+
"metadata": {
|
|
192
|
+
"name": "pipeline-sls-entitlement"
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
self.setParam("sls_entitlement_file", f"/workspace/entitlement/{path.basename(self.slsLicenseFileLocal)}")
|
|
196
|
+
self.slsLicenseFileSecret = self.addFilesToSecret(slsLicenseFileSecret, self.slsLicenseFileLocal, '')
|
|
197
|
+
|
|
185
198
|
def addFilesToSecret(self, secretDict: dict, configPath: str, extension: str, keyPrefix: str = '') -> dict:
|
|
186
199
|
"""
|
|
187
200
|
Add file (or files) to pipeline-additional-configs
|
|
@@ -252,6 +252,11 @@ class InstallSummarizerMixin():
|
|
|
252
252
|
self.printSummary("Watson Studio Local", "Install (Required by Maximo Predict)")
|
|
253
253
|
self.printSummary("Watson Machine Learning", "Install (Required by Maximo Predict)")
|
|
254
254
|
self.printSummary("Analytics Engine", "Install (Required by Maximo Predict)")
|
|
255
|
+
else:
|
|
256
|
+
self.printSummary("Watson Studio Local", "Install" if self.getParam("cpd_install_ws") == "true" else "Do Not Install")
|
|
257
|
+
self.printSummary("Watson Machine Learning", "Install" if self.getParam("cpd_install_wml") == "true" else "Do Not Install")
|
|
258
|
+
self.printSummary("Analytics Engine", "Install" if self.getParam("cpd_install_ae") == "true" else "Do Not Install")
|
|
259
|
+
|
|
255
260
|
self.printSummary("Watson Openscale", "Install" if self.getParam("cpd_install_openscale") == "true" else "Do Not Install")
|
|
256
261
|
self.printSummary("SPSS Modeler", "Install" if self.getParam("cpd_install_spss") == "true" else "Do Not Install")
|
|
257
262
|
self.printSummary("Cognos Analytics", "Install" if self.getParam("cpd_install_cognos") == "true" else "Do Not Install")
|
|
@@ -265,9 +270,12 @@ class InstallSummarizerMixin():
|
|
|
265
270
|
|
|
266
271
|
def slsSummary(self) -> None:
|
|
267
272
|
self.printH2("IBM Suite License Service")
|
|
268
|
-
self.printSummary("License File", self.slsLicenseFileLocal)
|
|
269
|
-
self.printParamSummary("IBM Open Registry", "sls_icr_cpopen")
|
|
270
273
|
self.printParamSummary("Namespace", "sls_namespace")
|
|
274
|
+
if self.getParam("sls_action") == "install":
|
|
275
|
+
self.printSummary("Subscription Channel", "3.x")
|
|
276
|
+
self.printParamSummary("IBM Open Registry", "sls_icr_cpopen")
|
|
277
|
+
if self.slsLicenseFileLocal:
|
|
278
|
+
self.printSummary("License File", self.slsLicenseFileLocal)
|
|
271
279
|
|
|
272
280
|
def cosSummary(self) -> None:
|
|
273
281
|
self.printH2("Cloud Object Storage")
|