mas-cli 11.9.2__py3-none-any.whl → 11.10.0__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/cli.py +5 -4
- mas/cli/displayMixins.py +5 -1
- mas/cli/install/app.py +145 -55
- mas/cli/install/catalogs.py +5 -127
- mas/cli/install/settings/additionalConfigs.py +1 -1
- mas/cli/install/settings/db2Settings.py +2 -2
- mas/cli/install/settings/kafkaSettings.py +1 -1
- mas/cli/install/settings/manageSettings.py +4 -4
- mas/cli/install/settings/turbonomicSettings.py +1 -1
- mas/cli/templates/ibm-mas-tekton.yaml +107 -101
- mas/cli/update/app.py +11 -23
- {mas_cli-11.9.2.dist-info → mas_cli-11.10.0.dist-info}/METADATA +7 -7
- {mas_cli-11.9.2.dist-info → mas_cli-11.10.0.dist-info}/RECORD +17 -17
- {mas_cli-11.9.2.dist-info → mas_cli-11.10.0.dist-info}/WHEEL +1 -1
- {mas_cli-11.9.2.data → mas_cli-11.10.0.data}/scripts/mas-cli +0 -0
- {mas_cli-11.9.2.dist-info → mas_cli-11.10.0.dist-info}/top_level.txt +0 -0
mas/cli/__init__.py
CHANGED
mas/cli/cli.py
CHANGED
|
@@ -25,7 +25,7 @@ from kubernetes.client import api_client, Configuration
|
|
|
25
25
|
from openshift.dynamic import DynamicClient
|
|
26
26
|
from openshift.dynamic.exceptions import NotFoundError
|
|
27
27
|
|
|
28
|
-
from prompt_toolkit import prompt, print_formatted_text, HTML
|
|
28
|
+
from prompt_toolkit import prompt, print_formatted_text, HTML, PromptSession
|
|
29
29
|
|
|
30
30
|
from mas.devops.mas import isAirgapInstall
|
|
31
31
|
from mas.devops.ocp import connect, isSNO, getNodes
|
|
@@ -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 = "11.
|
|
120
|
+
self.version = "11.10.0"
|
|
121
121
|
self.h1count = 0
|
|
122
122
|
self.h2count = 0
|
|
123
123
|
|
|
@@ -173,6 +173,7 @@ class BaseApp(PrintMixin, PromptMixin):
|
|
|
173
173
|
"visualinspection": ["8.8.x", "8.7.x"]
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
|
+
self.promptSession = PromptSession()
|
|
176
177
|
|
|
177
178
|
self.spinner = {
|
|
178
179
|
"interval": 80,
|
|
@@ -184,9 +185,9 @@ class BaseApp(PrintMixin, PromptMixin):
|
|
|
184
185
|
self._dynClient = None
|
|
185
186
|
|
|
186
187
|
self.printTitle(f"\nIBM Maximo Application Suite Admin CLI v{self.version}")
|
|
187
|
-
print_formatted_text(HTML("Powered by <
|
|
188
|
+
print_formatted_text(HTML("Powered by <Orange><u>https://github.com/ibm-mas/ansible-devops/</u></Orange> and <Orange><u>https://tekton.dev/</u></Orange>\n"))
|
|
188
189
|
if which("kubectl") is None:
|
|
189
|
-
self.fatalError("Could not find kubectl on the path, see <
|
|
190
|
+
self.fatalError("Could not find kubectl on the path, see <Orange><u>https://kubernetes.io/docs/tasks/tools/#kubectl</u></Orange> for installation instructions")
|
|
190
191
|
|
|
191
192
|
@logMethodCall
|
|
192
193
|
def createTektonFileWithDigest(self) -> None:
|
mas/cli/displayMixins.py
CHANGED
|
@@ -90,7 +90,11 @@ class PromptMixin():
|
|
|
90
90
|
if param is not None and default == "":
|
|
91
91
|
default = getenv(param.upper(), default="")
|
|
92
92
|
|
|
93
|
-
|
|
93
|
+
if completer is not None:
|
|
94
|
+
response = self.promptSession.prompt(masPromptValue(message), is_password=isPassword, default=default, completer=completer, validator=validator, validate_while_typing=False, pre_run=self.promptSession.default_buffer.start_completion)
|
|
95
|
+
else:
|
|
96
|
+
response = self.promptSession.prompt(masPromptValue(message), is_password=isPassword, default=default, completer=completer, validator=validator, validate_while_typing=False)
|
|
97
|
+
|
|
94
98
|
if param is not None:
|
|
95
99
|
self.params[param] = response
|
|
96
100
|
return response
|
mas/cli/install/app.py
CHANGED
|
@@ -14,10 +14,12 @@ import logging.handlers
|
|
|
14
14
|
from sys import exit
|
|
15
15
|
from os import path, getenv
|
|
16
16
|
import re
|
|
17
|
+
import calendar
|
|
17
18
|
|
|
18
19
|
from openshift.dynamic.exceptions import NotFoundError
|
|
19
20
|
|
|
20
21
|
from prompt_toolkit import prompt, print_formatted_text, HTML
|
|
22
|
+
from prompt_toolkit.completion import WordCompleter
|
|
21
23
|
|
|
22
24
|
from tabulate import tabulate
|
|
23
25
|
|
|
@@ -30,7 +32,7 @@ from .argParser import installArgParser
|
|
|
30
32
|
from .settings import InstallSettingsMixin
|
|
31
33
|
from .summarizer import InstallSummarizerMixin
|
|
32
34
|
from .params import requiredParams, optionalParams
|
|
33
|
-
from .catalogs import
|
|
35
|
+
from .catalogs import supportedCatalogs
|
|
34
36
|
|
|
35
37
|
from mas.cli.validators import (
|
|
36
38
|
InstanceIDFormatValidator,
|
|
@@ -41,7 +43,9 @@ from mas.cli.validators import (
|
|
|
41
43
|
OptimizerInstallPlanValidator
|
|
42
44
|
)
|
|
43
45
|
|
|
44
|
-
from mas.devops.ocp import createNamespace,
|
|
46
|
+
from mas.devops.ocp import createNamespace, getStorageClasses
|
|
47
|
+
from mas.devops.mas import getCurrentCatalog, getDefaultStorageClasses
|
|
48
|
+
from mas.devops.data import getCatalog
|
|
45
49
|
from mas.devops.tekton import (
|
|
46
50
|
installOpenShiftPipelines,
|
|
47
51
|
updateTektonDefinitions,
|
|
@@ -102,17 +106,17 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
|
|
|
102
106
|
self.fatalError(
|
|
103
107
|
"\n".join([
|
|
104
108
|
"Unable to proceed with installation of Maximo Manage. Could not detect the required \"image-registry\" service in the openshift-image-registry namespace",
|
|
105
|
-
"For more information refer to <u>https://www.ibm.com/docs/en/masv-and-l/continuous-delivery?topic=installing-enabling-openshift-internal-image-registry</u>"
|
|
109
|
+
"For more information refer to <Orange><u>https://www.ibm.com/docs/en/masv-and-l/continuous-delivery?topic=installing-enabling-openshift-internal-image-registry</u></Orange>"
|
|
106
110
|
])
|
|
107
111
|
)
|
|
108
112
|
|
|
109
113
|
@logMethodCall
|
|
110
114
|
def licensePrompt(self):
|
|
111
115
|
licenses = {
|
|
112
|
-
"8.9.x": " - <u>https://ibm.biz/MAS89-License</u>",
|
|
113
|
-
"8.10.x": " - <u>https://ibm.biz/MAS810-License</u>",
|
|
114
|
-
"8.11.x": " - <u>https://ibm.biz/MAS811-License</u>\n - <u>https://ibm.biz/MAXIT81-License</u>",
|
|
115
|
-
"9.0.x": " - <u>https://ibm.biz/MAS90-License</u>\n - <u>https://ibm.biz/MaximoIT90-License</u>\n - <u>https://ibm.biz/MAXArcGIS90-License</u>"
|
|
116
|
+
"8.9.x": " - <Orange><u>https://ibm.biz/MAS89-License</u></Orange>",
|
|
117
|
+
"8.10.x": " - <Orange><u>https://ibm.biz/MAS810-License</u></Orange>",
|
|
118
|
+
"8.11.x": " - <Orange><u>https://ibm.biz/MAS811-License</u></Orange>\n - <Orange><u>https://ibm.biz/MAXIT81-License</u></Orange>",
|
|
119
|
+
"9.0.x": " - <Orange><u>https://ibm.biz/MAS90-License</u></Orange>\n - <Orange><u>https://ibm.biz/MaximoIT90-License</u></Orange>\n - <Orange><u>https://ibm.biz/MAXArcGIS90-License</u></Orange>"
|
|
116
120
|
}
|
|
117
121
|
|
|
118
122
|
if not self.licenseAccepted:
|
|
@@ -153,6 +157,87 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
|
|
|
153
157
|
self.setParam("cert_manager_provider", "redhat")
|
|
154
158
|
self.setParam("cert_manager_action", "install")
|
|
155
159
|
|
|
160
|
+
def formatCatalog(self, name: str) -> str:
|
|
161
|
+
# Convert "v9-241107-amd64" into "November 2024 Update (v9-241107-amd64)"
|
|
162
|
+
date = name.split("-")[1]
|
|
163
|
+
month = int(date[2:4])
|
|
164
|
+
monthName = calendar.month_name[month]
|
|
165
|
+
year = date[:2]
|
|
166
|
+
return f" - {monthName} 20{year} Update\n <Orange><u>https://ibm-mas.github.io/cli/catalogs/{name}</u></Orange>"
|
|
167
|
+
|
|
168
|
+
def formatRelease(self, release: str) -> str:
|
|
169
|
+
return f"{release} ... {self.catalogReleases[release]['core']}"
|
|
170
|
+
|
|
171
|
+
@logMethodCall
|
|
172
|
+
def processCatalogChoice(self) -> list:
|
|
173
|
+
self.catalogDigest = self.chosenCatalog["catalog_digest"]
|
|
174
|
+
self.catalogCp4dVersion = self.chosenCatalog["cpd_product_version_default"]
|
|
175
|
+
self.catalogMongoDbVersion = self.chosenCatalog["mongo_extras_version_default"]
|
|
176
|
+
|
|
177
|
+
self.catalogReleases = ["9.0.x", "8.11.x", "8.10.x"]
|
|
178
|
+
|
|
179
|
+
self.catalogTable = [
|
|
180
|
+
{
|
|
181
|
+
"": "Core",
|
|
182
|
+
"9.0.x": self.chosenCatalog["mas_core_version"]["9.0.x"],
|
|
183
|
+
"8.11.x": self.chosenCatalog["mas_core_version"]["8.11.x"],
|
|
184
|
+
"8.10.x": self.chosenCatalog["mas_core_version"]["8.10.x"]
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"": "Manage",
|
|
188
|
+
"9.0.x": self.chosenCatalog["mas_manage_version"]["9.0.x"],
|
|
189
|
+
"8.11.x": self.chosenCatalog["mas_manage_version"]["8.11.x"],
|
|
190
|
+
"8.10.x": self.chosenCatalog["mas_manage_version"]["8.10.x"]
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"": "IoT",
|
|
194
|
+
"9.0.x": self.chosenCatalog["mas_iot_version"]["9.0.x"],
|
|
195
|
+
"8.11.x": self.chosenCatalog["mas_iot_version"]["8.11.x"],
|
|
196
|
+
"8.10.x": self.chosenCatalog["mas_iot_version"]["8.10.x"]
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"": "Monitor",
|
|
200
|
+
"9.0.x": self.chosenCatalog["mas_monitor_version"]["9.0.x"],
|
|
201
|
+
"8.11.x": self.chosenCatalog["mas_monitor_version"]["8.11.x"],
|
|
202
|
+
"8.10.x": self.chosenCatalog["mas_monitor_version"]["8.10.x"]
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"": "Assist",
|
|
206
|
+
"9.0.x": self.chosenCatalog["mas_assist_version"]["9.0.x"],
|
|
207
|
+
"8.11.x": self.chosenCatalog["mas_assist_version"]["8.11.x"],
|
|
208
|
+
"8.10.x": self.chosenCatalog["mas_assist_version"]["8.10.x"]
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"": "Optimizer",
|
|
212
|
+
"9.0.x": self.chosenCatalog["mas_optimizer_version"]["9.0.x"],
|
|
213
|
+
"8.11.x": self.chosenCatalog["mas_optimizer_version"]["8.11.x"],
|
|
214
|
+
"8.10.x": self.chosenCatalog["mas_optimizer_version"]["8.10.x"]
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"": "Predict",
|
|
218
|
+
"9.0.x": self.chosenCatalog["mas_predict_version"]["9.0.x"],
|
|
219
|
+
"8.11.x": self.chosenCatalog["mas_predict_version"]["8.11.x"],
|
|
220
|
+
"8.10.x": self.chosenCatalog["mas_predict_version"]["8.10.x"]
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"": "Inspection",
|
|
224
|
+
"9.0.x": self.chosenCatalog["mas_visualinspection_version"]["9.0.x"],
|
|
225
|
+
"8.11.x": self.chosenCatalog["mas_visualinspection_version"]["8.11.x"],
|
|
226
|
+
"8.10.x": self.chosenCatalog["mas_visualinspection_version"]["8.10.x"]
|
|
227
|
+
}
|
|
228
|
+
]
|
|
229
|
+
|
|
230
|
+
summary = [
|
|
231
|
+
"",
|
|
232
|
+
"<u>Catalog Details</u>",
|
|
233
|
+
f"Catalog Image: icr.io/cpopen/ibm-maximo-operator-catalog:{self.getParam('mas_catalog_version')}",
|
|
234
|
+
f"Catalog Digest: {self.catalogDigest}",
|
|
235
|
+
f"MAS Releases: {', '.join(self.catalogReleases)}",
|
|
236
|
+
f"Cloud Pak for Data: {self.catalogCp4dVersion}",
|
|
237
|
+
f"MongoDb: {self.catalogMongoDbVersion}",
|
|
238
|
+
]
|
|
239
|
+
return summary
|
|
240
|
+
|
|
156
241
|
@logMethodCall
|
|
157
242
|
def configCatalog(self):
|
|
158
243
|
self.printH1("IBM Maximo Operator Catalog Selection")
|
|
@@ -160,11 +245,48 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
|
|
|
160
245
|
self.promptForString("Select catalog source", "mas_catalog_version", default="v9-master-amd64")
|
|
161
246
|
self.promptForString("Select channel", "mas_channel", default="9.1.x-dev")
|
|
162
247
|
else:
|
|
163
|
-
|
|
164
|
-
|
|
248
|
+
catalogInfo = getCurrentCatalog(self.dynamicClient)
|
|
249
|
+
|
|
250
|
+
if catalogInfo is None:
|
|
251
|
+
self.printDescription([
|
|
252
|
+
"The catalog you choose dictates the version of everything that is installed, with Maximo Application Suite this is the only version you need to remember; all other versions are determined by this choice.",
|
|
253
|
+
"Older catalogs can still be used, but we recommend using an older version of the CLI that aligns with the release date of the catalog.",
|
|
254
|
+
" - Learn more: <Orange><u>https://ibm-mas.github.io/cli/catalogs/</u></Orange>",
|
|
255
|
+
""
|
|
256
|
+
])
|
|
257
|
+
print("Supported Catalogs:")
|
|
258
|
+
for catalog in self.catalogOptions:
|
|
259
|
+
catalogString = self.formatCatalog(catalog)
|
|
260
|
+
print_formatted_text(HTML(f"{catalogString}"))
|
|
261
|
+
print()
|
|
262
|
+
|
|
263
|
+
catalogCompleter = WordCompleter(self.catalogOptions)
|
|
264
|
+
catalogSelection = self.promptForString("Select catalog", completer=catalogCompleter)
|
|
265
|
+
self.setParam("mas_catalog_version", catalogSelection)
|
|
266
|
+
|
|
267
|
+
self.chosenCatalog = getCatalog(self.getParam("mas_catalog_version"))
|
|
268
|
+
else:
|
|
269
|
+
self.printDescription([
|
|
270
|
+
f"The IBM Maximo Operator Catalog is already installed in this cluster ({catalogInfo['catalogId']}). If you wish to install MAS using a newer version of the catalog please first update the catalog using mas update."
|
|
271
|
+
])
|
|
272
|
+
self.setParam("mas_catalog_version", catalogInfo["catalogId"])
|
|
273
|
+
|
|
274
|
+
self.chosenCatalog = getCatalog(self.getParam("mas_catalog_version"))
|
|
275
|
+
catalogSummary = self.processCatalogChoice()
|
|
276
|
+
self.printDescription(catalogSummary)
|
|
277
|
+
self.printDescription([
|
|
278
|
+
"",
|
|
279
|
+
"Multiple releases of Maximo Application Suite are available, each is supported under IBM's standard 3+1+3 support model.",
|
|
280
|
+
"Choose the release of IBM Maximo Application Suite that you want to use for this installation from the table below:",
|
|
281
|
+
""
|
|
282
|
+
])
|
|
283
|
+
|
|
284
|
+
print(tabulate(self.catalogTable, headers="keys", tablefmt="simple_grid"))
|
|
285
|
+
|
|
286
|
+
releaseCompleter = WordCompleter(self.catalogReleases)
|
|
287
|
+
releaseSelection = self.promptForString("Select release", completer=releaseCompleter)
|
|
165
288
|
|
|
166
|
-
self.setParam("
|
|
167
|
-
self.setParam("mas_channel", self.installOptions[catalogSelection - 1]["release"])
|
|
289
|
+
self.setParam("mas_channel", releaseSelection)
|
|
168
290
|
|
|
169
291
|
@logMethodCall
|
|
170
292
|
def configSLS(self) -> None:
|
|
@@ -219,12 +341,12 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
|
|
|
219
341
|
|
|
220
342
|
@logMethodCall
|
|
221
343
|
def configCP4D(self):
|
|
222
|
-
if self.getParam("mas_catalog_version") in
|
|
344
|
+
if self.getParam("mas_catalog_version") in self.catalogOptions:
|
|
223
345
|
logger.debug(f"Using automatic CP4D product version: {self.getParam('cpd_product_version')}")
|
|
224
|
-
self.setParam("cpd_product_version",
|
|
346
|
+
self.setParam("cpd_product_version", self.catalogInfo["cpd_product_version_default"])
|
|
225
347
|
elif self.getParam("cpd_product_version") == "":
|
|
226
348
|
if self.noConfirm:
|
|
227
|
-
self.fatalError("Cloud Pak for Data version must be set manually, but --no-confirm
|
|
349
|
+
self.fatalError("Cloud Pak for Data version must be set manually, but --no-confirm has been set without setting --cp4d-version")
|
|
228
350
|
self.printDescription([
|
|
229
351
|
f"Unknown catalog {self.getParam('mas_catalog_version')}, please manually select the version of Cloud Pak for Data to use"
|
|
230
352
|
])
|
|
@@ -522,46 +644,14 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
|
|
|
522
644
|
" - ReadWriteMany volumes can be mounted as read-write by multiple pods across many nodes.",
|
|
523
645
|
""
|
|
524
646
|
])
|
|
525
|
-
|
|
526
|
-
if
|
|
527
|
-
print_formatted_text(HTML("<MediumSeaGreen>Storage provider auto-detected:
|
|
528
|
-
print_formatted_text(HTML("<LightSlateGrey> - Storage class (ReadWriteOnce):
|
|
529
|
-
print_formatted_text(HTML("<LightSlateGrey> - Storage class (ReadWriteMany):
|
|
530
|
-
self.storageClassProvider =
|
|
531
|
-
self.params["storage_class_rwo"] =
|
|
532
|
-
self.params["storage_class_rwx"] =
|
|
533
|
-
# 2. OCS
|
|
534
|
-
elif getStorageClass(self.dynamicClient, "ocs-storagecluster-cephfs") is not None:
|
|
535
|
-
print_formatted_text(HTML("<MediumSeaGreen>Storage provider auto-detected: OpenShift Container Storage</MediumSeaGreen>"))
|
|
536
|
-
print_formatted_text(HTML("<LightSlateGrey> - Storage class (ReadWriteOnce): ocs-storagecluster-ceph-rbd</LightSlateGrey>"))
|
|
537
|
-
print_formatted_text(HTML("<LightSlateGrey> - Storage class (ReadWriteMany): ocs-storagecluster-cephfs</LightSlateGrey>"))
|
|
538
|
-
self.storageClassProvider = "ocs"
|
|
539
|
-
self.params["storage_class_rwo"] = "ocs-storagecluster-ceph-rbd"
|
|
540
|
-
self.params["storage_class_rwx"] = "ocs-storagecluster-cephfs"
|
|
541
|
-
# 3. NFS Client
|
|
542
|
-
elif getStorageClass(self.dynamicClient, "nfs-client") is not None:
|
|
543
|
-
print_formatted_text(HTML("<MediumSeaGreen>Storage provider auto-detected: NFS Client</MediumSeaGreen>"))
|
|
544
|
-
print_formatted_text(HTML("<LightSlateGrey> - Storage class (ReadWriteOnce): nfs-client</LightSlateGrey>"))
|
|
545
|
-
print_formatted_text(HTML("<LightSlateGrey> - Storage class (ReadWriteMany): nfs-client</LightSlateGrey>"))
|
|
546
|
-
self.storageClassProvider = "nfs"
|
|
547
|
-
self.params["storage_class_rwo"] = "nfs-client"
|
|
548
|
-
self.params["storage_class_rwx"] = "nfs-client"
|
|
549
|
-
# 4. Azure
|
|
550
|
-
elif getStorageClass(self.dynamicClient, "managed-premium") is not None:
|
|
551
|
-
print_formatted_text(HTML("<MediumSeaGreen>Storage provider auto-detected: Azure Managed</MediumSeaGreen>"))
|
|
552
|
-
print_formatted_text(HTML("<LightSlateGrey> - Storage class (ReadWriteOnce): managed-premium</LightSlateGrey>"))
|
|
553
|
-
print_formatted_text(HTML("<LightSlateGrey> - Storage class (ReadWriteMany): azurefiles-premium</LightSlateGrey>"))
|
|
554
|
-
self.storageClassProvider = "azure"
|
|
555
|
-
self.params["storage_class_rwo"] = "managed-premium"
|
|
556
|
-
self.params["storage_class_rwx"] = "azurefiles-premium"
|
|
557
|
-
# 5. AWS
|
|
558
|
-
elif getStorageClass(self.dynamicClient, "gp2") is not None:
|
|
559
|
-
print_formatted_text(HTML("<MediumSeaGreen>Storage provider auto-detected: AWS gp2</MediumSeaGreen>"))
|
|
560
|
-
print_formatted_text(HTML("<LightSlateGrey> - Storage class (ReadWriteOnce): gp2</LightSlateGrey>"))
|
|
561
|
-
print_formatted_text(HTML("<LightSlateGrey> - Storage class (ReadWriteMany): efs</LightSlateGrey>"))
|
|
562
|
-
self.storageClassProvider = "aws"
|
|
563
|
-
self.params["storage_class_rwo"] = "gp2"
|
|
564
|
-
self.params["storage_class_rwx"] = "efs"
|
|
647
|
+
defaultStorageClasses = getDefaultStorageClasses(self.dynamicClient)
|
|
648
|
+
if defaultStorageClasses.provider is not None:
|
|
649
|
+
print_formatted_text(HTML(f"<MediumSeaGreen>Storage provider auto-detected: {defaultStorageClasses.providerName}</MediumSeaGreen>"))
|
|
650
|
+
print_formatted_text(HTML(f"<LightSlateGrey> - Storage class (ReadWriteOnce): {defaultStorageClasses.rwo}</LightSlateGrey>"))
|
|
651
|
+
print_formatted_text(HTML(f"<LightSlateGrey> - Storage class (ReadWriteMany): {defaultStorageClasses.rwx}</LightSlateGrey>"))
|
|
652
|
+
self.storageClassProvider = defaultStorageClasses.provider
|
|
653
|
+
self.params["storage_class_rwo"] = defaultStorageClasses.rwo
|
|
654
|
+
self.params["storage_class_rwx"] = defaultStorageClasses.rwx
|
|
565
655
|
|
|
566
656
|
overrideStorageClasses = False
|
|
567
657
|
if "storage_class_rwx" in self.params and self.params["storage_class_rwx"] != "":
|
|
@@ -925,7 +1015,7 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
|
|
|
925
1015
|
exit(1)
|
|
926
1016
|
|
|
927
1017
|
# Configure the installOptions for the appropriate architecture
|
|
928
|
-
self.
|
|
1018
|
+
self.catalogOptions = supportedCatalogs[self.architecture]
|
|
929
1019
|
|
|
930
1020
|
# Basic settings before the user provides any input
|
|
931
1021
|
self.configICR()
|
mas/cli/install/catalogs.py
CHANGED
|
@@ -7,135 +7,13 @@
|
|
|
7
7
|
# http://www.eclipse.org/legal/epl-v10.html
|
|
8
8
|
#
|
|
9
9
|
# *****************************************************************************
|
|
10
|
-
|
|
11
|
-
catalogChoices = {
|
|
10
|
+
supportedCatalogs = {
|
|
12
11
|
"amd64": [
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
"release": "9.0.x",
|
|
17
|
-
"core": "9.0.5",
|
|
18
|
-
"assist": "9.0.2",
|
|
19
|
-
"iot": "9.0.4",
|
|
20
|
-
"manage": "9.0.5",
|
|
21
|
-
"monitor": "9.0.4",
|
|
22
|
-
"optimizer": "9.0.4",
|
|
23
|
-
"predict": "9.0.2",
|
|
24
|
-
"inspection": "9.0.4",
|
|
25
|
-
"aibroker": "9.0.3"
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
"#": 2,
|
|
29
|
-
"catalog": "v9-241107-amd64",
|
|
30
|
-
"release": "8.11.x",
|
|
31
|
-
"core": "8.11.16",
|
|
32
|
-
"assist": "8.8.6",
|
|
33
|
-
"iot": "8.8.14",
|
|
34
|
-
"manage": "8.7.13",
|
|
35
|
-
"monitor": "8.11.12",
|
|
36
|
-
"optimizer": "8.5.10",
|
|
37
|
-
"predict": "8.9.5",
|
|
38
|
-
"inspection": "8.9.7"
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
"#": 3,
|
|
42
|
-
"catalog": "v9-241107-amd64",
|
|
43
|
-
"release": "8.10.x",
|
|
44
|
-
"core": "8.10.19",
|
|
45
|
-
"assist": "8.7.7",
|
|
46
|
-
"iot": "8.7.18",
|
|
47
|
-
"manage": "8.6.19",
|
|
48
|
-
"monitor": "8.10.14",
|
|
49
|
-
"optimizer": "8.4.11",
|
|
50
|
-
"predict": "8.8.4",
|
|
51
|
-
"inspection": "8.8.4"
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
"#": 4,
|
|
55
|
-
"catalog": "v9-241003-amd64",
|
|
56
|
-
"release": "9.0.x",
|
|
57
|
-
"core": "9.0.3",
|
|
58
|
-
"assist": "9.0.2",
|
|
59
|
-
"iot": "9.0.3",
|
|
60
|
-
"manage": "9.0.3",
|
|
61
|
-
"monitor": "9.0.3",
|
|
62
|
-
"optimizer": "9.0.3",
|
|
63
|
-
"predict": "9.0.2",
|
|
64
|
-
"inspection": "9.0.3"
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
"#": 5,
|
|
68
|
-
"catalog": "v9-241003-amd64",
|
|
69
|
-
"release": "8.11.x",
|
|
70
|
-
"core": "8.11.15",
|
|
71
|
-
"assist": "8.8.6",
|
|
72
|
-
"iot": "8.8.13",
|
|
73
|
-
"manage": "8.7.12",
|
|
74
|
-
"monitor": "8.11.11",
|
|
75
|
-
"optimizer": "8.5.9",
|
|
76
|
-
"predict": "8.9.5",
|
|
77
|
-
"inspection": "8.9.6"
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
"#": 6,
|
|
81
|
-
"catalog": "v9-241003-amd64",
|
|
82
|
-
"release": "8.10.x",
|
|
83
|
-
"core": "8.10.18",
|
|
84
|
-
"assist": "8.7.7",
|
|
85
|
-
"iot": "8.7.17",
|
|
86
|
-
"manage": "8.6.18",
|
|
87
|
-
"monitor": "8.10.14",
|
|
88
|
-
"optimizer": "8.4.10",
|
|
89
|
-
"predict": "8.8.3",
|
|
90
|
-
"inspection": "8.8.4"
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
"#": 7,
|
|
94
|
-
"catalog": "v9-240827-amd64",
|
|
95
|
-
"release": "9.0.x",
|
|
96
|
-
"core": "9.0.2",
|
|
97
|
-
"assist": "9.0.2",
|
|
98
|
-
"iot": "9.0.2",
|
|
99
|
-
"manage": "9.0.2",
|
|
100
|
-
"monitor": "9.0.2",
|
|
101
|
-
"optimizer": "9.0.2",
|
|
102
|
-
"predict": "9.0.1",
|
|
103
|
-
"inspection": "9.0.2"
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
"#": 8,
|
|
107
|
-
"catalog": "v9-240827-amd64",
|
|
108
|
-
"release": "8.11.x",
|
|
109
|
-
"core": "8.11.14",
|
|
110
|
-
"assist": "8.8.6",
|
|
111
|
-
"iot": "8.8.12",
|
|
112
|
-
"manage": "8.7.11",
|
|
113
|
-
"monitor": "8.11.10",
|
|
114
|
-
"optimizer": "8.5.8",
|
|
115
|
-
"predict": "8.9.3",
|
|
116
|
-
"inspection": "8.9.5"
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
"#": 9,
|
|
120
|
-
"catalog": "v9-240827-amd64",
|
|
121
|
-
"release": "8.10.x",
|
|
122
|
-
"core": "8.10.17",
|
|
123
|
-
"assist": "8.7.7",
|
|
124
|
-
"iot": "8.7.16",
|
|
125
|
-
"manage": "8.6.17",
|
|
126
|
-
"monitor": "8.10.13",
|
|
127
|
-
"optimizer": "8.4.9",
|
|
128
|
-
"predict": "8.8.3",
|
|
129
|
-
"inspection": "8.8.4"
|
|
130
|
-
}
|
|
12
|
+
"v9-241107-amd64",
|
|
13
|
+
"v9-241003-amd64",
|
|
14
|
+
"v9-240827-amd64"
|
|
131
15
|
],
|
|
132
16
|
"s390x": [
|
|
133
|
-
|
|
134
|
-
"#": 1,
|
|
135
|
-
"catalog": "v9-241107-s390x",
|
|
136
|
-
"release": "9.0.x",
|
|
137
|
-
"core": "9.0.5",
|
|
138
|
-
"manage": "9.0.5"
|
|
139
|
-
}
|
|
17
|
+
"v9-241107-s390x"
|
|
140
18
|
]
|
|
141
19
|
}
|
|
@@ -67,7 +67,7 @@ class AdditionalConfigsMixin():
|
|
|
67
67
|
self.printH1("Configure Pod Templates")
|
|
68
68
|
self.printDescription([
|
|
69
69
|
"The CLI supports two pod template profiles out of the box that allow you to reconfigure MAS for either a guaranteed or best effort QoS level",
|
|
70
|
-
"For more information about the Kubernetes quality of service (QoS) levels, see https://kubernetes.io/docs/concepts/workloads/pods/pod-qos
|
|
70
|
+
"For more information about the Kubernetes quality of service (QoS) levels, see <Orange><u>https://kubernetes.io/docs/concepts/workloads/pods/pod-qos/</u></Orange>",
|
|
71
71
|
"You may also choose to use your own customized pod template definitions"
|
|
72
72
|
])
|
|
73
73
|
|
|
@@ -164,8 +164,8 @@ class Db2SettingsMixin():
|
|
|
164
164
|
"Note that the same settings are applied to both the IoT and Manage Db2 instances",
|
|
165
165
|
"Use existing node labels and taints to control scheduling of the Db2 workload in your cluster",
|
|
166
166
|
"For more information refer to the Red Hat documentation:",
|
|
167
|
-
" - <u>https://docs.openshift.com/container-platform/4.12/nodes/scheduling/nodes-scheduler-node-affinity.html</u>",
|
|
168
|
-
" - <u>https://docs.openshift.com/container-platform/4.12/nodes/scheduling/nodes-scheduler-taints-tolerations.html</u>"
|
|
167
|
+
" - <Orange><u>https://docs.openshift.com/container-platform/4.12/nodes/scheduling/nodes-scheduler-node-affinity.html</u></Orange>",
|
|
168
|
+
" - <Orange><u>https://docs.openshift.com/container-platform/4.12/nodes/scheduling/nodes-scheduler-taints-tolerations.html</u></Orange>"
|
|
169
169
|
])
|
|
170
170
|
|
|
171
171
|
if self.yesOrNo("Configure node affinity"):
|
|
@@ -73,7 +73,7 @@ class KafkaSettingsMixin():
|
|
|
73
73
|
"While provisioning the AWS MSK instance, you will be required to provide the AWS Virtual Private Cloud ID and subnet details",
|
|
74
74
|
"where your instance will be deployed to properly configure inbound and outbound connectivity.",
|
|
75
75
|
"You should be able to find these information inside your VPC and subnet configurations in the target AWS account.",
|
|
76
|
-
"For more details about AWS subnet/CIDR configuration, refer: https://docs.aws.amazon.com/vpc/latest/userguide/subnet-sizing.html"
|
|
76
|
+
"For more details about AWS subnet/CIDR configuration, refer: <Orange><u>https://docs.aws.amazon.com/vpc/latest/userguide/subnet-sizing.html</u></Orange>"
|
|
77
77
|
])
|
|
78
78
|
self.promptForString("AWS Access Key ID", "aws_access_key_id", isPassword=True)
|
|
79
79
|
self.promptForString("AWS Secret Access Key" "aws_secret_access_key", isPassword=True)
|
|
@@ -32,7 +32,7 @@ class ManageSettingsMixin():
|
|
|
32
32
|
"",
|
|
33
33
|
"IBM Maximo Location Services for Esri License Terms",
|
|
34
34
|
"For information about your IBM Maximo Location Services for Esri License visit: ",
|
|
35
|
-
" <u>https://ibm.biz/MAXArcGIS90-License</u>",
|
|
35
|
+
" - <Orange><u>https://ibm.biz/MAXArcGIS90-License</u></Orange>",
|
|
36
36
|
"To continue with the installation, you must accept these additional license terms"
|
|
37
37
|
])
|
|
38
38
|
|
|
@@ -117,7 +117,7 @@ class ManageSettingsMixin():
|
|
|
117
117
|
if ",icd=" in self.params["mas_appws_components"]:
|
|
118
118
|
self.printH2("Maximo IT License Terms")
|
|
119
119
|
self.printDescription([
|
|
120
|
-
"For information about your Maximo IT License, see https://ibm.biz/MAXIT81-License",
|
|
120
|
+
"For information about your Maximo IT License, see <Orange><u>https://ibm.biz/MAXIT81-License</u></Orange>",
|
|
121
121
|
"To continue with the installation, you must accept these additional license terms"
|
|
122
122
|
])
|
|
123
123
|
|
|
@@ -217,7 +217,7 @@ class ManageSettingsMixin():
|
|
|
217
217
|
self.printDescription([
|
|
218
218
|
"Define the additional languages to be configured in Maximo Manage. provide a comma-separated list of supported languages codes, for example: 'JA,DE,AR'",
|
|
219
219
|
"A complete list of available language codes is available online:",
|
|
220
|
-
" <u>https://www.ibm.com/docs/en/mas-cd/mhmpmh-and-p-u/continuous-delivery?topic=deploy-language-support</u>"
|
|
220
|
+
" <Orange><u>https://www.ibm.com/docs/en/mas-cd/mhmpmh-and-p-u/continuous-delivery?topic=deploy-language-support</u></Orange>"
|
|
221
221
|
])
|
|
222
222
|
|
|
223
223
|
self.promptForString("Secondary languages", "mas_app_settings_secondary_langs")
|
|
@@ -226,7 +226,7 @@ class ManageSettingsMixin():
|
|
|
226
226
|
if self.getParam("mas_app_channel_manage") in ["8.7.x", "9.0.x"] and self.showAdvancedOptions:
|
|
227
227
|
self.printDescription([
|
|
228
228
|
"Integration with Cognos Analytics provides additional support for reporting features in Maximo Manage, for more information refer to the documentation online: ",
|
|
229
|
-
"
|
|
229
|
+
" - <Orange><u>https://ibm.biz/BdMuxs</u></Orange>"
|
|
230
230
|
])
|
|
231
231
|
self.yesOrNo("Enable integration with Cognos Analytics", "cpd_install_cognos")
|
|
232
232
|
self.yesOrNo("Enable integration with Watson Studio Local", "mas_appws_bindings_health_flag")
|
|
@@ -18,7 +18,7 @@ class TurbonomicSettingsMixin():
|
|
|
18
18
|
self.printH1("Configure Turbonomic")
|
|
19
19
|
self.printDescription([
|
|
20
20
|
"The IBM Turbonomic hybrid cloud cost optimization platform allows you to eliminate this guesswork with solutions that save time and optimize costs",
|
|
21
|
-
" - Learn more: <u>https://www.ibm.com/products/turbonomic</u>"
|
|
21
|
+
" - Learn more: <Orange><u>https://www.ibm.com/products/turbonomic</u></Orange>"
|
|
22
22
|
])
|
|
23
23
|
|
|
24
24
|
if isAirgapInstall(self.dynamicClient):
|