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.
- {mas_cli-22.0.2/python/src/mas_cli.egg-info → mas_cli-23.1.0}/PKG-INFO +1 -1
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/__init__.py +1 -1
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/aiservice/install/app.py +108 -12
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/aiservice/install/argBuilder.py +16 -4
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/aiservice/install/argParser.py +30 -5
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/aiservice/install/params.py +9 -1
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/aiservice/install/summarizer.py +31 -4
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/cli.py +1 -1
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/app.py +77 -6
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/argBuilder.py +16 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/argParser.py +32 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/params.py +6 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/summarizer.py +32 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/app.py +15 -3
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/arg_parser.py +1 -1
- mas_cli-23.1.0/python/src/mas/cli/must_gather/dependencies/amlen.py +221 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/mas/apps.py +18 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/mas/core.py +1 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/restore/app.py +1 -6
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/ibm-mas-tekton.yaml +367 -215
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/upgrade/app.py +15 -1
- {mas_cli-22.0.2 → mas_cli-23.1.0/python/src/mas_cli.egg-info}/PKG-INFO +1 -1
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas_cli.egg-info/SOURCES.txt +1 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/LICENSE +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/README.md +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/pyproject.toml +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/README.md +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/__main__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/aiservice/install/__init__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/aiservice/upgrade/__init__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/aiservice/upgrade/app.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/aiservice/upgrade/argParser.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/backup/__init__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/backup/app.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/backup/argParser.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/displayMixins.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/gencfg.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/__init__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/catalogs.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/facilities/agents.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/settings/__init__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/settings/additionalConfigs.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/settings/aiSettings.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/settings/db2Settings.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/settings/kafkaSettings.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/settings/manageSettings.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/install/settings/mongodbSettings.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/mirror/__init__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/mirror/app.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/mirror/argParser.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/mirror/config.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/__init__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/aiservice/__init__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/aiservice/instance.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/aiservice/pipelines.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/aiservice/tenant.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/argo/__init__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/argo/applications.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/collection_plan.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/common/__init__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/common/coreapi.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/common/crd_processor.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/common/parallel.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/common/pod_exec.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/common/pods.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/common/reconcile_logs.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/common/resources.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/common/secrets.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/common/task_generation.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/common/thread_safe_client.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/dependencies/__init__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/dependencies/cert_manager.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/dependencies/cp4d.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/dependencies/db2.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/dependencies/grafana.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/dependencies/kafka.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/dependencies/mongodb.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/dependencies/rhoai.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/dependencies/sls.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/dependencies/utils.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/mas/licensing.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/mas/manage.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/mas/network_tests.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/mas/pipelines.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/mas/version.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/ocp/__init__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/ocp/airgap.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/ocp/cluster.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/ocp/marketplace.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/ocp/nodes.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/output.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/parallel_executor.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/summarizer/__init__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/summarizer/licensing.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/summarizer/nodes.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/summarizer/subscriptions.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/summarizer/suite.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/timer.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/web_viewer/__init__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/web_viewer/__main__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/must_gather/web_viewer/templates/viewer.html +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/pre_install/__init__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/pre_install/app.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/pre_install/argParser.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/rbac_utils.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/restore/__init__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/restore/argParser.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/setup_rbac/__init__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/setup_rbac/app.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/setup_rbac/argParser.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/aicfg.yml.j2 +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/facilities-configs.yml.j2 +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/jdbccfg.yml.j2 +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-bascfg.yml +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-coreidp.yml +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-pushnotificationcfg.yml +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-scimcfg.yml +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-slscfg.yml +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-smtpcfg.yml +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-suite.yml +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-visualinspection.yml +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-sls-licenseservice.yml +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/templates/suite_mongocfg.yml.j2 +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/uninstall/__init__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/uninstall/app.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/uninstall/argParser.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/update/__init__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/update/app.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/update/argParser.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/upgrade/__init__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/upgrade/argParser.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/upgrade/settings/__init__.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas/cli/validators.py +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas_cli.egg-info/dependency_links.txt +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas_cli.egg-info/entry_points.txt +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas_cli.egg-info/requires.txt +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/python/src/mas_cli.egg-info/top_level.txt +0 -0
- {mas_cli-22.0.2 → mas_cli-23.1.0}/setup.cfg +0 -0
|
@@ -173,12 +173,7 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
173
173
|
|
|
174
174
|
# Dependencies
|
|
175
175
|
self.configMongoDb()
|
|
176
|
-
self.
|
|
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
|
-
#
|
|
489
|
-
|
|
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
|
-
|
|
182
|
-
|
|
183
|
-
if self.
|
|
184
|
-
|
|
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
|
-
#
|
|
227
|
+
# Database Configuration
|
|
228
228
|
# -----------------------------------------------------------------------------
|
|
229
|
-
|
|
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
|
-
|
|
232
|
-
|
|
233
|
-
|
|
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
|
-
#
|
|
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("
|
|
82
|
-
|
|
83
|
-
self.
|
|
84
|
-
|
|
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 = "
|
|
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 '
|
|
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:
|