mas-cli 21.8.2__tar.gz → 21.9.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.
Files changed (198) hide show
  1. {mas_cli-21.8.2/python/src/mas_cli.egg-info → mas_cli-21.9.1}/PKG-INFO +1 -2
  2. {mas_cli-21.8.2 → mas_cli-21.9.1}/pyproject.toml +6 -2
  3. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/__init__.py +1 -1
  4. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/__main__.py +0 -7
  5. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/aiservice/install/app.py +1 -1
  6. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/aiservice/upgrade/app.py +6 -3
  7. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/backup/app.py +12 -4
  8. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/cli.py +32 -4
  9. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/install/app.py +8 -6
  10. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/install/settings/aiSettings.py +12 -71
  11. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/install/settings/db2Settings.py +3 -2
  12. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/install/settings/manageSettings.py +89 -83
  13. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/install/summarizer.py +14 -26
  14. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/aiservice/instance.py +41 -8
  15. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/aiservice/tenant.py +4 -4
  16. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/app.py +13 -1
  17. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/arg_parser.py +1 -1
  18. mas_cli-21.9.1/python/src/mas/cli/must_gather/dependencies/rhoai.py +129 -0
  19. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/ibm-mas-tekton.yaml +15775 -37327
  20. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/uninstall/app.py +6 -3
  21. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/update/app.py +9 -4
  22. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/upgrade/app.py +10 -4
  23. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/validators.py +1 -2
  24. {mas_cli-21.8.2 → mas_cli-21.9.1/python/src/mas_cli.egg-info}/PKG-INFO +1 -2
  25. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas_cli.egg-info/SOURCES.txt +1 -0
  26. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas_cli.egg-info/requires.txt +0 -1
  27. {mas_cli-21.8.2 → mas_cli-21.9.1}/LICENSE +0 -0
  28. {mas_cli-21.8.2 → mas_cli-21.9.1}/README.md +0 -0
  29. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/README.md +0 -0
  30. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/aiservice/install/__init__.py +0 -0
  31. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/aiservice/install/argBuilder.py +0 -0
  32. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/aiservice/install/argParser.py +0 -0
  33. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/aiservice/install/params.py +0 -0
  34. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/aiservice/install/summarizer.py +0 -0
  35. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/aiservice/upgrade/__init__.py +0 -0
  36. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/aiservice/upgrade/argParser.py +0 -0
  37. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/backup/__init__.py +0 -0
  38. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/backup/argParser.py +0 -0
  39. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/displayMixins.py +0 -0
  40. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/gencfg.py +0 -0
  41. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/install/__init__.py +0 -0
  42. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/install/argBuilder.py +0 -0
  43. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/install/argParser.py +0 -0
  44. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/install/catalogs.py +0 -0
  45. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/install/facilities/agents.py +0 -0
  46. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/install/params.py +0 -0
  47. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/install/settings/__init__.py +0 -0
  48. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/install/settings/additionalConfigs.py +0 -0
  49. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/install/settings/kafkaSettings.py +0 -0
  50. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/install/settings/mongodbSettings.py +0 -0
  51. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/mirror/__init__.py +0 -0
  52. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/mirror/app.py +0 -0
  53. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/mirror/argParser.py +0 -0
  54. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/mirror/config.py +0 -0
  55. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/__init__.py +0 -0
  56. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/aiservice/__init__.py +0 -0
  57. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/aiservice/pipelines.py +0 -0
  58. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/argo/__init__.py +0 -0
  59. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/argo/applications.py +0 -0
  60. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/collection_plan.py +0 -0
  61. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/common/__init__.py +0 -0
  62. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/common/coreapi.py +0 -0
  63. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/common/crd_processor.py +0 -0
  64. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/common/parallel.py +0 -0
  65. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/common/pod_exec.py +0 -0
  66. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/common/pods.py +0 -0
  67. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/common/reconcile_logs.py +0 -0
  68. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/common/resources.py +0 -0
  69. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/common/secrets.py +0 -0
  70. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/common/task_generation.py +0 -0
  71. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/common/thread_safe_client.py +0 -0
  72. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/dependencies/__init__.py +0 -0
  73. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/dependencies/cert_manager.py +0 -0
  74. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/dependencies/cp4d.py +0 -0
  75. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/dependencies/db2.py +0 -0
  76. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/dependencies/grafana.py +0 -0
  77. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/dependencies/kafka.py +0 -0
  78. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/dependencies/mongodb.py +0 -0
  79. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/dependencies/sls.py +0 -0
  80. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/dependencies/utils.py +0 -0
  81. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/mas/apps.py +0 -0
  82. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/mas/core.py +0 -0
  83. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/mas/licensing.py +0 -0
  84. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/mas/manage.py +0 -0
  85. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/mas/network_tests.py +0 -0
  86. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/mas/pipelines.py +0 -0
  87. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/mas/version.py +0 -0
  88. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/ocp/__init__.py +0 -0
  89. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/ocp/airgap.py +0 -0
  90. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/ocp/cluster.py +0 -0
  91. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/ocp/marketplace.py +0 -0
  92. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/ocp/nodes.py +0 -0
  93. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/output.py +0 -0
  94. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/parallel_executor.py +0 -0
  95. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/summarizer/__init__.py +0 -0
  96. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/summarizer/licensing.py +0 -0
  97. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/summarizer/nodes.py +0 -0
  98. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/summarizer/subscriptions.py +0 -0
  99. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/summarizer/suite.py +0 -0
  100. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/timer.py +0 -0
  101. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/web_viewer/__init__.py +0 -0
  102. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/web_viewer/__main__.py +0 -0
  103. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/must_gather/web_viewer/templates/viewer.html +0 -0
  104. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/pre_install/__init__.py +0 -0
  105. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/pre_install/app.py +0 -0
  106. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/pre_install/argParser.py +0 -0
  107. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/rbac_utils.py +0 -0
  108. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/restore/__init__.py +0 -0
  109. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/restore/app.py +0 -0
  110. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/restore/argParser.py +0 -0
  111. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/setup_rbac/__init__.py +0 -0
  112. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/setup_rbac/app.py +0 -0
  113. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/setup_rbac/argParser.py +0 -0
  114. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/aicfg.yml.j2 +0 -0
  115. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/facilities-configs.yml.j2 +0 -0
  116. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/jdbccfg.yml.j2 +0 -0
  117. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-data-dictionary-assetdatadictionary.yml +0 -0
  118. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-bascfg.yml +0 -0
  119. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-coreidp.yml +0 -0
  120. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-actions.yml +0 -0
  121. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-auth.yml +0 -0
  122. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-datapower.yml +0 -0
  123. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-devops.yml +0 -0
  124. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-dm.yml +0 -0
  125. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-dsc.yml +0 -0
  126. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-edgeconfig.yml +0 -0
  127. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-fpl.yml +0 -0
  128. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-guardian.yml +0 -0
  129. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-iot.yml +0 -0
  130. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-mbgx.yml +0 -0
  131. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-mfgx.yml +0 -0
  132. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-monitor.yml +0 -0
  133. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-orgmgmt.yml +0 -0
  134. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-provision.yml +0 -0
  135. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-registry.yml +0 -0
  136. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-state.yml +0 -0
  137. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-webui.yml +0 -0
  138. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-healthextaccelerator.yml +0 -0
  139. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-healthextworkspace.yml +0 -0
  140. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-imagestitching.yml +0 -0
  141. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-manageaccelerators.yml +0 -0
  142. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-manageapp.yml +0 -0
  143. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-manageworkspace.yml +0 -0
  144. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-slackproxy.yml +0 -0
  145. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-pushnotificationcfg.yml +0 -0
  146. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-scimcfg.yml +0 -0
  147. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-slscfg.yml +0 -0
  148. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-smtpcfg.yml +0 -0
  149. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-suite.yml +0 -0
  150. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-visualinspection.yml +0 -0
  151. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-sls-licenseservice.yml +0 -0
  152. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-data-dictionary-assetdatadictionary.yml +0 -0
  153. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-bascfg.yml +0 -0
  154. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-coreidp.yml +0 -0
  155. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-actions.yml +0 -0
  156. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-auth.yml +0 -0
  157. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-datapower.yml +0 -0
  158. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-devops.yml +0 -0
  159. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-dm.yml +0 -0
  160. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-dsc.yml +0 -0
  161. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-edgeconfig.yml +0 -0
  162. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-fpl.yml +0 -0
  163. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-guardian.yml +0 -0
  164. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-iot.yml +0 -0
  165. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-mbgx.yml +0 -0
  166. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-mfgx.yml +0 -0
  167. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-monitor.yml +0 -0
  168. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-orgmgmt.yml +0 -0
  169. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-provision.yml +0 -0
  170. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-registry.yml +0 -0
  171. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-state.yml +0 -0
  172. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-webui.yml +0 -0
  173. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-healthextaccelerator.yml +0 -0
  174. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-healthextworkspace.yml +0 -0
  175. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-imagestitching.yml +0 -0
  176. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-manageaccelerators.yml +0 -0
  177. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-manageapp.yml +0 -0
  178. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-manageworkspace.yml +0 -0
  179. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-slackproxy.yml +0 -0
  180. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-pushnotificationcfg.yml +0 -0
  181. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-scimcfg.yml +0 -0
  182. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-slscfg.yml +0 -0
  183. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-smtpcfg.yml +0 -0
  184. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-suite.yml +0 -0
  185. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-visualinspection.yml +0 -0
  186. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-sls-licenseservice.yml +0 -0
  187. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/templates/suite_mongocfg.yml.j2 +0 -0
  188. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/uninstall/__init__.py +0 -0
  189. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/uninstall/argParser.py +0 -0
  190. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/update/__init__.py +0 -0
  191. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/update/argParser.py +0 -0
  192. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/upgrade/__init__.py +0 -0
  193. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/upgrade/argParser.py +0 -0
  194. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas/cli/upgrade/settings/__init__.py +0 -0
  195. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas_cli.egg-info/dependency_links.txt +0 -0
  196. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas_cli.egg-info/entry_points.txt +0 -0
  197. {mas_cli-21.8.2 → mas_cli-21.9.1}/python/src/mas_cli.egg-info/top_level.txt +0 -0
  198. {mas_cli-21.8.2 → mas_cli-21.9.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mas-cli
3
- Version: 21.8.2
3
+ Version: 21.9.1
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
@@ -21,7 +21,6 @@ Requires-Dist: mas-devops>=9.0.0
21
21
  Requires-Dist: alive-progress
22
22
  Requires-Dist: halo
23
23
  Requires-Dist: prompt_toolkit
24
- Requires-Dist: openshift
25
24
  Requires-Dist: kubernetes==33.1.0
26
25
  Requires-Dist: tabulate
27
26
  Requires-Dist: prettytable
@@ -21,7 +21,6 @@ dependencies = [
21
21
  "alive-progress",
22
22
  "halo",
23
23
  "prompt_toolkit",
24
- "openshift",
25
24
  "kubernetes == 33.1.0",
26
25
  "tabulate",
27
26
  "prettytable",
@@ -86,7 +85,12 @@ max-line-length = 160
86
85
 
87
86
  [tool.basedpyright]
88
87
  # Only check must-gather module during gradual rollout
89
- include = ["python/tests/unit/must_gather"]
88
+ include = [
89
+ "python/src/mas/cli/must_gather",
90
+ "python/src/mas/cli/update",
91
+ "python/src/mas/cli/upgrade",
92
+ "python/tests/unit/must_gather"
93
+ ]
90
94
 
91
95
  # Use "basic" mode - focuses on our code, lenient with untyped dependencies
92
96
  # Options: "off", "basic", "standard", "strict"
@@ -10,4 +10,4 @@
10
10
 
11
11
  from .cli import BaseApp # noqa: F401
12
12
 
13
- __version__ = "21.8.2" # Python module compatible semver
13
+ __version__ = "21.9.1" # Python module compatible semver
@@ -12,7 +12,6 @@ import logging
12
12
  from sys import argv
13
13
 
14
14
  from jinja2.exceptions import TemplateNotFound
15
- from kubeconfig.exceptions import KubectlCommandError
16
15
  from kubernetes.client.exceptions import ApiException
17
16
  from prompt_toolkit import HTML, print_formatted_text
18
17
  from urllib3.exceptions import MaxRetryError
@@ -161,12 +160,6 @@ def main() -> None:
161
160
  else:
162
161
  logger.error("Could not find template", exc_info=exception)
163
162
  raise SystemExit(1) from exception
164
- except KubectlCommandError as exception:
165
- if app:
166
- app.fatalError("Could not execute kubectl command", exception=exception)
167
- else:
168
- logger.error("Could not execute kubectl command", exc_info=exception)
169
- raise SystemExit(1) from exception
170
163
 
171
164
 
172
165
  if __name__ == "__main__":
@@ -17,7 +17,7 @@ from datetime import datetime
17
17
  from dateutil.relativedelta import relativedelta
18
18
  from sys import exit
19
19
  from os import path, getenv
20
- from openshift.dynamic.exceptions import NotFoundError
20
+ from kubernetes.dynamic.exceptions import NotFoundError
21
21
  from prompt_toolkit import prompt, print_formatted_text, HTML
22
22
  from prompt_toolkit.completion import WordCompleter
23
23
  from tabulate import tabulate
@@ -24,7 +24,7 @@ from .argParser import upgradeArgParser
24
24
  from mas.devops.ocp import createNamespace
25
25
  from mas.devops.aiservice import listAiServiceInstances, getAiserviceChannel
26
26
  from mas.devops.tekton import installOpenShiftPipelines, updateTektonDefinitions, launchAiServiceUpgradePipeline
27
- from openshift.dynamic.exceptions import ResourceNotFoundError
27
+ from kubernetes.dynamic.exceptions import ResourceNotFoundError
28
28
 
29
29
  logger = logging.getLogger(__name__)
30
30
 
@@ -69,8 +69,11 @@ class AiServiceUpgradeApp(BaseApp):
69
69
  sys.exit(1)
70
70
 
71
71
  for aiservice in aiserviceInstances:
72
- print_formatted_text(HTML(f"- <u>{aiservice['metadata']['name']}</u> v{aiservice['status']['versions']['reconciled']}"))
73
- aiserviceOptions.append(aiservice["metadata"]["name"])
72
+ instanceId = aiservice["metadata"]["name"]
73
+ reconciledVersion = self.getReconciledVersion(aiservice)
74
+
75
+ print_formatted_text(HTML(f"- <u>{instanceId}</u> v{reconciledVersion}"))
76
+ aiserviceOptions.append(instanceId)
74
77
 
75
78
  aiserviceCompleter = WordCompleter(aiserviceOptions)
76
79
  print()
@@ -15,7 +15,7 @@ from halo import Halo
15
15
  from prompt_toolkit import prompt, print_formatted_text, HTML
16
16
  from prompt_toolkit.completion import WordCompleter
17
17
 
18
- from openshift.dynamic.exceptions import ResourceNotFoundError
18
+ from kubernetes.dynamic.exceptions import ResourceNotFoundError
19
19
 
20
20
  from ..cli import BaseApp
21
21
  from ..validators import InstanceIDValidator, StorageClassValidator
@@ -270,7 +270,10 @@ class BackupApp(BaseApp):
270
270
  instances = listMasInstances(self.dynamicClient)
271
271
  self.printDescription(["The following MAS instances are installed on the target cluster:"])
272
272
  for instance in instances:
273
- self.printDescription([f"- <u>{instance['metadata']['name']}</u> v{instance['status']['versions']['reconciled']}"])
273
+ instanceId = instance["metadata"]["name"]
274
+ reconciledVersion = self.getReconciledVersion(instance)
275
+
276
+ self.printDescription([f"- <u>{instanceId}</u> v{reconciledVersion}"])
274
277
  return True
275
278
  except ResourceNotFoundError:
276
279
  self.printDescription(["No MAS instances were detected on the cluster (Suite.core.mas.ibm.com/v1 API is not available)"])
@@ -284,13 +287,18 @@ class BackupApp(BaseApp):
284
287
  self.fatalError("No MAS instances found on the cluster")
285
288
  elif len(instances) == 1:
286
289
  instanceId = instances[0]["metadata"]["name"]
290
+ reconciledVersion = self.getReconciledVersion(instances[0])
291
+
287
292
  self.setParam("mas_instance_id", instanceId)
288
293
  self.printDescription([f"Using MAS instance: <u>{instanceId}</u>"])
289
294
  else:
290
295
  instanceOptions = []
291
296
  for instance in instances:
292
- self.printDescription([f"- <u>{instance['metadata']['name']}</u> v{instance['status']['versions']['reconciled']}"])
293
- instanceOptions.append(instance["metadata"]["name"])
297
+ instanceId = instance["metadata"]["name"]
298
+ reconciledVersion = self.getReconciledVersion(instance)
299
+
300
+ self.printDescription([f"- <u>{instanceId}</u> v{reconciledVersion}"])
301
+ instanceOptions.append(instanceId)
294
302
 
295
303
  instanceCompleter = WordCompleter(instanceOptions)
296
304
  print()
@@ -21,12 +21,11 @@ import threading
21
21
  import json
22
22
  from typing import List, Dict, Any, Callable, Type, NoReturn
23
23
 
24
- # Use of the openshift client rather than the kubernetes client allows us access to "apply"
25
24
  from kubernetes import config
26
25
  from kubernetes.client.api_client import ApiClient
27
26
  from kubernetes.client import Configuration
28
- from openshift.dynamic import DynamicClient
29
- from openshift.dynamic.exceptions import NotFoundError
27
+ from kubernetes.dynamic import DynamicClient
28
+ from kubernetes.dynamic.exceptions import NotFoundError
30
29
 
31
30
  from prompt_toolkit import prompt, print_formatted_text, HTML
32
31
 
@@ -127,7 +126,7 @@ class BaseApp(PrintMixin, PromptMixin):
127
126
  logging.getLogger("urllib3").setLevel(logging.INFO)
128
127
 
129
128
  # Supports extended semver, unlike mas.cli.__version__
130
- self.version: str = "21.8.2"
129
+ self.version: str = "21.9.1"
131
130
  self.h1count: int = 0
132
131
  self.h2count: int = 0
133
132
 
@@ -427,6 +426,35 @@ class BaseApp(PrintMixin, PromptMixin):
427
426
  logger.exception(e, stack_info=True)
428
427
  return None
429
428
 
429
+ def getReconciledVersion(self, instance: Dict[str, Any]) -> str:
430
+ """
431
+ Get the reconciled version from an instance's status.
432
+
433
+ Checks if the instance is in a healthy state by verifying the presence of a reconciled version.
434
+ If the instance is unhealthy (missing reconciled version), triggers a fatal error with a clear message.
435
+
436
+ Args:
437
+ instance (dict): The instance resource dictionary containing metadata, kind, and status
438
+
439
+ Returns:
440
+ str: The reconciled version if the instance is healthy
441
+
442
+ Raises:
443
+ SystemExit: Via fatalError if the instance is unhealthy
444
+ """
445
+ instanceId = instance["metadata"]["name"]
446
+ instanceKind = instance.get("kind", "Instance")
447
+ reconciledVersion = instance.get("status", {}).get("versions", {}).get("reconciled")
448
+
449
+ if not reconciledVersion:
450
+ self.fatalError(
451
+ f"{instanceKind} '{instanceId}' is in an unhealthy state (missing reconciled version). "
452
+ f"We do not recommend (and thus do not support) continuing when there are unhealthy instances on the cluster. "
453
+ f"Please resolve the instance health issues before attempting to proceed."
454
+ )
455
+
456
+ return reconciledVersion
457
+
430
458
  @logMethodCall
431
459
  def connect(self) -> None:
432
460
  promptForNewServer = False
@@ -17,7 +17,8 @@ from datetime import datetime
17
17
  from dateutil.relativedelta import relativedelta
18
18
  import re
19
19
  import calendar
20
- from openshift.dynamic.exceptions import NotFoundError
20
+ from kubernetes.dynamic.exceptions import NotFoundError
21
+ from urllib3.exceptions import MaxRetryError
21
22
 
22
23
  from typing import Dict, Any
23
24
 
@@ -181,6 +182,8 @@ class InstallApp(
181
182
  ]
182
183
  )
183
184
  )
