mas-cli 22.0.2__tar.gz → 23.1.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.
Files changed (199) hide show
  1. {mas_cli-22.0.2/python/src/mas_cli.egg-info → mas_cli-23.1.0}/PKG-INFO +1 -1
  2. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/__init__.py +1 -1
  3. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/aiservice/install/app.py +108 -12
  4. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/aiservice/install/argBuilder.py +16 -4
  5. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/aiservice/install/argParser.py +30 -5
  6. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/aiservice/install/params.py +9 -1
  7. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/aiservice/install/summarizer.py +31 -4
  8. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/cli.py +1 -1
  9. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/app.py +77 -6
  10. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/argBuilder.py +16 -0
  11. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/argParser.py +32 -0
  12. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/params.py +6 -0
  13. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/summarizer.py +32 -0
  14. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/app.py +15 -3
  15. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/arg_parser.py +1 -1
  16. mas_cli-23.1.0/python/src/mas/cli/must_gather/dependencies/amlen.py +221 -0
  17. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/mas/apps.py +18 -0
  18. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/mas/core.py +1 -0
  19. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/restore/app.py +1 -6
  20. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/ibm-mas-tekton.yaml +367 -215
  21. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/upgrade/app.py +15 -1
  22. {mas_cli-22.0.2 → mas_cli-23.1.0/python/src/mas_cli.egg-info}/PKG-INFO +1 -1
  23. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas_cli.egg-info/SOURCES.txt +1 -0
  24. {mas_cli-22.0.2 → mas_cli-23.1.0}/LICENSE +0 -0
  25. {mas_cli-22.0.2 → mas_cli-23.1.0}/README.md +0 -0
  26. {mas_cli-22.0.2 → mas_cli-23.1.0}/pyproject.toml +0 -0
  27. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/README.md +0 -0
  28. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/__main__.py +0 -0
  29. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/aiservice/install/__init__.py +0 -0
  30. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/aiservice/upgrade/__init__.py +0 -0
  31. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/aiservice/upgrade/app.py +0 -0
  32. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/aiservice/upgrade/argParser.py +0 -0
  33. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/backup/__init__.py +0 -0
  34. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/backup/app.py +0 -0
  35. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/backup/argParser.py +0 -0
  36. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/displayMixins.py +0 -0
  37. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/gencfg.py +0 -0
  38. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/__init__.py +0 -0
  39. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/catalogs.py +0 -0
  40. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/facilities/agents.py +0 -0
  41. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/settings/__init__.py +0 -0
  42. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/settings/additionalConfigs.py +0 -0
  43. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/settings/aiSettings.py +0 -0
  44. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/settings/db2Settings.py +0 -0
  45. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/settings/kafkaSettings.py +0 -0
  46. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/settings/manageSettings.py +0 -0
  47. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/settings/mongodbSettings.py +0 -0
  48. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/mirror/__init__.py +0 -0
  49. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/mirror/app.py +0 -0
  50. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/mirror/argParser.py +0 -0
  51. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/mirror/config.py +0 -0
  52. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/__init__.py +0 -0
  53. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/aiservice/__init__.py +0 -0
  54. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/aiservice/instance.py +0 -0
  55. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/aiservice/pipelines.py +0 -0
  56. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/aiservice/tenant.py +0 -0
  57. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/argo/__init__.py +0 -0
  58. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/argo/applications.py +0 -0
  59. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/collection_plan.py +0 -0
  60. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/common/__init__.py +0 -0
  61. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/common/coreapi.py +0 -0
  62. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/common/crd_processor.py +0 -0
  63. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/common/parallel.py +0 -0
  64. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/common/pod_exec.py +0 -0
  65. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/common/pods.py +0 -0
  66. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/common/reconcile_logs.py +0 -0
  67. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/common/resources.py +0 -0
  68. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/common/secrets.py +0 -0
  69. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/common/task_generation.py +0 -0
  70. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/common/thread_safe_client.py +0 -0
  71. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/dependencies/__init__.py +0 -0
  72. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/dependencies/cert_manager.py +0 -0
  73. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/dependencies/cp4d.py +0 -0
  74. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/dependencies/db2.py +0 -0
  75. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/dependencies/grafana.py +0 -0
  76. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/dependencies/kafka.py +0 -0
  77. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/dependencies/mongodb.py +0 -0
  78. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/dependencies/rhoai.py +0 -0
  79. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/dependencies/sls.py +0 -0
  80. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/dependencies/utils.py +0 -0
  81. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/mas/licensing.py +0 -0
  82. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/mas/manage.py +0 -0
  83. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/mas/network_tests.py +0 -0
  84. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/mas/pipelines.py +0 -0
  85. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/mas/version.py +0 -0
  86. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/ocp/__init__.py +0 -0
  87. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/ocp/airgap.py +0 -0
  88. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/ocp/cluster.py +0 -0
  89. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/ocp/marketplace.py +0 -0
  90. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/ocp/nodes.py +0 -0
  91. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/output.py +0 -0
  92. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/parallel_executor.py +0 -0
  93. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/summarizer/__init__.py +0 -0
  94. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/summarizer/licensing.py +0 -0
  95. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/summarizer/nodes.py +0 -0
  96. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/summarizer/subscriptions.py +0 -0
  97. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/summarizer/suite.py +0 -0
  98. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/timer.py +0 -0
  99. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/web_viewer/__init__.py +0 -0
  100. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/web_viewer/__main__.py +0 -0
  101. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/web_viewer/templates/viewer.html +0 -0
  102. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/pre_install/__init__.py +0 -0
  103. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/pre_install/app.py +0 -0
  104. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/pre_install/argParser.py +0 -0
  105. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/rbac_utils.py +0 -0
  106. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/restore/__init__.py +0 -0
  107. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/restore/argParser.py +0 -0
  108. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/setup_rbac/__init__.py +0 -0
  109. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/setup_rbac/app.py +0 -0
  110. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/setup_rbac/argParser.py +0 -0
  111. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/aicfg.yml.j2 +0 -0
  112. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/facilities-configs.yml.j2 +0 -0
  113. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/jdbccfg.yml.j2 +0 -0
  114. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-data-dictionary-assetdatadictionary.yml +0 -0
  115. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-bascfg.yml +0 -0
  116. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-coreidp.yml +0 -0
  117. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-actions.yml +0 -0
  118. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-auth.yml +0 -0
  119. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-datapower.yml +0 -0
  120. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-devops.yml +0 -0
  121. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-dm.yml +0 -0
  122. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-dsc.yml +0 -0
  123. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-edgeconfig.yml +0 -0
  124. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-fpl.yml +0 -0
  125. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-guardian.yml +0 -0
  126. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-iot.yml +0 -0
  127. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-mbgx.yml +0 -0
  128. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-mfgx.yml +0 -0
  129. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-monitor.yml +0 -0
  130. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-orgmgmt.yml +0 -0
  131. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-provision.yml +0 -0
  132. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-registry.yml +0 -0
  133. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-state.yml +0 -0
  134. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-webui.yml +0 -0
  135. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-healthextaccelerator.yml +0 -0
  136. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-healthextworkspace.yml +0 -0
  137. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-imagestitching.yml +0 -0
  138. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-manageaccelerators.yml +0 -0
  139. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-manageapp.yml +0 -0
  140. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-manageworkspace.yml +0 -0
  141. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-slackproxy.yml +0 -0
  142. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-pushnotificationcfg.yml +0 -0
  143. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-scimcfg.yml +0 -0
  144. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-slscfg.yml +0 -0
  145. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-smtpcfg.yml +0 -0
  146. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-suite.yml +0 -0
  147. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-visualinspection.yml +0 -0
  148. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-sls-licenseservice.yml +0 -0
  149. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-data-dictionary-assetdatadictionary.yml +0 -0
  150. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-bascfg.yml +0 -0
  151. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-coreidp.yml +0 -0
  152. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-actions.yml +0 -0
  153. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-auth.yml +0 -0
  154. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-datapower.yml +0 -0
  155. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-devops.yml +0 -0
  156. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-dm.yml +0 -0
  157. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-dsc.yml +0 -0
  158. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-edgeconfig.yml +0 -0
  159. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-fpl.yml +0 -0
  160. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-guardian.yml +0 -0
  161. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-iot.yml +0 -0
  162. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-mbgx.yml +0 -0
  163. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-mfgx.yml +0 -0
  164. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-monitor.yml +0 -0
  165. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-orgmgmt.yml +0 -0
  166. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-provision.yml +0 -0
  167. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-registry.yml +0 -0
  168. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-state.yml +0 -0
  169. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-webui.yml +0 -0
  170. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-healthextaccelerator.yml +0 -0
  171. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-healthextworkspace.yml +0 -0
  172. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-imagestitching.yml +0 -0
  173. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-manageaccelerators.yml +0 -0
  174. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-manageapp.yml +0 -0
  175. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-manageworkspace.yml +0 -0
  176. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-slackproxy.yml +0 -0
  177. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-pushnotificationcfg.yml +0 -0
  178. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-scimcfg.yml +0 -0
  179. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-slscfg.yml +0 -0
  180. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-smtpcfg.yml +0 -0
  181. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-suite.yml +0 -0
  182. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-visualinspection.yml +0 -0
  183. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-sls-licenseservice.yml +0 -0
  184. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/suite_mongocfg.yml.j2 +0 -0
  185. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/uninstall/__init__.py +0 -0
  186. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/uninstall/app.py +0 -0
  187. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/uninstall/argParser.py +0 -0
  188. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/update/__init__.py +0 -0
  189. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/update/app.py +0 -0
  190. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/update/argParser.py +0 -0
  191. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/upgrade/__init__.py +0 -0
  192. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/upgrade/argParser.py +0 -0
  193. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/upgrade/settings/__init__.py +0 -0
  194. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/validators.py +0 -0
  195. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas_cli.egg-info/dependency_links.txt +0 -0
  196. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas_cli.egg-info/entry_points.txt +0 -0
  197. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas_cli.egg-info/requires.txt +0 -0
  198. {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas_cli.egg-info/top_level.txt +0 -0
  199. {mas_cli-22.0.2 → mas_cli-23.1.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mas-cli
3
- Version: 22.0.2
3
+ Version: 23.1.0
4
4
  Summary: Python Admin CLI for Maximo Application Suite
5
5
  Author-email: David Parker <parkerda@uk.ibm.com>
6
6
  License-Expression: EPL-1.0
@@ -10,4 +10,4 @@
10
10
 
11
11
  from .cli import BaseApp # noqa: F401
12
12
 
13
- __version__ = "22.0.2" # Python module compatible semver
13
+ __version__ = "23.1.0" # Python module compatible semver
@@ -173,12 +173,7 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
173
173
 
174
174
  # Dependencies
175
175
  self.configMongoDb()
176
- self.setDB2DefaultChannel()
177
- self.setDB2DefaultSettings()
178
- self.printDescription(
179
- ["Db2 Universal Operator for v12 onwards requires to add a License activation key", "If you don't have a license press enter to continue."]
180
- )
181
- self.db2LicenseFileLocal = self.promptForFile("Db2 License file", envVar="DB2_LICENSE_FILE", default="", mustExist=False)
176
+ self.configDatabase()
182
177
 
183
178
  @logMethodCall
184
179
  def nonInteractiveMode(self) -> None:
@@ -199,9 +194,6 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
199
194
  "approval_aiservice": {"id": "aiservice"},
200
195
  }
201
196
 
202
- self.setDB2DefaultChannel()
203
- self.setDB2DefaultSettings()
204
-
205
197
  for key, value in vars(self.args).items():
206
198
  # These fields we just pass straight through to the parameters and fail if they are not set
207
199
  if key in requiredParams:
@@ -286,6 +278,30 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
286
278
  if value is not None and value != "":
287
279
  self.aiserviceTenantSchedulingConfigFileLocal = value
288
280
 
281
+ elif key == "db2_action_aiservice":
282
+ # Check if external DB parameters are provided
283
+ externalDbParams = ["aiservice_db_jdbc_url", "aiservice_db_username", "aiservice_db_password"]
284
+ hasExternalDb = any(vars(self.args)[dbParam] is not None for dbParam in externalDbParams)
285
+
286
+ if hasExternalDb:
287
+ # Using external database - validate all required parameters and ensure --db2-aiservice wasn't set
288
+ if value == "install" and vars(self.args)["aiservice_db_jdbc_url"] is not None:
289
+ self.fatalError(
290
+ "Cannot use --db2-aiservice with external database parameters. Use either --db2-aiservice for in-cluster DB2 OR --aiservice-db-jdbc-url for external database (Oracle/SQL Server/DB2), not both."
291
+ )
292
+
293
+ self.setParam("install_db2", "false")
294
+ self.setParam("db2_action_aiservice", "byo")
295
+ for dbParam in externalDbParams:
296
+ if vars(self.args)[dbParam] is None:
297
+ self.fatalError(f"Parameter is required when using external database: --{dbParam.replace('_', '-')}")
298
+ elif value == "install":
299
+ # Install DB2 in-cluster
300
+ self.setParam("install_db2", "true")
301
+ self.setParam("db2_action_aiservice", "install")
302
+ self.setDB2DefaultChannel()
303
+ self.setDB2DefaultSettings()
304
+
289
305
  elif key == "non_prod":
290
306
  if not value:
291
307
  self.operationalMode = 1
@@ -485,8 +501,8 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
485
501
 
486
502
  self.setParam("dro_action", "install")
487
503
 
488
- # Install Db2 for AI Service
489
- self.setParam("db2_action_aiservice", "install")
504
+ # DB2 action will be set by configDatabase() based on user choice
505
+ # Don't set db2_action_aiservice here - it should be determined by user selection
490
506
 
491
507
  # User must either provide the configuration via numerous command line arguments, or the interactive prompts
492
508
  if instanceId is None:
@@ -494,6 +510,37 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
494
510
  else:
495
511
  self.nonInteractiveMode()
496
512
 
513
+ # Check if external database parameters were provided
514
+ if self.getParam("db2_action_aiservice") == "":
515
+ externalDbProvided = (
516
+ vars(self.args).get("aiservice_db_jdbc_url") is not None
517
+ or vars(self.args).get("aiservice_db_username") is not None
518
+ or vars(self.args).get("aiservice_db_password") is not None
519
+ )
520
+
521
+ if externalDbProvided:
522
+ # External database configuration provided
523
+ self.setParam("install_db2", "false")
524
+ self.setParam("db2_action_aiservice", "byo")
525
+
526
+ # Validate required external DB parameters
527
+ requiredDbParams = ["aiservice_db_jdbc_url", "aiservice_db_username", "aiservice_db_password"]
528
+ for dbParam in requiredDbParams:
529
+ if vars(self.args).get(dbParam) is None:
530
+ self.fatalError(f"Parameter is required when using external database: --{dbParam.replace('_', '-')}")
531
+
532
+ # Set the external DB parameters
533
+ for dbParam in ["aiservice_db_jdbc_url", "aiservice_db_username", "aiservice_db_password", "aiservice_db_ca_cert"]:
534
+ value = vars(self.args).get(dbParam)
535
+ if value is not None:
536
+ self.setParam(dbParam, value)
537
+ else:
538
+ # No database configuration provided - default to installing DB2
539
+ self.setParam("install_db2", "true")
540
+ self.setParam("db2_action_aiservice", "install")
541
+ self.setDB2DefaultChannel()
542
+ self.setDB2DefaultSettings()
543
+
497
544
  # Set up the sls and db2 license file
498
545
  self.slsLicenseFile()
499
546
  self.db2LicenseFile()
@@ -547,7 +594,6 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
547
594
  aiserviceConfig=self.aiserviceConfigSecret,
548
595
  slack_token=self.getParam("slack_token"),
549
596
  slack_channel=self.getParam("slack_channel"),
550
- ibm_entitlement_key=self.getParam("ibm_entitlement_key"),
551
597
  )
