mas-cli 13.2.0__tar.gz → 13.3.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.

Files changed (115) hide show
  1. {mas_cli-13.2.0 → mas_cli-13.3.0}/PKG-INFO +1 -1
  2. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/__init__.py +1 -1
  3. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/cli.py +3 -2
  4. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/install/app.py +81 -24
  5. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/install/argBuilder.py +18 -3
  6. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/install/argParser.py +39 -0
  7. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/install/catalogs.py +2 -1
  8. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/install/params.py +4 -0
  9. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/install/settings/additionalConfigs.py +14 -1
  10. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/install/summarizer.py +10 -2
  11. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/ibm-mas-tekton.yaml +289 -114
  12. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/update/app.py +8 -6
  13. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas_cli.egg-info/PKG-INFO +1 -1
  14. {mas_cli-13.2.0 → mas_cli-13.3.0}/MANIFEST.in +0 -0
  15. {mas_cli-13.2.0 → mas_cli-13.3.0}/README.rst +0 -0
  16. {mas_cli-13.2.0 → mas_cli-13.3.0}/pyproject.toml +0 -0
  17. {mas_cli-13.2.0 → mas_cli-13.3.0}/setup.cfg +0 -0
  18. {mas_cli-13.2.0 → mas_cli-13.3.0}/setup.py +0 -0
  19. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/displayMixins.py +0 -0
  20. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/gencfg.py +0 -0
  21. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/install/__init__.py +0 -0
  22. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/install/settings/__init__.py +0 -0
  23. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/install/settings/db2Settings.py +0 -0
  24. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/install/settings/kafkaSettings.py +0 -0
  25. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/install/settings/manageSettings.py +0 -0
  26. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/install/settings/mongodbSettings.py +0 -0
  27. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/install/settings/turbonomicSettings.py +0 -0
  28. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/jdbccfg.yml.j2 +0 -0
  29. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-data-dictionary-assetdatadictionary.yml +0 -0
  30. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-bascfg.yml +0 -0
  31. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-coreidp.yml +0 -0
  32. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-actions.yml +0 -0
  33. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-auth.yml +0 -0
  34. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-datapower.yml +0 -0
  35. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-devops.yml +0 -0
  36. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-dm.yml +0 -0
  37. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-dsc.yml +0 -0
  38. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-edgeconfig.yml +0 -0
  39. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-fpl.yml +0 -0
  40. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-guardian.yml +0 -0
  41. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-iot.yml +0 -0
  42. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-mbgx.yml +0 -0
  43. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-mfgx.yml +0 -0
  44. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-monitor.yml +0 -0
  45. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-orgmgmt.yml +0 -0
  46. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-provision.yml +0 -0
  47. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-registry.yml +0 -0
  48. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-state.yml +0 -0
  49. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-webui.yml +0 -0
  50. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-healthextaccelerator.yml +0 -0
  51. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-healthextworkspace.yml +0 -0
  52. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-imagestitching.yml +0 -0
  53. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-manageaccelerators.yml +0 -0
  54. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-manageapp.yml +0 -0
  55. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-manageworkspace.yml +0 -0
  56. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-slackproxy.yml +0 -0
  57. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-pushnotificationcfg.yml +0 -0
  58. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-scimcfg.yml +0 -0
  59. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-slscfg.yml +0 -0
  60. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-smtpcfg.yml +0 -0
  61. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-suite.yml +0 -0
  62. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-visualinspection.yml +0 -0
  63. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/best-effort/ibm-sls-licenseservice.yml +0 -0
  64. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-data-dictionary-assetdatadictionary.yml +0 -0
  65. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-bascfg.yml +0 -0
  66. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-coreidp.yml +0 -0
  67. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-actions.yml +0 -0
  68. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-auth.yml +0 -0
  69. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-datapower.yml +0 -0
  70. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-devops.yml +0 -0
  71. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-dm.yml +0 -0
  72. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-dsc.yml +0 -0
  73. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-edgeconfig.yml +0 -0
  74. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-fpl.yml +0 -0
  75. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-guardian.yml +0 -0
  76. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-iot.yml +0 -0
  77. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-mbgx.yml +0 -0
  78. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-mfgx.yml +0 -0
  79. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-monitor.yml +0 -0
  80. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-orgmgmt.yml +0 -0
  81. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-provision.yml +0 -0
  82. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-registry.yml +0 -0
  83. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-state.yml +0 -0
  84. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-webui.yml +0 -0
  85. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-healthextaccelerator.yml +0 -0
  86. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-healthextworkspace.yml +0 -0
  87. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-imagestitching.yml +0 -0
  88. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-manageaccelerators.yml +0 -0
  89. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-manageapp.yml +0 -0
  90. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-manageworkspace.yml +0 -0
  91. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-slackproxy.yml +0 -0
  92. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-pushnotificationcfg.yml +0 -0
  93. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-scimcfg.yml +0 -0
  94. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-slscfg.yml +0 -0
  95. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-smtpcfg.yml +0 -0
  96. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-suite.yml +0 -0
  97. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-visualinspection.yml +0 -0
  98. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/pod-templates/guaranteed/ibm-sls-licenseservice.yml +0 -0
  99. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/templates/suite_mongocfg.yml.j2 +0 -0
  100. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/uninstall/__init__.py +0 -0
  101. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/uninstall/app.py +0 -0
  102. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/uninstall/argParser.py +0 -0
  103. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/update/__init__.py +0 -0
  104. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/update/argParser.py +0 -0
  105. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/upgrade/__init__.py +0 -0
  106. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/upgrade/app.py +0 -0
  107. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/upgrade/argParser.py +0 -0
  108. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas/cli/validators.py +0 -0
  109. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas-cli +0 -0
  110. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas_cli.egg-info/SOURCES.txt +0 -0
  111. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas_cli.egg-info/dependency_links.txt +0 -0
  112. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas_cli.egg-info/requires.txt +0 -0
  113. {mas_cli-13.2.0 → mas_cli-13.3.0}/src/mas_cli.egg-info/top_level.txt +0 -0
  114. {mas_cli-13.2.0 → mas_cli-13.3.0}/test/test_help.py +0 -0
  115. {mas_cli-13.2.0 → mas_cli-13.3.0}/test/test_install.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: mas-cli
