mas-cli 10.0.6__tar.gz → 10.1.1__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-10.0.6 → mas_cli-10.1.1}/PKG-INFO +1 -1
- {mas_cli-10.0.6 → mas_cli-10.1.1}/setup.py +1 -3
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/__init__.py +1 -1
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/cli.py +4 -3
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/install/__init__.py +2 -0
- mas_cli-10.0.6/src/mas-install → mas_cli-10.1.1/src/mas/cli/install/app.py +10 -34
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/install/argParser.py +1 -1
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/ibm-mas-tekton.yaml +164 -57
- mas_cli-10.1.1/src/mas/cli/uninstall/__init__.py +11 -0
- mas_cli-10.0.6/src/mas-uninstall → mas_cli-10.1.1/src/mas/cli/uninstall/app.py +7 -127
- mas_cli-10.1.1/src/mas/cli/uninstall/argParser.py +108 -0
- mas_cli-10.1.1/src/mas/cli/upgrade/__init__.py +11 -0
- mas_cli-10.0.6/src/mas-upgrade → mas_cli-10.1.1/src/mas/cli/upgrade/app.py +12 -64
- mas_cli-10.1.1/src/mas/cli/upgrade/argParser.py +56 -0
- mas_cli-10.1.1/src/mas-cli +75 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas_cli.egg-info/PKG-INFO +1 -1
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas_cli.egg-info/SOURCES.txt +10 -4
- mas_cli-10.1.1/test/test_help.py +42 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/MANIFEST.in +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/README.rst +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/pyproject.toml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/setup.cfg +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/displayMixins.py +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/gencfg.py +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/install/settings/__init__.py +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/install/settings/additionalConfigs.py +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/install/settings/db2Settings.py +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/install/settings/kafkaSettings.py +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/install/settings/manageSettings.py +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/install/settings/turbonomicSettings.py +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/install/summarizer.py +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/jdbccfg.yml.j2 +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-data-dictionary-assetdatadictionary.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-bascfg.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-coreidp.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-actions.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-auth.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-datapower.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-devops.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-dm.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-dsc.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-edgeconfig.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-fpl.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-guardian.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-iot.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-mbgx.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-mfgx.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-monitor.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-orgmgmt.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-provision.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-registry.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-state.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-webui.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-healthextaccelerator.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-healthextworkspace.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-imagestitching.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-manageaccelerators.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-manageapp.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-manageworkspace.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-slackproxy.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-pushnotificationcfg.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-scimcfg.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-slscfg.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-smtpcfg.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-suite.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-visualinspection.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/best-effort/ibm-sls-licenseservice.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-data-dictionary-assetdatadictionary.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-bascfg.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-coreidp.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-actions.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-auth.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-datapower.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-devops.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-dm.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-dsc.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-edgeconfig.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-fpl.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-guardian.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-iot.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-mbgx.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-mfgx.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-monitor.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-orgmgmt.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-provision.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-registry.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-state.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-webui.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-healthextaccelerator.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-healthextworkspace.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-imagestitching.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-manageaccelerators.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-manageapp.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-manageworkspace.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-slackproxy.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-pushnotificationcfg.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-scimcfg.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-slscfg.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-smtpcfg.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-suite.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-visualinspection.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/guaranteed/ibm-sls-licenseservice.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/templates/pod-templates/saas-essentials/ibm-mas-visualinspection.yml +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas/cli/validators.py +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas_cli.egg-info/dependency_links.txt +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas_cli.egg-info/requires.txt +0 -0
- {mas_cli-10.0.6 → mas_cli-10.1.1}/src/mas_cli.egg-info/top_level.txt +0 -0
|
@@ -47,9 +47,7 @@ setup(
|
|
|
47
47
|
packages=find_namespace_packages(where='src'),
|
|
48
48
|
include_package_data=True,
|
|
49
49
|
scripts=[
|
|
50
|
-
'src/mas-
|
|
51
|
-
'src/mas-upgrade',
|
|
52
|
-
'src/mas-uninstall'
|
|
50
|
+
'src/mas-cli'
|
|
53
51
|
],
|
|
54
52
|
url='https://github.com/ibm-mas/cli',
|
|
55
53
|
license='Eclipse Public License - v1.0',
|
|
@@ -124,9 +124,7 @@ class BaseApp(PrintMixin, PromptMixin):
|
|
|
124
124
|
self.printTitle(f"\nIBM Maximo Application Suite Admin CLI v{self.version}")
|
|
125
125
|
print_formatted_text(HTML("Powered by <DarkGoldenRod><u>https://github.com/ibm-mas/ansible-devops/</u></DarkGoldenRod> and <DarkGoldenRod><u>https://tekton.dev/</u></DarkGoldenRod>\n"))
|
|
126
126
|
if which("kubectl") is None:
|
|
127
|
-
|
|
128
|
-
print_formatted_text(HTML("\n<Red>Error: Could not find kubectl on the path, see <u>https://kubernetes.io/docs/tasks/tools/#kubectl</u> for installation instructions</Red>\n"))
|
|
129
|
-
exit(1)
|
|
127
|
+
self.fatalError("Could not find kubectl on the path, see <u>https://kubernetes.io/docs/tasks/tools/#kubectl</u> for installation instructions")
|
|
130
128
|
|
|
131
129
|
def getCompatibleVersions(self, coreChannel: str, appId: str) -> list:
|
|
132
130
|
if coreChannel in self.compatibilityMatrix:
|
|
@@ -136,8 +134,11 @@ class BaseApp(PrintMixin, PromptMixin):
|
|
|
136
134
|
|
|
137
135
|
def fatalError(self, message: str, exception: Exception=None) -> None:
|
|
138
136
|
if exception is not None:
|
|
137
|
+
logger.error(message)
|
|
138
|
+
logger.exception(exception, stack_info=True)
|
|
139
139
|
print_formatted_text(HTML(f"<Red>Fatal Exception: {message.replace(' & ', ' & ')}: {exception}</Red>"))
|
|
140
140
|
else:
|
|
141
|
+
logger.error(message)
|
|
141
142
|
print_formatted_text(HTML(f"<Red>Fatal Error: {message.replace(' & ', ' & ')}</Red>"))
|
|
142
143
|
exit(1)
|
|
143
144
|
|
|
@@ -18,20 +18,16 @@ import re
|
|
|
18
18
|
from openshift.dynamic.exceptions import NotFoundError
|
|
19
19
|
|
|
20
20
|
from prompt_toolkit import prompt, print_formatted_text, HTML
|
|
21
|
-
from urllib3.exceptions import MaxRetryError
|
|
22
|
-
from jinja2.exceptions import TemplateNotFound
|
|
23
|
-
from kubeconfig.exceptions import KubectlCommandError
|
|
24
|
-
from kubernetes.client.exceptions import ApiException
|
|
25
21
|
|
|
26
22
|
from tabulate import tabulate
|
|
27
23
|
|
|
28
24
|
from halo import Halo
|
|
29
25
|
|
|
30
|
-
from
|
|
31
|
-
from
|
|
32
|
-
from
|
|
33
|
-
from
|
|
34
|
-
from
|
|
26
|
+
from ..cli import BaseApp
|
|
27
|
+
from ..gencfg import ConfigGeneratorMixin
|
|
28
|
+
from .argParser import installArgParser
|
|
29
|
+
from .settings import InstallSettingsMixin
|
|
30
|
+
from .summarizer import InstallSummarizerMixin
|
|
35
31
|
|
|
36
32
|
from mas.cli.validators import (
|
|
37
33
|
InstanceIDFormatValidator,
|
|
@@ -47,7 +43,7 @@ from mas.devops.tekton import installOpenShiftPipelines, updateTektonDefinitions
|
|
|
47
43
|
logger = logging.getLogger(__name__)
|
|
48
44
|
|
|
49
45
|
|
|
50
|
-
class
|
|
46
|
+
class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGeneratorMixin):
|
|
51
47
|
def validateCatalogSource(self):
|
|
52
48
|
catalogsAPI = self.dynamicClient.resources.get(api_version="operators.coreos.com/v1alpha1", kind="CatalogSource")
|
|
53
49
|
try:
|
|
@@ -667,7 +663,7 @@ class App(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGenerator
|
|
|
667
663
|
"mas_arcgis_channel"
|
|
668
664
|
]
|
|
669
665
|
|
|
670
|
-
for key, value in vars(args).items():
|
|
666
|
+
for key, value in vars(self.args).items():
|
|
671
667
|
# These fields we just pass straight through to the parameters and fail if they are not set
|
|
672
668
|
if key in requiredParams:
|
|
673
669
|
if value is None:
|
|
@@ -778,10 +774,12 @@ class App(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGenerator
|
|
|
778
774
|
self.validateCatalogSource()
|
|
779
775
|
self.licensePrompt()
|
|
780
776
|
|
|
781
|
-
def install(self,
|
|
777
|
+
def install(self, argv):
|
|
782
778
|
"""
|
|
783
779
|
Install MAS instance
|
|
784
780
|
"""
|
|
781
|
+
args = installArgParser.parse_args(args=argv)
|
|
782
|
+
|
|
785
783
|
# We use the presence of --mas-instance-id to determine whether
|
|
786
784
|
# the CLI is being started in interactive mode or not
|
|
787
785
|
instanceId = args.mas_instance_id
|
|
@@ -967,25 +965,3 @@ class App(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGenerator
|
|
|
967
965
|
else:
|
|
968
966
|
h.stop_and_persist(symbol=self.failureIcon, text=f"Failed to submit PipelineRun for {self.getParam('mas_instance_id')} install, see log file for details")
|
|
969
967
|
print()
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
if __name__ == '__main__':
|
|
973
|
-
args = installArgParser.parse_args()
|
|
974
|
-
|
|
975
|
-
try:
|
|
976
|
-
app = App()
|
|
977
|
-
app.install(args)
|
|
978
|
-
except KeyboardInterrupt as e:
|
|
979
|
-
pass
|
|
980
|
-
except ApiException as e:
|
|
981
|
-
logger.exception(e, stack_info=True)
|
|
982
|
-
app.fatalError(message=f"An error occured communicating with the target server: {e.reason} ({e.status})")
|
|
983
|
-
except MaxRetryError as e:
|
|
984
|
-
logger.exception(e, stack_info=True)
|
|
985
|
-
app.fatalError(message="Unable to connect to API server", exception=e)
|
|
986
|
-
except TemplateNotFound as e:
|
|
987
|
-
logger.exception(e, stack_info=True)
|
|
988
|
-
app.fatalError("Could not find template", exception=e)
|
|
989
|
-
except KubectlCommandError as e:
|
|
990
|
-
logger.exception(e, stack_info=True)
|
|
991
|
-
app.fatalError("Could not execute kubectl command", exception=e)
|
|
@@ -21,7 +21,7 @@ def isValidFile(parser, arg) -> str:
|
|
|
21
21
|
return arg
|
|
22
22
|
|
|
23
23
|
installArgParser = argparse.ArgumentParser(
|
|
24
|
-
prog="mas
|
|
24
|
+
prog="mas install",
|
|
25
25
|
description="\n".join([
|
|
26
26
|
f"IBM Maximo Application Suite Admin CLI v{packageVersion}",
|
|
27
27
|
"Install MAS by configuring and launching the MAS Uninstall Tekton Pipeline.\n",
|