185
+ except MaxRetryError:
186
+ self.fatalError("Unable to connect to the Kubernetes API server. Please verify cluster connectivity and try again.")
184
187
 
185
188
  @logMethodCall
186
189
  def licensePrompt(self):
@@ -270,11 +273,8 @@ class InstallApp(
270
273
 
271
274
  # Generate catalogTable
272
275
  for application, key in applications.items():
273
- # Add 9.1-feature channel based off 9.0 to those apps that have not onboarded yet
274
276
  if key in self.chosenCatalog:
275
277
  tempChosenCatalog = self.chosenCatalog[key].copy()
276
- if "9.1.x-feature" not in tempChosenCatalog and "9.0.x" in tempChosenCatalog:
277
- tempChosenCatalog.update({"9.1.x-feature": tempChosenCatalog["9.0.x"]})
278
278
 
279
279
  self.catalogTable.append({"": application} | {key.replace(".x", ""): value for key, value in sorted(tempChosenCatalog.items(), reverse=True)})
280
280
 
@@ -1295,7 +1295,7 @@ class InstallApp(
1295
1295
  self.installFacilities = False
1296
1296
 
1297
1297
  # AI Service is only installable on Manage 9.x as AI Config Application is not supported on Manage 8.x
1298
- if isVersionEqualOrAfter("9.0.0", self.getParam("mas_app_channel_manage")):
1298
+ if self.getParam("mas_app_channel_manage") != "" and isVersionEqualOrAfter("9.0.0", self.getParam("mas_app_channel_manage")):
1299
1299
  self.installAIService = self.yesOrNo("Install AI Service")
1300
1300
  if self.installAIService:
1301
1301
  self.configAIService()
@@ -1323,8 +1323,11 @@ class InstallApp(
1323
1323
  " - ReadWriteOnce volumes can be mounted as read-write by multiple pods on a single node.",
1324
1324
  " - ReadWriteMany volumes can be mounted as read-write by multiple pods across many nodes.",
1325
1325
  "",
1326
+ "Note: Remote file systems are often slower than local file systems, using a storage class backed by a remote file system (e.g. NFS) as the RWO storage class may result in degraded performance",
1327
+ "",
1326
1328
  ]
1327
1329
  )
1330
+
1328
1331
  defaultStorageClasses = getDefaultStorageClasses(self.dynamicClient)
1329
1332
  if defaultStorageClasses.provider is not None:
1330
1333
  print_formatted_text(HTML(f"<MediumSeaGreen>Storage provider auto-detected: {defaultStorageClasses.providerName}</MediumSeaGreen>"))
@@ -2367,7 +2370,6 @@ class InstallApp(
2367
2370
  self.fatalError(f"Unknown option: {key} {value}")
2368
2371
 
2369
2372
  if self.installManage:
2370
-
2371
2373
  # Configure Storage and Access mode
2372
2374
  self.manageStorageAndAccessMode()
2373
2375
 
@@ -62,11 +62,10 @@ class AiSettingsMixin:
62
62
 
63
63
  def generateAiCfg(self, instanceId: str, scope: str, destination: str, workspaceId: str = "") -> None: ...
64
64
 
65
- def configAi(self, silentMode=False) -> None:
65
+ def configAi(self) -> None:
66
66
  """Configure AiCfg for MAS installation"""
67
67
 
68
- # FIRST: Check MAS version - AiCfg is only supported in MAS 9.2+
69
- # This must be done BEFORE checking user preferences to prevent errors on 9.1
68
+ # AiCfg is only supported in MAS 9.2+
70
69
  mas_channel = self.getParam("mas_channel")
71
70
  is_mas_92_or_later = False
72
71
 
@@ -83,44 +82,22 @@ class AiSettingsMixin:
83
82
 
84
83
  # If MAS 9.1 or earlier, force disable AiCfg regardless of user input
85
84
  if not is_mas_92_or_later:
86
- if not silentMode:
87
- self.printH1("Configure AiCfg")
88
- self.printDescription(
89
- [
90
- "⚠️ IMPORTANT: AiCfg is only available in MAS 9.2 and later.",
91
- f" Your MAS channel is: {mas_channel or 'not set'}",
92
- "",
93
- "AiCfg configuration will be skipped.",
94
- "If you upgrade to MAS 9.2+ in the future, you can configure AiCfg then.",
95
- ]
96
- )
97
- self.setParam("configure_aiassistant", "none")
98
- print_formatted_text("⚠️ AiCfg configuration skipped (requires MAS 9.2+)")
99
85
  return
100
86
 
101
- # MAS 9.2+ - proceed with normal configuration
102
- if not silentMode:
103
- self.printH1("Configure AiCfg")
104
- self.printDescription(
105
- [
106
- "The installer can configure AiCfg integration for your MAS instance.",
107
- "AiCfg provides AI/ML capabilities for MAS applications like Manage, Monitor, and Predict.",
108
- "AiCfg is configured at system scope and available to all workspaces.",
109
- ]
110
- )
87
+ self.printH1("Maximo AI Configuration")
88
+ self.printDescription(
89
+ [
90
+ "The installer can configure AiCfg integration for your MAS instance.",
91
+ "AiCfg provides AI/ML capabilities for MAS applications like Manage, Monitor, and Predict.",
92
+ "AiCfg is configured at system scope and available to all workspaces.",
93
+ ]
94
+ )
111
95
 
112
96
  # Ask if user wants to configure AiCfg
113
- if not silentMode:
114
- # Interactive mode - ask user
115
- configureAi = self.yesOrNo("Do you want to configure AiCfg")
116
- else:
117
- # Silent mode - check if explicitly requested via parameter
118
- # Default to False (skip) unless parameter says otherwise
119
- configureAi = self.getParam("configure_aiassistant") not in [None, "none", ""]
97
+ configureAi = self.yesOrNo("Do you want to configure AiCfg")
120
98
 
121
99
  if not configureAi:
122
100
  self.setParam("configure_aiassistant", "none")
123
- print_formatted_text("AiCfg configuration skipped")
124
101
  return
125
102
 
126
103
  instanceId = self.getParam("mas_instance_id")
@@ -132,50 +109,14 @@ class AiSettingsMixin:
132
109
 
133
110
  # Check if AI Service is being installed on the same cluster
134
111
  if hasattr(self, "installAIService") and self.installAIService:
135
- # AI Service will be installed - defer AiCfg generation to pipeline
136
- if not silentMode:
137
- self.printH2("AiCfg Configuration (Automatic)")
138
- self.printDescription(
139
- [
140
- "AI Service is being installed on this cluster.",
141
- "The AiCfg will be automatically generated and applied by the pipeline",
142
- "AFTER AI Service installation completes.",
143
- "",
144
- "The pipeline will:",
145
- " 1. Install AI Service first",
146
- " 2. Auto-detect connection details (URL, API key, certificate)",
147
- " 3. Generate and apply AiCfg automatically",
148
- "",
149
- "No manual configuration needed!",
150
- ]
151
- )
152
-
153
112
  # Set action to indicate pipeline should handle it
154
113
  self.setParam("configure_aiassistant", "pipeline")
155
114
  print_formatted_text("\n✓ AiCfg will be automatically configured by the pipeline after AI Service installation")
156
115
  else:
157
116
  # Manual configuration for external AI Service
158
- if not silentMode:
159
- self.printH2("AiCfg Configuration")
160
- self.printDescription(
161
- [
162
- "You can provide connection details for an existing AI Service instance.",
163
- "The installer will generate the AiCfg YAML file with your connection details.",
164
- "",
165
- "IMPORTANT: The AiCfg file must be applied AFTER the MAS Core operator is installed,",
166
- "as the AiCfg CRD is created by the operator (not during initial config phase).",
167
- "Do NOT include this file in the initial configuration directory.",
168
- "Apply it after the operator creates the CRD.",
169
- ]
170
- )
171
-
172
- createAiConfig = True
173
- if not silentMode:
174
- createAiConfig = self.yesOrNo("Generate AiCfg configuration file (apply after operator install)")
175
-
117
+ createAiConfig = self.yesOrNo("Generate AiCfg configuration file (apply after operator install)")
176
118
  if createAiConfig:
177
119
  self.setParam("configure_aiassistant", "configure")
178
-
179
120
  self.selectLocalConfigDir()
180
121
 
181
122
  # Check if a configuration already exists before creating a new one
@@ -12,6 +12,8 @@ from os import path
12
12
  from typing import TYPE_CHECKING, Dict, List, Any
13
13
  from prompt_toolkit import print_formatted_text
14
14
 
15
+ from mas.devops.utils import isVersionEqualOrAfter
16
+
15
17
  if TYPE_CHECKING:
16
18
  # Type hints for methods and attributes provided by other mixins
17
19
  # These are only used during type checking and have no runtime cost
@@ -25,6 +27,7 @@ class Db2SettingsMixin:
25
27
  params: Dict[str, str]
26
28
  devMode: bool
27
29
  installIoT: bool
30
+ installMonitor: bool
28
31
  installManage: bool
29
32
  installFacilities: bool
30
33
  manageAppName: str
@@ -100,8 +103,6 @@ class Db2SettingsMixin:
100
103
  # Determine which application requires the system database based on Monitor version
101
104
  # For Monitor >= 9.2.0: Monitor requires system Db2
102
105
  # For Monitor < 9.2.0: IoT requires system Db2 (original behavior)
103
- from mas.devops.utils import isVersionEqualOrAfter
104
-
105
106
  monitorChannel = self.getParam("mas_app_channel_monitor")
106
107
  useNewDependency = monitorChannel and isVersionEqualOrAfter("9.2.0", monitorChannel)
107
108
  instanceId = self.getParam("mas_instance_id")