3
- Version: 13.2.0
3
+ Version: 13.3.0
4
4
  Summary: Python Admin CLI for Maximo Application Suite
5
5
  Home-page: https://github.com/ibm-mas/cli
6
6
  Author: David Parker
@@ -8,4 +8,4 @@
8
8
  #
9
9
  # *****************************************************************************
10
10
 
11
- __version__ = "13.2.0" # Python module compatible semver
11
+ __version__ = "13.3.0" # Python module compatible semver
@@ -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.2.0"
120
+ self.version = "13.3.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
- self.catalogReleases.append(channel)
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
- self.catalogTable.append({"": application} | self.chosenCatalog[key])
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
- "Multiple releases of Maximo Application Suite are available, each is supported under IBM's standard 3+1+3 support model.",
258
- "Choose the release of IBM Maximo Application Suite that you want to use for this installation from the table below:",
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 Product License")
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
@@ -903,6 +948,14 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
903
948
  self.setParam(key, value)
904
949
  if value in ["jms", "snojms"]:
905
950
  self.setParam("mas_app_settings_persistent_volumes_flag", "true")
951
+ # SLS
952
+ elif key == "license_file":
953
+ if value is not None and value != "":
954
+ self.slsLicenseFileLocal = value
955
+ self.setParam("sls_action", "install")
956
+ elif key == "dedicated_sls":
957
+ if value:
958
+ self.setParam("sls_namespace", f"mas-{self.args.mas_instance_id}-sls")
906
959
 
907
960
  # These settings are used by the CLI rather than passed to the PipelineRun
908
961
  elif key == "storage_accessmode":
@@ -913,10 +966,6 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
913
966
  if value is None:
914
967
  self.fatalError(f"{key} must be set")
915
968
  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
969
 
921
970
  elif key.startswith("approval_"):
922
971
  if key not in self.approvals:
@@ -954,6 +1003,13 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
954
1003
  # Load the catalog information
955
1004
  self.chosenCatalog = getCatalog(self.getParam("mas_catalog_version"))
956
1005
 
1006
+ # License file is only optional for existing SLS instance
1007
+ if self.slsLicenseFileLocal is None:
1008
+ if findSLSByNamespace(self.getParam("sls_namespace"), dynClient=self.dynamicClient):
1009
+ self.setParam("sls_action", "gencfg")
1010
+ else:
1011
+ self.fatalError("--license-file must be set for new SLS install")
1012
+
957
1013
  # Once we've processed the inputs, we should validate the catalog source & prompt to accept the license terms
958
1014
  if not self.devMode:
959
1015
  self.validateCatalogSource()
@@ -977,6 +1033,10 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
977
1033
  self.devMode = args.dev_mode
978
1034
  self.skipGrafanaInstall = args.skip_grafana_install
979
1035
 
1036
+ # Set image_pull_policy of the CLI in interactive mode
1037
+ if args.image_pull_policy and args.image_pull_policy != "":
1038
+ self.setParam("image_pull_policy", args.image_pull_policy)
1039
+
980
1040
  self.approvals = {}
981
1041
 
982
1042
  # Store all args
@@ -1024,13 +1084,10 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
1024
1084
  if self.deployCP4D:
1025
1085
  self.configCP4D()
1026
1086
 
1027
- # The entitlement file for SLS is mounted as a secret in /workspace/entitlement
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
1087
+ # Set up the secrets for additional configs, podtemplates, sls license file and manual certificates
1032
1088
  self.additionalConfigs()
1033
1089
  self.podTemplates()
1090
+ self.slsLicenseFile()
1034
1091
  self.manualCertificates()
1035
1092
 
1036
1093
  # Show a summary of the installation configuration
@@ -1082,7 +1139,7 @@ class InstallApp(BaseApp, InstallSettingsMixin, InstallSummarizerMixin, ConfigGe
1082
1139
  prepareInstallSecrets(
1083
1140
  dynClient=self.dynamicClient,
1084
1141
  instanceId=self.getParam("mas_instance_id"),
1085
- slsLicenseFile=self.slsLicenseFileLocal,
1142
+ slsLicenseFile=self.slsLicenseFileSecret,
1086
1143
  additionalConfigs=self.additionalConfigsSecret,
1087
1144
  podTemplates=self.podTemplatesSecret,
1088
1145
  certs=self.certsSecret
@@ -122,9 +122,15 @@ class installArgBuilderMixin():
122
122
 
123
123
  # IBM Suite License Service
124
124
  # -----------------------------------------------------------------------------
125
- command += f" --license-file \"{self.slsLicenseFileLocal}\"{newline}"
126
- if self.getParam("sls_namespace") != "ibm-sls":
127
- command += f" --sls-namespace \"{self.getParam('sls_namespace')}\"{newline}"
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",
@@ -98,6 +99,9 @@ optionalParams = [
98
99
  "cpd_install_cognos",
99
100
  "cpd_install_openscale",
100
101
  "cpd_install_spss",
102
+ "cpd_install_ws",
103
+ "cpd_install_wml",
104
+ "cpd_install_ae",
101
105
  # Kafka
102
106
  "kafka_namespace",
103
107
  "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", "mas_pod_templates_dir", mustExist=True)
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")