552
598
 
553
599
  self.setupApprovals(pipelinesNamespace)
@@ -694,6 +740,56 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
694
740
  self.setParam("aiservice_s3_tenants_bucket", "km-tenants")
695
741
  self.setParam("aiservice_s3_templates_bucket", "km-templates")
696
742
 
743
+ @logMethodCall
744
+ def configDatabase(self) -> None:
745
+ """
746
+ Configure database for AI Service.
747
+ """
748
+ self.printH1("Database Configuration")
749
+ self.printDescription(
750
+ [
751
+ "By default, DB2 will be installed in-cluster (suitable for development and testing).",
752
+ "Alternatively, you can connect to an external Oracle or DB2 database (supported in AI Service 9.1.x only).",
753
+ # "Alternatively, you can connect to an external database (Oracle, SQL Server, or DB2).",
754
+ "",
755
+ ]
756
+ )
757
+
758
+ if self.yesOrNo("Do you want to use an external database"):
759
+ # Use external database
760
+ self.setParam("install_db2", "false")
761
+ self.setParam("db2_action_aiservice", "byo")
762
+
763
+ self.printH2("External Database Configuration")
764
+ self.printDescription(
765
+ [
766
+ "Provide connection details for your external Oracle or DB2 database.",
767
+ "",
768
+ "<b>JDBC URL Example:</b>",
769
+ " Oracle: jdbc:oracle:thin:@//hostname:1521/servicename",
770
+ " DB2: jdbc:db2://hostname:50000/database",
771
+ # " SQL Server: jdbc:sqlserver://hostname:1433;databaseName=aiservice",
772
+ "",
773
+ ]
774
+ )
775
+
776
+ self.promptForString("Database JDBC URL", "aiservice_db_jdbc_url")
777
+ self.promptForString("Database Username", "aiservice_db_username")
778
+ self.promptForString("Database Password", "aiservice_db_password", isPassword=True)
779
+
780
+ if self.yesOrNo("Does the database use SSL/TLS with a self-signed certificate"):
781
+ self.promptForString("Database CA Certificate (PEM format)", "aiservice_db_ca_cert")
782
+ else:
783
+ # Install DB2 in-cluster (default)
784
+ self.setParam("install_db2", "true")
785
+ self.setParam("db2_action_aiservice", "install")
786
+ self.setDB2DefaultChannel()
787
+ self.setDB2DefaultSettings()
788
+ self.printDescription(
789
+ ["Db2 Universal Operator for v12 onwards requires a License activation key", "If you don't have a license, press enter to continue."]
790
+ )
791
+ self.db2LicenseFileLocal = self.promptForFile("Db2 License file", envVar="DB2_LICENSE_FILE", default="", mustExist=False)
792
+
697
793
  def aiServiceIntegrations(self) -> None:
698
794
  self.printH1("WatsonX Integration")
699
795
  self.printDescription(
@@ -178,10 +178,22 @@ class aiServiceInstallArgBuilderMixin:
178
178
  if self.getParam("rsl_ca_crt") != "":
179
179
  command += f" --rsl-ca-crt \"{self.getParam('rsl_ca_crt')}\"{newline}"
180
180
 
181
- if self.getParam("db2_channel") != "":
182
- command += f" --db2-channel \"{self.getParam('db2_channel')}\"{newline}"
183
- if self.db2LicenseFileLocal:
184
- command += f' --db2-license-file "{self.db2LicenseFileLocal}"'
181
+ # Database Configuration
182
+ # -----------------------------------------------------------------------------
183
+ if self.getParam("db2_action_aiservice") == "install":
184
+ # In-cluster DB2 installation
185
+ command += f" --db2-aiservice{newline}"
186
+ if self.getParam("db2_channel") != "":
187
+ command += f" --db2-channel \"{self.getParam('db2_channel')}\"{newline}"
188
+ if self.db2LicenseFileLocal:
189
+ command += f' --db2-license-file "{self.db2LicenseFileLocal}"{newline}'
190
+ elif self.getParam("aiservice_db_jdbc_url") != "":
191
+ # External database (Oracle/SQL Server/DB2)
192
+ command += f" --aiservice-db-jdbc-url \"{self.getParam('aiservice_db_jdbc_url')}\"{newline}"
193
+ command += f" --aiservice-db-username \"{self.getParam('aiservice_db_username')}\"{newline}"
194
+ command += f" --aiservice-db-password \"{self.getParam('aiservice_db_password')}\"{newline}"
195
+ if self.getParam("aiservice_db_ca_cert") != "":
196
+ command += f" --aiservice-db-ca-cert \"{self.getParam('aiservice_db_ca_cert')}\"{newline}"
185
197
 
186
198
  command += " --accept-license --no-confirm"
187
199
  return command
@@ -224,13 +224,38 @@ aiserviceAdvancedArgGroup.add_argument(
224
224
  )
225
225
 
226
226
 
227
- # IBM Db2 Universal Operator
227
+ # Database Configuration
228
228
  # -----------------------------------------------------------------------------
229
- db2ArgGroup = aiServiceinstallArgParser.add_argument_group("IBM Db2 Universal Operator")
229
+ databaseArgGroup = aiServiceinstallArgParser.add_argument_group(
230
+ "Database Configuration",
231
+ "Configure database for AI Service. By default, DB2 is installed in-cluster. Use --db-* parameters to connect to an external database (Oracle/SQL Server/DB2) instead.",
232
+ )
230
233
 
231
- db2ArgGroup.add_argument("--db2-namespace", required=False, help="Change namespace where Db2u instances will be created")
232
- db2ArgGroup.add_argument("--db2-channel", required=False, help="Subscription channel for Db2u")
233
- db2ArgGroup.add_argument("--db2-license-file", required=False, help="Db2 License File for Db2")
234
+ # Option 1: Install DB2 in-cluster (default)
235
+ databaseArgGroup.add_argument(
236
+ "--db2-aiservice",
237
+ dest="db2_action_aiservice",
238
+ required=False,
239
+ help="Install DB2 in-cluster for AI Service (default behavior, mutually exclusive with --db-*)",
240
+ action="store_const",
241
+ const="install",
242
+ )
243
+ databaseArgGroup.add_argument("--db2-namespace", required=False, help="Change namespace where Db2u instances will be created")
244
+ databaseArgGroup.add_argument("--db2-channel", required=False, help="Subscription channel for Db2u")
245
+ databaseArgGroup.add_argument("--db2-license-file", required=False, help="Db2 License File for Db2")
246
+
247
+ # Option 2: Use external database (Oracle/SQL Server/DB2)
248
+ databaseArgGroup.add_argument(
249
+ "--aiservice-db-jdbc-url",
250
+ dest="aiservice_db_jdbc_url",
251
+ required=False,
252
+ help="JDBC URL for external database (e.g., jdbc:oracle:thin:@host:1521/service, jdbc:sqlserver://host:1433;databaseName=db, jdbc:db2://host:50000/db)",
253
+ )
254
+ databaseArgGroup.add_argument("--aiservice-db-username", dest="aiservice_db_username", required=False, help="Database username for AI Service")
255
+ databaseArgGroup.add_argument("--aiservice-db-password", dest="aiservice_db_password", required=False, help="Database password for AI Service")
256
+ databaseArgGroup.add_argument(
257
+ "--aiservice-db-ca-cert", dest="aiservice_db_ca_cert", required=False, help="Database CA certificate (PEM format, optional, only if using SSL/TLS)"
258
+ )
234
259
 
235
260
  # Development Mode
236
261
  # -----------------------------------------------------------------------------
@@ -32,7 +32,15 @@ optionalParams = [
32
32
  "sls_namespace",
33
33
  # DRO
34
34
  "dro_namespace",
35
- # Db2
35
+ # Database - External (Oracle/SQL Server/DB2)
36
+ "aiservice_db_jdbc_url",
37
+ "aiservice_db_username",
38
+ "aiservice_db_password",
39
+ "aiservice_db_ca_cert",
40
+ # Database - Installation choice
41
+ "install_db2",
42
+ "db2_action_aiservice",
43
+ # Db2 - In-cluster installation
36
44
  "db2_action_system",
37
45
  "db2_action_manage",
38
46
  "db2_action_facilities",
@@ -78,10 +78,37 @@ class aiServiceInstallSummarizerMixin:
78
78
  self.printParamSummary("Project ID", "aiservice_watsonxai_project_id")
79
79
 
80
80
  def db2Summary(self) -> None:
81
- self.printH2("IBM Db2 Univeral Operator Configuration")
82
- self.printParamSummary("Action", "db2_action_aiservice")
83
- self.printParamSummary("Install Namespace", "db2_namespace")
84
- self.printParamSummary("Subscription Channel", "db2_channel")
81
+ self.printH2("Database Configuration")
82
+
83
+ db2_action = self.getParam("db2_action_aiservice")
84
+
85
+ if db2_action == "byo":
86
+ # External database
87
+ jdbc_url = self.getParam("aiservice_db_jdbc_url")
88
+ if jdbc_url:
89
+ # Determine database type from JDBC URL
90
+ if "oracle" in jdbc_url.lower():
91
+ db_type = "External Database (Oracle)"
92
+ # elif "sqlserver" in jdbc_url.lower():
93
+ # db_type = "External Database (SQL Server)"
94
+ # elif "db2" in jdbc_url.lower():
95
+ # db_type = "External Database (DB2)"
96
+ else:
97
+ db_type = "External Database"
98
+
99
+ self.printSummary("Database Type", db_type)
100
+ self.printParamSummary("JDBC URL", "aiservice_db_jdbc_url")
101
+ self.printParamSummary("Username", "aiservice_db_username")
102
+ # Don't print password for security
103
+ if self.getParam("aiservice_db_ca_cert"):
104
+ self.printSummary("CA Certificate", "Provided")
105
+ else:
106
+ # In-cluster DB2 deployment (default when db2_action="install" or not set)
107
+ self.printSummary("Database Type", "In-cluster DB2")
108
+ if self.getParam("db2_namespace") != "":
109
+ self.printParamSummary("Install Namespace", "db2_namespace")
110
+ if self.getParam("db2_channel") != "":
111
+ self.printParamSummary("Subscription Channel", "db2_channel")
85
112
 
86
113
  def droSummary(self) -> None:
87
114
  self.printH2("IBM Data Reporter Operator (DRO) Configuration")
@@ -126,7 +126,7 @@ class BaseApp(PrintMixin, PromptMixin):
126
126
  logging.getLogger("urllib3").setLevel(logging.INFO)
127
127
 
128
128
  # Supports extended semver, unlike mas.cli.__version__
129
- self.version: str = "22.0.2"
129
+ self.version: str = "23.1.0"
130
130
  self.h1count: int = 0
131
131
  self.h2count: int = 0
132
132
 
@@ -1723,9 +1723,6 @@ class InstallApp(
1723
1723
  ]
1724
1724
  )
1725
1725
 
1726
- # Install Db2 for AI Service
1727
- self.setParam("db2_action_aiservice", "install")
1728
-
1729
1726
  self.promptForString(
1730
1727
  "Instance ID",
1731
1728
  "aiservice_instance_id",
@@ -1733,6 +1730,65 @@ class InstallApp(
1733
1730
  )
1734
1731
  self.params["aiservice_channel"] = prompt(HTML("<Yellow>Custom channel for AI Service</Yellow> "))
1735
1732
 
1733
+ @logMethodCall
1734
+ def configAIServiceDatabase(self):
1735
+ """Configure database for AI Service - either in-cluster DB2 or external database"""
1736
+ self.printH2("Database Configuration for AI Service")
1737
+ self.printDescription(
1738
+ [
1739
+ "By default, DB2 will be installed in-cluster (suitable for development and testing).",
1740
+ "Alternatively, you can connect to an external Oracle or DB2 database (supported in AI Service 9.1.x only).",
1741
+ # "Alternatively, you can connect to an external database (Oracle, SQL Server, or DB2).",
1742
+ ]
1743
+ )
1744
+
1745
+ if self.yesOrNo("Do you want to use an external database"):
1746
+ # Configure external database
1747
+ self.setParam("install_db2", "false")
1748
+ self.setParam("db2_action_aiservice", "byo")
1749
+
1750
+ self.printDescription(
1751
+ [
1752
+ "Provide connection details for your external Oracle or DB2 database.",
1753
+ "",
1754
+ "JDBC URL Example:",
1755
+ " Oracle: jdbc:oracle:thin:@//hostname:1521/servicename",
1756
+ " DB2: jdbc:db2://hostname:50000/database",
1757
+ # " SQL Server: jdbc:sqlserver://hostname:1433;databaseName=aiservice",
1758
+ ]
1759
+ )
1760
+
1761
+ self.promptForString("Database JDBC URL", "aiservice_db_jdbc_url")
1762
+ self.promptForString("Database Username", "aiservice_db_username")
1763
+ self.promptForString("Database Password", "aiservice_db_password", isPassword=True)
1764
+
1765
+ if self.yesOrNo("Does the database use SSL/TLS with a self-signed certificate"):
1766
+ self.promptForString(
1767
+ "Database CA certificate (PEM format)",
1768
+ "aiservice_db_ca_cert",
1769
+ )
1770
+ else:
1771
+ # Install DB2 for AI Service
1772
+ self.setParam("install_db2", "true")
1773
+ self.setParam("db2_action_aiservice", "install")
1774
+
1775
+ # Prompt for DB2 license file (same as standalone)
1776
+ self.printDescription(
1777
+ [
1778
+ "Db2 Universal Operator for v12 onwards requires a License activation key",
1779
+ "If you don't have a license, press enter to continue.",
1780
+ ]
1781
+ )
1782
+ db2LicenseFile = self.promptForString("Db2 License file", "db2_license_file")
1783
+ if db2LicenseFile and db2LicenseFile.strip() != "":
1784
+ self.db2LicenseFileLocal = db2LicenseFile
1785
+
1786
+ @logMethodCall
1787
+ def configAIServiceDatabaseInDependencies(self) -> None:
1788
+ """Wrapper method to configure AI Service database in the Dependencies section"""
1789
+ if self.installAIService:
1790
+ self.configAIServiceDatabase()
1791
+
1736
1792
  @logMethodCall
1737
1793
  def aiServiceSettings(self) -> None:
1738
1794
  if self.installAIService:
@@ -2002,6 +2058,7 @@ class InstallApp(
2002
2058
  self.arcgisSettings() # Will only prompt if Manage (with Spatial) or Facilities is selected
2003
2059
  self.configMongoDb()
2004
2060
  self.configDb2()
2061
+ self.configAIServiceDatabaseInDependencies() # Configure AI Service database
2005
2062
  self.configKafka() # Will only do anything if IoT has been selected for install
2006
2063
  self.configAi() # Configure AI Service integration
2007
2064
 
@@ -2190,9 +2247,24 @@ class InstallApp(
2190
2247
  elif key == "aiservice_channel":
2191
2248
  if value is not None and value != "":
2192
2249
  self.setParam("aiservice_channel", value)
2193
- # Install Db2 for AI Service
2194
- self.setParam("db2_action_aiservice", "install")
2195
2250
  self.installAIService = True
2251
+
2252
+ # Check if external DB parameters are provided
2253
+ externalDbParams = ["aiservice_db_jdbc_url", "aiservice_db_username", "aiservice_db_password"]
2254
+ hasExternalDb = any(vars(self.args)[dbParam] is not None for dbParam in externalDbParams)
2255
+
2256
+ if hasExternalDb:
2257
+ # Using external database - validate all required parameters
2258
+ self.setParam("install_db2", "false")
2259
+ self.setParam("db2_action_aiservice", "byo")
2260
+ for dbParam in externalDbParams:
2261
+ if vars(self.args)[dbParam] is None:
2262
+ self.fatalError(f"Parameter is required when using external database: --{dbParam.replace('_', '-')}")
2263
+ else:
2264
+ # Default: Install DB2 in-cluster
2265
+ self.setParam("install_db2", "true")
2266
+ self.setParam("db2_action_aiservice", "install")
2267
+
2196
2268
  # Set manage - bind - AI Service params same as provided AI Service's params
2197
2269
  self.setParam(
2198
2270
  "manage_bind_aiservice_instance_id",
@@ -2867,7 +2939,6 @@ class InstallApp(
2867
2939
  aiserviceConfig=self.aiserviceConfigSecret,
2868
2940
  slack_token=self.getParam("slack_token"),
2869
2941
  slack_channel=self.getParam("slack_channel"),
2870
- ibm_entitlement_key=self.getParam("ibm_entitlement_key"),
2871
2942
  )
2872
2943
 
2873
2944
  self.setupApprovals(pipelinesNamespace)
@@ -376,6 +376,22 @@ class installArgBuilderMixin:
376
376
  if self.getParam("aiservice_certificate_issuer") != "":
377
377
  command += f" --aiservice-certificate-issuer \"{self.getParam('aiservice_certificate_issuer')}\"{newline}"
378
378
 
379
+ # Database configuration for AI Service - matches standalone pattern
380
+ if self.getParam("db2_action_aiservice") == "install":
381
+ # In-cluster DB2 installation
382
+ command += f" --db2-aiservice{newline}"
383
+ if self.getParam("db2_channel") != "":
384
+ command += f" --db2-channel \"{self.getParam('db2_channel')}\"{newline}"
385
+ if self.db2LicenseFileLocal:
386
+ command += f' --db2-license-file "{self.db2LicenseFileLocal}"{newline}'
387
+ elif self.getParam("aiservice_db_jdbc_url") != "":
388
+ # External database (Oracle/SQL Server/DB2)
389
+ command += f" --aiservice-db-jdbc-url \"{self.getParam('aiservice_db_jdbc_url')}\"{newline}"
390
+ command += f" --aiservice-db-username \"{self.getParam('aiservice_db_username')}\"{newline}"
391
+ command += f" --aiservice-db-password \"{self.getParam('aiservice_db_password')}\"{newline}"
392
+ if self.getParam("aiservice_db_ca_cert") != "":
393
+ command += f" --aiservice-db-ca-cert \"{self.getParam('aiservice_db_ca_cert')}\"{newline}"
394
+
379
395
  if self.getParam("aiservice_s3_accesskey") != "" and self.getParam("minio_root_user") == "":
380
396
  command += f" --s3-accesskey \"{self.getParam('aiservice_s3_accesskey')}\"{newline}"
381
397
  if self.getParam("aiservice_s3_secretkey") != "" and self.getParam("minio_root_user") == "":
@@ -1186,6 +1186,38 @@ db2ArgGroup.add_argument(
1186
1186
  action="store_const",
1187
1187
  const="install",
1188
1188
  )
1189
+ db2ArgGroup.add_argument(
1190
+ "--db2-aiservice",
1191
+ dest="db2_action_aiservice",
1192
+ required=False,
1193
+ help="Install a dedicated Db2u instance for Maximo AI Service (supported by AI Service)",
1194
+ action="store_const",
1195
+ const="install",
1196
+ )
1197
+ db2ArgGroup.add_argument(
1198
+ "--aiservice-db-jdbc-url",
1199
+ dest="aiservice_db_jdbc_url",
1200
+ required=False,
1201
+ help="JDBC URL for external database (Oracle, SQL Server, or external DB2) for AI Service",
1202
+ )
1203
+ db2ArgGroup.add_argument(
1204
+ "--aiservice-db-username",
1205
+ dest="aiservice_db_username",
1206
+ required=False,
1207
+ help="Username for external database connection for AI Service",
1208
+ )
1209
+ db2ArgGroup.add_argument(
1210
+ "--aiservice-db-password",
1211
+ dest="aiservice_db_password",
1212
+ required=False,
1213
+ help="Password for external database connection for AI Service",
1214
+ )
1215
+ db2ArgGroup.add_argument(
1216
+ "--aiservice-db-ca-cert",
1217
+ dest="aiservice_db_ca_cert",
1218
+ required=False,
1219
+ help="CA certificate for external database connection (PEM format, optional) for AI Service",
1220
+ )
1189
1221
  db2ArgGroup.add_argument(
1190
1222
  "--db2-type",
1191
1223
  required=False,
@@ -224,6 +224,12 @@ optionalParams = [
224
224
  "aiservice_instance_id",
225
225
  "aiservice_watsonxai_instance_id",
226
226
  "aiservice_watsonxai_verify",
227
+ "aiservice_db_jdbc_url",
228
+ "aiservice_db_username",
229
+ "aiservice_db_password",
230
+ "aiservice_db_ca_cert",
231
+ "install_db2",
232
+ "db2_action_aiservice",
227
233
  "minio_root_user",
228
234
  "minio_root_password",
229
235
  "tenant_entitlement_type",
@@ -371,6 +371,38 @@ class InstallSummarizerMixin:
371
371
  if "aiservice_certificate_issuer" in self.params:
372
372
  self.printParamSummary("Certificate Issuer", "aiservice_certificate_issuer")
373
373
 
374
+ # Database configuration - matches standalone aiservice-install pattern
375
+ self.printH2("AI Service Database Configuration")
376
+ db2_action = self.getParam("db2_action_aiservice")
377
+
378
+ if db2_action == "byo":
379
+ # External database
380
+ jdbc_url = self.getParam("aiservice_db_jdbc_url")
381
+ if jdbc_url:
382
+ # Determine database type from JDBC URL
383
+ if "oracle" in jdbc_url.lower():
384
+ db_type = "External Database (Oracle)"
385
+ # elif "sqlserver" in jdbc_url.lower():
386
+ # db_type = "External Database (SQL Server)"
387
+ # elif "db2" in jdbc_url.lower():
388
+ # db_type = "External Database (DB2)"
389
+ else:
390
+ db_type = "External Database"
391
+
392
+ self.printSummary("Database Type", db_type)
393
+ self.printParamSummary("JDBC URL", "aiservice_db_jdbc_url")
394
+ self.printParamSummary("Username", "aiservice_db_username")
395
+ # Don't print password for security
396
+ if self.getParam("aiservice_db_ca_cert"):
397
+ self.printSummary("CA Certificate", "Provided")
398
+ else:
399
+ # In-cluster DB2 deployment (default when db2_action="install" or not set)
400
+ self.printSummary("Database Type", "In-cluster DB2")
401
+ if self.getParam("db2_namespace") != "":
402
+ self.printParamSummary("Install Namespace", "db2_namespace")
403
+ if self.getParam("db2_channel") != "":
404
+ self.printParamSummary("Subscription Channel", "db2_channel")
405
+
374
406
  self.printH2("AI Service Tenant Configuration")
375
407
  self.printParamSummary("Entitlement Type", "tenant_entitlement_type")
376
408
  self.printParamSummary("Start Date", "tenant_entitlement_start_date")
@@ -23,7 +23,7 @@ from .arg_parser import mustGatherArgParser
23
23
  from .output import OutputManager
24
24
  from .timer import Timer
25
25
  from . import ocp
26
- from .dependencies import sls
26
+ from .dependencies import sls, amlen as amlen_dep
27
27
  from .mas import core as mas_core, apps as mas_apps, pipelines as mas_pipelines
28
28
  from .aiservice import instance as aiservice_instance
29
29
  from .argo import applications as argo
@@ -411,8 +411,8 @@ class MustGatherApp(BaseApp):
411
411
  masInstanceIds = parsedArgs.mas_instance_ids.split(",") if parsedArgs.mas_instance_ids else None
412
412
  masAppIds = parsedArgs.mas_app_ids.split(",") if parsedArgs.mas_app_ids else None
413
413
 
414
- # MAS Discovery (triggered by 'mas' or 'lic' collector)
415
- if "mas" in enabledCollectors or "lic" in enabledCollectors:
414
+ # MAS Discovery (triggered by 'mas', 'lic', or 'amlen' collector)
415
+ if "mas" in enabledCollectors or "lic" in enabledCollectors or "amlen" in enabledCollectors:
416
416
  try:
417
417
  # Add MAS Core collection tasks
418
418
  coreNamespaces = mas_core.addMASCoreToCollectionPlan(
@@ -438,6 +438,18 @@ class MustGatherApp(BaseApp):
438
438
  masAppIds=masAppIds,
439
439
  )
440
440
 
441
+ # Amlen Message Gateway log collection (runs when 'amlen' collector is enabled)
442
+ # Collects from the IoT namespace (mas-{instance}-iot) where mbgx pods run
443
+ if "amlen" in enabledCollectors:
444
+ for coreNs in sorted(coreNamespaces):
445
+ instanceId = coreNs[4:-5] # Remove "mas-" prefix and "-core" suffix
446
+ iotNamespace = f"mas-{instanceId}-iot"
447
+ amlen_dep.addAmlenToCollectionPlan(
448
+ plan=plan,
449
+ namespace=iotNamespace,
450
+ outputDir=outputDir,
451
+ )
452
+
441
453
  else:
442
454
  logger.debug("No MAS instances discovered")
443
455
  except Exception as e:
@@ -72,7 +72,7 @@ def _parse_args_wrapper(args=None, namespace=None):
72
72
 
73
73
 
74
74
  # Define all available collectors
75
- ALL_COLLECTORS = ["ocp", "db2", "kafka", "mongodb", "cp4d", "cert-manager", "grafana", "sls", "mas", "rhoai", "aiservice", "lic", "pipelines"]
75
+ ALL_COLLECTORS = ["ocp", "db2", "kafka", "mongodb", "cp4d", "cert-manager", "grafana", "sls", "mas", "rhoai", "aiservice", "lic", "pipelines", "amlen"]
76
76
 
77
77
 
78
78
  def validateCollectors(collectorsStr: str) -> str: