mas-cli 21.7.0__tar.gz → 21.8.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.
- {mas_cli-21.7.0/python/src/mas_cli.egg-info → mas_cli-21.8.1}/PKG-INFO +1 -1
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/__init__.py +1 -1
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/aiservice/install/app.py +26 -1
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/backup/app.py +34 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/backup/argParser.py +32 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/cli.py +97 -1
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/install/app.py +60 -4
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/install/argBuilder.py +12 -4
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/install/argParser.py +11 -2
- mas_cli-21.8.1/python/src/mas/cli/install/facilities/agents.py +31 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/install/params.py +13 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/install/settings/additionalConfigs.py +8 -5
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/install/settings/manageSettings.py +3 -3
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/install/summarizer.py +20 -5
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/app.py +237 -44
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/arg_parser.py +9 -2
- mas_cli-21.8.1/python/src/mas/cli/must_gather/common/coreapi.py +84 -0
- mas_cli-21.8.1/python/src/mas/cli/must_gather/common/pod_exec.py +126 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/common/reconcile_logs.py +35 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/mas/apps.py +5 -0
- mas_cli-21.8.1/python/src/mas/cli/must_gather/mas/core.py +353 -0
- mas_cli-21.8.1/python/src/mas/cli/must_gather/mas/licensing.py +164 -0
- mas_cli-21.8.1/python/src/mas/cli/must_gather/mas/manage.py +94 -0
- mas_cli-21.8.1/python/src/mas/cli/must_gather/mas/network_tests.py +268 -0
- mas_cli-21.8.1/python/src/mas/cli/must_gather/mas/version.py +105 -0
- mas_cli-21.8.1/python/src/mas/cli/must_gather/ocp/nodes.py +534 -0
- mas_cli-21.8.1/python/src/mas/cli/must_gather/summarizer/licensing.py +396 -0
- mas_cli-21.8.1/python/src/mas/cli/must_gather/summarizer/nodes.py +112 -0
- mas_cli-21.8.1/python/src/mas/cli/must_gather/summarizer/suite.py +676 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/restore/app.py +60 -1
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/restore/argParser.py +32 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/ibm-mas-tekton.yaml +476 -204
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/upgrade/app.py +1 -1
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/validators.py +10 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1/python/src/mas_cli.egg-info}/PKG-INFO +1 -1
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas_cli.egg-info/SOURCES.txt +10 -0
- mas_cli-21.7.0/python/src/mas/cli/must_gather/mas/core.py +0 -163
- mas_cli-21.7.0/python/src/mas/cli/must_gather/ocp/nodes.py +0 -38
- {mas_cli-21.7.0 → mas_cli-21.8.1}/LICENSE +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/README.md +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/pyproject.toml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/README.md +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/__main__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/aiservice/install/__init__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/aiservice/install/argBuilder.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/aiservice/install/argParser.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/aiservice/install/params.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/aiservice/install/summarizer.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/aiservice/upgrade/__init__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/aiservice/upgrade/app.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/aiservice/upgrade/argParser.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/backup/__init__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/displayMixins.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/gencfg.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/install/__init__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/install/catalogs.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/install/settings/__init__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/install/settings/aiSettings.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/install/settings/db2Settings.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/install/settings/kafkaSettings.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/install/settings/mongodbSettings.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/mirror/__init__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/mirror/app.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/mirror/argParser.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/mirror/config.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/__init__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/aiservice/__init__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/aiservice/instance.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/aiservice/pipelines.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/aiservice/tenant.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/argo/__init__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/argo/applications.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/collection_plan.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/common/__init__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/common/crd_processor.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/common/parallel.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/common/pods.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/common/resources.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/common/secrets.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/common/task_generation.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/common/thread_safe_client.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/dependencies/__init__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/dependencies/cert_manager.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/dependencies/cp4d.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/dependencies/db2.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/dependencies/grafana.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/dependencies/kafka.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/dependencies/mongodb.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/dependencies/sls.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/dependencies/utils.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/mas/pipelines.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/ocp/__init__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/ocp/airgap.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/ocp/cluster.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/ocp/marketplace.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/output.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/parallel_executor.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/summarizer/__init__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/summarizer/subscriptions.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/timer.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/web_viewer/__init__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/web_viewer/__main__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/must_gather/web_viewer/templates/viewer.html +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/pre_install/__init__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/pre_install/app.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/pre_install/argParser.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/rbac_utils.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/restore/__init__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/setup_rbac/__init__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/setup_rbac/app.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/setup_rbac/argParser.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/aicfg.yml.j2 +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/facilities-configs.yml.j2 +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/jdbccfg.yml.j2 +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-data-dictionary-assetdatadictionary.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-bascfg.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-coreidp.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-actions.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-auth.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-datapower.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-devops.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-dm.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-dsc.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-edgeconfig.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-fpl.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-guardian.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-iot.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-mbgx.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-mfgx.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-monitor.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-orgmgmt.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-provision.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-registry.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-state.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-iot-webui.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-healthextaccelerator.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-healthextworkspace.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-imagestitching.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-manageaccelerators.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-manageapp.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-manageworkspace.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-manage-slackproxy.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-pushnotificationcfg.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-scimcfg.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-slscfg.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-smtpcfg.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-suite.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-mas-visualinspection.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/best-effort/ibm-sls-licenseservice.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-data-dictionary-assetdatadictionary.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-bascfg.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-coreidp.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-actions.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-auth.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-datapower.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-devops.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-dm.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-dsc.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-edgeconfig.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-fpl.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-guardian.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-iot.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-mbgx.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-mfgx.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-monitor.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-orgmgmt.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-provision.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-registry.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-state.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-iot-webui.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-healthextaccelerator.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-healthextworkspace.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-imagestitching.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-manageaccelerators.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-manageapp.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-manageworkspace.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-manage-slackproxy.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-pushnotificationcfg.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-scimcfg.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-slscfg.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-smtpcfg.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-suite.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-mas-visualinspection.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/pod-templates/guaranteed/ibm-sls-licenseservice.yml +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/templates/suite_mongocfg.yml.j2 +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/uninstall/__init__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/uninstall/app.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/uninstall/argParser.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/update/__init__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/update/app.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/update/argParser.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/upgrade/__init__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/upgrade/argParser.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas/cli/upgrade/settings/__init__.py +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas_cli.egg-info/dependency_links.txt +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas_cli.egg-info/entry_points.txt +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas_cli.egg-info/requires.txt +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/python/src/mas_cli.egg-info/top_level.txt +0 -0
- {mas_cli-21.7.0 → mas_cli-21.8.1}/setup.cfg +0 -0
|
@@ -207,6 +207,31 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
207
207
|
if key in requiredParams:
|
|
208
208
|
if value is None:
|
|
209
209
|
self.fatalError(f"{key} must be set")
|
|
210
|
+
|
|
211
|
+
# Special handling for ibm_entitlement_key: validate it
|
|
212
|
+
if key == "ibm_entitlement_key":
|
|
213
|
+
isValid = self.validateEntitlementKey(value)
|
|
214
|
+
if not isValid:
|
|
215
|
+
if self.noConfirm:
|
|
216
|
+
# Non-interactive with --no-confirm: warn but continue
|
|
217
|
+
self.printWarning("IBM entitlement key validation failed, but continuing due to --no-confirm flag")
|
|
218
|
+
else:
|
|
219
|
+
# Non-interactive without --no-confirm: offer options
|
|
220
|
+
self.printWarning("IBM entitlement key validation failed")
|
|
221
|
+
print()
|
|
222
|
+
self.printDescription(
|
|
223
|
+
[
|
|
224
|
+
"What would you like to do?",
|
|
225
|
+
" 1. Continue anyway (skip validation)",
|
|
226
|
+
" 2. Quit (exit the application)",
|
|
227
|
+
]
|
|
228
|
+
)
|
|
229
|
+
choice = self.promptForInt("Select an option", min=1, max=2)
|
|
230
|
+
if choice == 2:
|
|
231
|
+
logger.info("User chose to quit due to invalid entitlement key")
|
|
232
|
+
exit(1)
|
|
233
|
+
# If choice == 1, continue with the invalid key
|
|
234
|
+
|
|
210
235
|
self.setParam(key, value)
|
|
211
236
|
|
|
212
237
|
# These fields we just pass straight through to the parameters
|
|
@@ -734,7 +759,7 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
734
759
|
@logMethodCall
|
|
735
760
|
def configICRCredentials(self):
|
|
736
761
|
self.printH1("Configure IBM Container Registry")
|
|
737
|
-
self.
|
|
762
|
+
self.promptForEntitlementKey("IBM entitlement key", "ibm_entitlement_key")
|
|
738
763
|
if self.devMode:
|
|
739
764
|
self.promptForString("Artifactory username", "artifactory_username")
|
|
740
765
|
self.promptForString("Artifactory token", "artifactory_token", isPassword=True)
|
|
@@ -76,6 +76,7 @@ class BackupApp(BaseApp):
|
|
|
76
76
|
# Manage App Backup
|
|
77
77
|
"manage_workspace_id",
|
|
78
78
|
"backup_manage_app",
|
|
79
|
+
"backup_manage_include_pvc",
|
|
79
80
|
"backup_manage_db",
|
|
80
81
|
"manage_db2_namespace",
|
|
81
82
|
"manage_db2_instance_name",
|
|
@@ -84,6 +85,7 @@ class BackupApp(BaseApp):
|
|
|
84
85
|
# Facilities App Backup
|
|
85
86
|
"facilities_workspace_id",
|
|
86
87
|
"backup_facilities_app",
|
|
88
|
+
"backup_facilities_include_pvc",
|
|
87
89
|
"backup_facilities_db",
|
|
88
90
|
"facilities_db2_namespace",
|
|
89
91
|
"facilities_db2_instance_name",
|
|
@@ -187,6 +189,7 @@ class BackupApp(BaseApp):
|
|
|
187
189
|
self.printH2("Manage Application Backup")
|
|
188
190
|
self.printSummary("Backup Manage App", "Yes")
|
|
189
191
|
self.printSummary("Workspace ID", self.getParam("manage_workspace_id"))
|
|
192
|
+
self.printSummary("Include PVC Backup", "Yes" if self.getParam("backup_manage_include_pvc") == "true" else "No")
|
|
190
193
|
self.printSummary("Backup Manage incluster Db2 Database", "Yes" if self.getParam("backup_manage_db") == "true" else "No")
|
|
191
194
|
if self.getParam("backup_manage_db") == "true":
|
|
192
195
|
self.printSummary("Db2 Namespace", self.getParam("manage_db2_namespace"))
|
|
@@ -197,6 +200,7 @@ class BackupApp(BaseApp):
|
|
|
197
200
|
self.printH2("Facilities Application Backup")
|
|
198
201
|
self.printSummary("Backup Facilities App", "Yes")
|
|
199
202
|
self.printSummary("Workspace ID", self.getParam("facilities_workspace_id"))
|
|
203
|
+
self.printSummary("Include PVC Backup", "Yes" if self.getParam("backup_facilities_include_pvc") == "true" else "No")
|
|
200
204
|
self.printSummary("Backup Facilities incluster Db2 Database", "Yes" if self.getParam("backup_facilities_db") == "true" else "No")
|
|
201
205
|
if self.getParam("backup_facilities_db") == "true":
|
|
202
206
|
self.printSummary("Db2 Namespace", self.getParam("facilities_db2_namespace"))
|
|
@@ -571,6 +575,21 @@ class BackupApp(BaseApp):
|
|
|
571
575
|
workspaceId = self.promptForString("Enter Manage workspace ID")
|
|
572
576
|
self.setParam("manage_workspace_id", workspaceId)
|
|
573
577
|
|
|
578
|
+
# Ask about PVC backup
|
|
579
|
+
self.printH2("Manage PVC Backup")
|
|
580
|
+
self.printDescription(
|
|
581
|
+
[
|
|
582
|
+
"The Manage application uses persistent volumes that can be backed up.",
|
|
583
|
+
"This will include PVC data in the backup.",
|
|
584
|
+
]
|
|
585
|
+
)
|
|
586
|
+
backupPvc = self.yesOrNo("Do you want to include PVC backup for Manage")
|
|
587
|
+
|
|
588
|
+
if backupPvc:
|
|
589
|
+
self.setParam("backup_manage_include_pvc", "true")
|
|
590
|
+
else:
|
|
591
|
+
self.setParam("backup_manage_include_pvc", "false")
|
|
592
|
+
|
|
574
593
|
# Ask about DB2 backup
|
|
575
594
|
self.printH2("Manage Database Backup")
|
|
576
595
|
self.printDescription(
|
|
@@ -657,6 +676,21 @@ class BackupApp(BaseApp):
|
|
|
657
676
|
workspaceId = self.promptForString("Enter Facilities workspace ID")
|
|
658
677
|
self.setParam("facilities_workspace_id", workspaceId)
|
|
659
678
|
|
|
679
|
+
# Ask about PVC backup
|
|
680
|
+
self.printH2("Facilities PVC Backup")
|
|
681
|
+
self.printDescription(
|
|
682
|
+
[
|
|
683
|
+
"The Facilities application uses persistent volumes that can be backed up.",
|
|
684
|
+
"This will include PVC data in the backup.",
|
|
685
|
+
]
|
|
686
|
+
)
|
|
687
|
+
backupPvc = self.yesOrNo("Do you want to include PVC backup for Facilities")
|
|
688
|
+
|
|
689
|
+
if backupPvc:
|
|
690
|
+
self.setParam("backup_facilities_include_pvc", "true")
|
|
691
|
+
else:
|
|
692
|
+
self.setParam("backup_facilities_include_pvc", "false")
|
|
693
|
+
|
|
660
694
|
# Ask about DB2 backup
|
|
661
695
|
self.printH2("Facilities Database Backup")
|
|
662
696
|
self.printDescription(
|
|
@@ -69,6 +69,22 @@ manageAppArgGroup.add_argument(
|
|
|
69
69
|
"--backup-manage-app", dest="backup_manage_app", required=False, action="store_const", const="true", help="Backup the Manage application"
|
|
70
70
|
)
|
|
71
71
|
manageAppArgGroup.add_argument("--manage-workspace-id", dest="manage_workspace_id", required=False, help="Manage workspace ID")
|
|
72
|
+
manageAppArgGroup.add_argument(
|
|
73
|
+
"--backup-manage-include-pvc",
|
|
74
|
+
dest="backup_manage_include_pvc",
|
|
75
|
+
required=False,
|
|
76
|
+
action="store_const",
|
|
77
|
+
const="true",
|
|
78
|
+
help="Include PVC backup for Manage application",
|
|
79
|
+
)
|
|
80
|
+
manageAppArgGroup.add_argument(
|
|
81
|
+
"--backup-manage-exclude-pvc",
|
|
82
|
+
dest="backup_manage_include_pvc",
|
|
83
|
+
required=False,
|
|
84
|
+
action="store_const",
|
|
85
|
+
const="false",
|
|
86
|
+
help="Exclude PVC backup for Manage application",
|
|
87
|
+
)
|
|
72
88
|
manageAppArgGroup.add_argument(
|
|
73
89
|
"--backup-manage-db", dest="backup_manage_db", required=False, action="store_const", const="true", help="Backup the Manage application database (Db2)"
|
|
74
90
|
)
|
|
@@ -87,6 +103,22 @@ facilitiesAppArgGroup.add_argument(
|
|
|
87
103
|
"--backup-facilities-app", dest="backup_facilities_app", required=False, action="store_const", const="true", help="Backup the Facilities application"
|
|
88
104
|
)
|
|
89
105
|
facilitiesAppArgGroup.add_argument("--facilities-workspace-id", dest="facilities_workspace_id", required=False, help="Facilities workspace ID")
|
|
106
|
+
facilitiesAppArgGroup.add_argument(
|
|
107
|
+
"--backup-facilities-include-pvc",
|
|
108
|
+
dest="backup_facilities_include_pvc",
|
|
109
|
+
required=False,
|
|
110
|
+
action="store_const",
|
|
111
|
+
const="true",
|
|
112
|
+
help="Include PVC backup for Facilities application",
|
|
113
|
+
)
|
|
114
|
+
facilitiesAppArgGroup.add_argument(
|
|
115
|
+
"--backup-facilities-exclude-pvc",
|
|
116
|
+
dest="backup_facilities_include_pvc",
|
|
117
|
+
required=False,
|
|
118
|
+
action="store_const",
|
|
119
|
+
const="false",
|
|
120
|
+
help="Exclude PVC backup for Facilities application",
|
|
121
|
+
)
|
|
90
122
|
facilitiesAppArgGroup.add_argument(
|
|
91
123
|
"--backup-facilities-db",
|
|
92
124
|
dest="backup_facilities_db",
|
|
@@ -32,6 +32,7 @@ from prompt_toolkit import prompt, print_formatted_text, HTML
|
|
|
32
32
|
|
|
33
33
|
from mas.devops.mas import isAirgapInstall
|
|
34
34
|
from mas.devops.ocp import connect, isSNO, getNodes
|
|
35
|
+
from mas.devops.utils import validateIBMEntitlementKey
|
|
35
36
|
|
|
36
37
|
from .displayMixins import PrintMixin, PromptMixin
|
|
37
38
|
|
|
@@ -126,7 +127,7 @@ class BaseApp(PrintMixin, PromptMixin):
|
|
|
126
127
|
logging.getLogger("urllib3").setLevel(logging.INFO)
|
|
127
128
|
|
|
128
129
|
# Supports extended semver, unlike mas.cli.__version__
|
|
129
|
-
self.version: str = "21.
|
|
130
|
+
self.version: str = "21.8.1-pre1"
|
|
130
131
|
self.h1count: int = 0
|
|
131
132
|
self.h2count: int = 0
|
|
132
133
|
|
|
@@ -509,3 +510,98 @@ class BaseApp(PrintMixin, PromptMixin):
|
|
|
509
510
|
if self.localConfigDir is None:
|
|
510
511
|
# You need to tell us where the configuration file can be found
|
|
511
512
|
self.localConfigDir = self.promptForDir("Select Local configuration directory")
|
|
513
|
+
|
|
514
|
+
@logMethodCall
|
|
515
|
+
def validateEntitlementKey(self, entitlementKey: str, repository: str = "cp/mas/coreapi", timeout: int = 30) -> bool:
|
|
516
|
+
"""
|
|
517
|
+
Validate IBM entitlement key using mas.devops.utils.validateIBMEntitlementKey.
|
|
518
|
+
|
|
519
|
+
Args:
|
|
520
|
+
entitlementKey: The entitlement key to validate
|
|
521
|
+
repository: Docker repository to test against. Defaults to "cp/mas/coreapi".
|
|
522
|
+
timeout: Timeout in seconds for validation. Defaults to 30.
|
|
523
|
+
|
|
524
|
+
Returns:
|
|
525
|
+
bool: True if valid, False if invalid
|
|
526
|
+
"""
|
|
527
|
+
try:
|
|
528
|
+
logger.info(f"Validating IBM entitlement key against repository: {repository}")
|
|
529
|
+
isValid = validateIBMEntitlementKey(entitlementKey, repository, timeout)
|
|
530
|
+
if isValid:
|
|
531
|
+
logger.info("IBM entitlement key validation successful")
|
|
532
|
+
else:
|
|
533
|
+
logger.warning("IBM entitlement key validation failed")
|
|
534
|
+
return isValid
|
|
535
|
+
except Exception as e:
|
|
536
|
+
logger.error(f"Error validating IBM entitlement key: {e}")
|
|
537
|
+
logger.exception(e, stack_info=True)
|
|
538
|
+
return False
|
|
539
|
+
|
|
540
|
+
@logMethodCall
|
|
541
|
+
def promptForEntitlementKey(self, message: str, param: str, repository: str = "cp/mas/coreapi", timeout: int = 30) -> str:
|
|
542
|
+
"""
|
|
543
|
+
Prompt for IBM entitlement key with validation.
|
|
544
|
+
|
|
545
|
+
In interactive mode:
|
|
546
|
+
- Validates the key after user input
|
|
547
|
+
- If invalid, offers: 1) Try again, 2) Continue anyway, 3) Quit
|
|
548
|
+
- Loops until valid key or user chooses to continue/quit
|
|
549
|
+
|
|
550
|
+
In non-interactive mode with --no-confirm:
|
|
551
|
+
- Validates but only warns if invalid, does not block
|
|
552
|
+
|
|
553
|
+
Args:
|
|
554
|
+
message: Prompt message to display
|
|
555
|
+
param: Parameter name to store the key
|
|
556
|
+
repository: Docker repository to test against
|
|
557
|
+
timeout: Timeout in seconds for validation
|
|
558
|
+
|
|
559
|
+
Returns:
|
|
560
|
+
str: The entitlement key (validated or user chose to continue anyway)
|
|
561
|
+
"""
|
|
562
|
+
while True:
|
|
563
|
+
# Prompt for the entitlement key
|
|
564
|
+
entitlementKey = self.promptForString(message, param=None, isPassword=True)
|
|
565
|
+
|
|
566
|
+
# Validate the key
|
|
567
|
+
isValid = self.validateEntitlementKey(entitlementKey, repository, timeout)
|
|
568
|
+
|
|
569
|
+
if isValid:
|
|
570
|
+
# Key is valid, show success message and continue
|
|
571
|
+
self.printHighlight("✓ IBM entitlement key validated successfully")
|
|
572
|
+
self.setParam(param, entitlementKey)
|
|
573
|
+
return entitlementKey
|
|
574
|
+
|
|
575
|
+
# Key is invalid
|
|
576
|
+
if self.noConfirm:
|
|
577
|
+
# Non-interactive mode with --no-confirm: warn but continue
|
|
578
|
+
self.printWarning("IBM entitlement key validation failed, but continuing due to --no-confirm flag")
|
|
579
|
+
self.setParam(param, entitlementKey)
|
|
580
|
+
return entitlementKey
|
|
581
|
+
|
|
582
|
+
# Interactive mode or non-interactive without --no-confirm: offer options
|
|
583
|
+
self.printWarning("IBM entitlement key validation failed")
|
|
584
|
+
print()
|
|
585
|
+
self.printDescription(
|
|
586
|
+
[
|
|
587
|
+
"What would you like to do?",
|
|
588
|
+
" 1. Try again (re-enter the entitlement key)",
|
|
589
|
+
" 2. Continue anyway (skip validation)",
|
|
590
|
+
" 3. Quit (exit the application)",
|
|
591
|
+
]
|
|
592
|
+
)
|
|
593
|
+
|
|
594
|
+
choice = self.promptForInt("Select an option", min=1, max=3)
|
|
595
|
+
|
|
596
|
+
if choice == 1:
|
|
597
|
+
# Try again - loop will continue
|
|
598
|
+
continue
|
|
599
|
+
elif choice == 2:
|
|
600
|
+
# Continue anyway
|
|
601
|
+
logger.warning("User chose to continue with invalid entitlement key")
|
|
602
|
+
self.setParam(param, entitlementKey)
|
|
603
|
+
return entitlementKey
|
|
604
|
+
else: # choice == 3
|
|
605
|
+
# Quit
|
|
606
|
+
logger.info("User chose to quit due to invalid entitlement key")
|
|
607
|
+
exit(1)
|
|
@@ -72,6 +72,7 @@ from mas.devops.tekton import (
|
|
|
72
72
|
)
|
|
73
73
|
from mas.devops.pre_install import applyPreInstallMASRBAC
|
|
74
74
|
from ..rbac_utils import evaluatePreinstallRBACAccess
|
|
75
|
+
from .facilities.agents import facilitiesAgents, facilitiesAgentsDeploymentModes
|
|
75
76
|
|
|
76
77
|
logger = logging.getLogger(__name__)
|
|
77
78
|
|
|
@@ -212,7 +213,7 @@ class InstallApp(
|
|
|
212
213
|
@logMethodCall
|
|
213
214
|
def configICRCredentials(self):
|
|
214
215
|
self.printH1("Configure IBM Container Registry")
|
|
215
|
-
self.
|
|
216
|
+
self.promptForEntitlementKey("IBM entitlement key", "ibm_entitlement_key")
|
|
216
217
|
if self.devMode:
|
|
217
218
|
self.promptForString("Artifactory username", "artifactory_username")
|
|
218
219
|
self.promptForString("Artifactory token", "artifactory_token", isPassword=True)
|
|
@@ -1474,6 +1475,9 @@ class InstallApp(
|
|
|
1474
1475
|
)
|
|
1475
1476
|
|
|
1476
1477
|
if self.showAdvancedOptions:
|
|
1478
|
+
# Check MAS version - Custom FACILITIES.properties and Agents Deployment Flexibility are only supported in MAS 9.2+
|
|
1479
|
+
mas_facilities_channel = self.getParam("mas_app_channel_facilities")
|
|
1480
|
+
|
|
1477
1481
|
self.printH2("Maximo Real Estate and Facilities Settings - Advanced")
|
|
1478
1482
|
self.printDescription(
|
|
1479
1483
|
["Advanced configurations for Real Estate and Facilities are added through an additional file called facilities-configs.yaml"]
|
|
@@ -1504,9 +1508,6 @@ class InstallApp(
|
|
|
1504
1508
|
"mas_ws_facilities_vault_secret",
|
|
1505
1509
|
)
|
|
1506
1510
|
|
|
1507
|
-
# Check MAS version - Custom FACILITIES.properties is only supported in MAS 9.2+
|
|
1508
|
-
mas_facilities_channel = self.getParam("mas_app_channel_facilities")
|
|
1509
|
-
|
|
1510
1511
|
# Only prompt for custom FACILITIES.properties file if MAS 9.2+
|
|
1511
1512
|
if mas_facilities_channel and isVersionEqualOrAfter("9.2.0", mas_facilities_channel):
|
|
1512
1513
|
if self.yesOrNo("Upload custom FACILITIES.properties file"):
|
|
@@ -1670,6 +1671,32 @@ class InstallApp(
|
|
|
1670
1671
|
validator=JsonValidator(),
|
|
1671
1672
|
)
|
|
1672
1673
|
|
|
1674
|
+
# Only prompt for Agents Deployments Flexibility file if MAS 9.2+
|
|
1675
|
+
if mas_facilities_channel and isVersionEqualOrAfter("9.2.0", mas_facilities_channel):
|
|
1676
|
+
if self.yesOrNo("Configure Agents Deployments Flexibility"):
|
|
1677
|
+
self.printDescription(
|
|
1678
|
+
[
|
|
1679
|
+
"Define deployment mode for each Facilities Agents:",
|
|
1680
|
+
" 1. shared - the agent is activated in the shared multiagents POD",
|
|
1681
|
+
" 2. dedicated - the agent is activated in a dedicated POD",
|
|
1682
|
+
" 3. disabled - the agent is not activated at all (not applicable for wfagent and reportqueueagent)",
|
|
1683
|
+
]
|
|
1684
|
+
)
|
|
1685
|
+
for agent in facilitiesAgents:
|
|
1686
|
+
self.promptForListSelect(
|
|
1687
|
+
f"Select {agent} deployment mode:",
|
|
1688
|
+
facilitiesAgentsDeploymentModes[agent][:-1],
|
|
1689
|
+
f"mas_ws_facilities_{agent}_deploymentmode",
|
|
1690
|
+
default=1,
|
|
1691
|
+
)
|
|
1692
|
+
else:
|
|
1693
|
+
for agent in facilitiesAgents:
|
|
1694
|
+
self.setParam(f"mas_ws_facilities_{agent}_deploymentmode", "")
|
|
1695
|
+
else:
|
|
1696
|
+
# For MAS 9.1 and earlier, skip the prompt and use default behavior
|
|
1697
|
+
for agent in facilitiesAgents:
|
|
1698
|
+
self.setParam(f"mas_ws_facilities_{agent}_deploymentmode", "")
|
|
1699
|
+
|
|
1673
1700
|
# If advanced options is selected, we need to create a file to add props not supported by Tekton
|
|
1674
1701
|
self.selectLocalConfigDir()
|
|
1675
1702
|
if self.localConfigDir is not None:
|
|
@@ -1914,6 +1941,7 @@ class InstallApp(
|
|
|
1914
1941
|
self.slsLicenseFileLocal = None
|
|
1915
1942
|
self.db2LicenseFileLocal = None
|
|
1916
1943
|
self.aiserviceTenantSchedulingConfigFileLocal = None
|
|
1944
|
+
self.facilitiesPropertiesFileLocal = None
|
|
1917
1945
|
|
|
1918
1946
|
if simplified:
|
|
1919
1947
|
self.showAdvancedOptions = False
|
|
@@ -2005,6 +2033,7 @@ class InstallApp(
|
|
|
2005
2033
|
self.slsLicenseFileLocal = None
|
|
2006
2034
|
self.db2LicenseFileLocal = None
|
|
2007
2035
|
self.aiserviceTenantSchedulingConfigFileLocal = None
|
|
2036
|
+
self.facilitiesPropertiesFileLocal = None
|
|
2008
2037
|
|
|
2009
2038
|
self.approvals: Dict[str, Dict[str, Any]] = {
|
|
2010
2039
|
"approval_core": {"id": "suite-verify"}, # After Core Platform verification has completed
|
|
@@ -2028,6 +2057,31 @@ class InstallApp(
|
|
|
2028
2057
|
if key in requiredParams:
|
|
2029
2058
|
if value is None:
|
|
2030
2059
|
self.fatalError(f"{key} must be set")
|
|
2060
|
+
|
|
2061
|
+
# Special handling for ibm_entitlement_key: validate it
|
|
2062
|
+
if key == "ibm_entitlement_key":
|
|
2063
|
+
isValid = self.validateEntitlementKey(value)
|
|
2064
|
+
if not isValid:
|
|
2065
|
+
if self.noConfirm:
|
|
2066
|
+
# Non-interactive with --no-confirm: warn but continue
|
|
2067
|
+
self.printWarning("IBM entitlement key validation failed, but continuing due to --no-confirm flag")
|
|
2068
|
+
else:
|
|
2069
|
+
# Non-interactive without --no-confirm: offer options
|
|
2070
|
+
self.printWarning("IBM entitlement key validation failed")
|
|
2071
|
+
print()
|
|
2072
|
+
self.printDescription(
|
|
2073
|
+
[
|
|
2074
|
+
"What would you like to do?",
|
|
2075
|
+
" 1. Continue anyway (skip validation)",
|
|
2076
|
+
" 2. Quit (exit the application)",
|
|
2077
|
+
]
|
|
2078
|
+
)
|
|
2079
|
+
choice = self.promptForInt("Select an option", min=1, max=2)
|
|
2080
|
+
if choice == 2:
|
|
2081
|
+
logger.info("User chose to quit due to invalid entitlement key")
|
|
2082
|
+
exit(1)
|
|
2083
|
+
# If choice == 1, continue with the invalid key
|
|
2084
|
+
|
|
2031
2085
|
self.setParam(key, value)
|
|
2032
2086
|
|
|
2033
2087
|
# These fields we just pass straight through to the parameters
|
|
@@ -2082,11 +2136,13 @@ class InstallApp(
|
|
|
2082
2136
|
elif key == "pod_templates":
|
|
2083
2137
|
# For the named configurations we will convert into the path
|
|
2084
2138
|
if value in ["best-effort", "guaranteed"]:
|
|
2139
|
+
self.podTemplatesKeyword = value
|
|
2085
2140
|
self.setParam(
|
|
2086
2141
|
"mas_pod_templates_dir",
|
|
2087
2142
|
path.join(self.templatesDir, "pod-templates", value),
|
|
2088
2143
|
)
|
|
2089
2144
|
else:
|
|
2145
|
+
self.podTemplatesKeyword = None
|
|
2090
2146
|
self.setParam("mas_pod_templates_dir", value)
|
|
2091
2147
|
|
|
2092
2148
|
# We check for both None and "" values for the application channel parameters
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
#
|
|
9
9
|
# *****************************************************************************
|
|
10
10
|
|
|
11
|
+
from .facilities.agents import facilitiesAgents
|
|
11
12
|
import logging
|
|
12
13
|
|
|
13
14
|
logger = logging.getLogger(__name__)
|
|
@@ -86,8 +87,12 @@ class installArgBuilderMixin:
|
|
|
86
87
|
|
|
87
88
|
if self.localConfigDir is not None:
|
|
88
89
|
command += f' --additional-configs "{self.localConfigDir}"{newline}'
|
|
89
|
-
if self.getParam("
|
|
90
|
-
|
|
90
|
+
if self.getParam("mas_pod_templates_dir") != "":
|
|
91
|
+
# Use keyword for built-in templates, otherwise use the full path
|
|
92
|
+
if hasattr(self, "podTemplatesKeyword") and self.podTemplatesKeyword is not None:
|
|
93
|
+
command += f' --pod-templates "{self.podTemplatesKeyword}"{newline}'
|
|
94
|
+
else:
|
|
95
|
+
command += f" --pod-templates \"{self.getParam('mas_pod_templates_dir')}\"{newline}"
|
|
91
96
|
|
|
92
97
|
if self.operationalMode == 2:
|
|
93
98
|
command += f" --non-prod{newline}"
|
|
@@ -351,11 +356,14 @@ class installArgBuilderMixin:
|
|
|
351
356
|
if self.getParam("mas_ws_facilities_server_timezone") != "":
|
|
352
357
|
command += f" --facilities-server-timezone \"{self.getParam('mas_ws_facilities_server_timezone')}\"{newline}"
|
|
353
358
|
|
|
354
|
-
if self.
|
|
355
|
-
command += f
|
|
359
|
+
if self.facilitiesPropertiesFileLocal:
|
|
360
|
+
command += f' --facilities-properties-file "{self.facilitiesPropertiesFileLocal}"{newline}'
|
|
356
361
|
if self.getParam("mas_ws_facilities_properties_secret_name") != "":
|
|
357
362
|
command += f" --facilities-properties-secret-name \"{self.getParam('mas_ws_facilities_properties_secret_name')}\"{newline}"
|
|
358
363
|
|
|
364
|
+
for agent in facilitiesAgents:
|
|
365
|
+
if self.getParam(f"mas_ws_facilities_{agent}_deploymentmode") != "":
|
|
366
|
+
command += f' --facilities-{agent}-deploymentmode "{self.getParam(f"mas_ws_facilities_{agent}_deploymentmode")}"{newline}'
|
|
359
367
|
# AI Service Advanced Settings
|
|
360
368
|
# -----------------------------------------------------------------------------
|
|
361
369
|
if self.installAIService:
|
|
@@ -13,6 +13,7 @@ from os import path
|
|
|
13
13
|
|
|
14
14
|
from .. import __version__ as packageVersion
|
|
15
15
|
from ..cli import getHelpFormatter
|
|
16
|
+
from .facilities.agents import facilitiesAgents, facilitiesAgentsDeploymentModes
|
|
16
17
|
|
|
17
18
|
# Constants for argument choices
|
|
18
19
|
DNS_PROVIDERS = ["cloudflare", "cis", "route53"]
|
|
@@ -123,7 +124,7 @@ masAdvancedArgGroup.add_argument(
|
|
|
123
124
|
masAdvancedArgGroup.add_argument(
|
|
124
125
|
"--pod-templates",
|
|
125
126
|
required=False,
|
|
126
|
-
help="
|
|
127
|
+
help="Pod templates to apply. Use 'guaranteed' or 'best-effort' for built-in templates, or provide a path to a directory containing custom podTemplates configuration files",
|
|
127
128
|
)
|
|
128
129
|
masAdvancedArgGroup.add_argument(
|
|
129
130
|
"--non-prod",
|
|
@@ -839,7 +840,15 @@ facilitiesArgGroup.add_argument(
|
|
|
839
840
|
help="Custom name for the Facilities properties secret (default: facilities-properties)",
|
|
840
841
|
default="custom-facilities-properties",
|
|
841
842
|
)
|
|
842
|
-
|
|
843
|
+
for agent in facilitiesAgents:
|
|
844
|
+
facilitiesArgGroup.add_argument(
|
|
845
|
+
f"--facilities-{agent}-deploymentmode",
|
|
846
|
+
dest=f"mas_ws_facilities_{agent}_deploymentmode",
|
|
847
|
+
required=False,
|
|
848
|
+
help=f"Facilities agent {agent} deployment mode",
|
|
849
|
+
default="",
|
|
850
|
+
choices=facilitiesAgentsDeploymentModes[agent],
|
|
851
|
+
)
|
|
843
852
|
# Open Data Hub
|
|
844
853
|
# -----------------------------------------------------------------------------
|
|
845
854
|
odhArgGroup = installArgParser.add_argument_group("Open Data Hub")
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# *****************************************************************************
|
|
2
|
+
# Copyright (c) 2024, 2026 IBM Corporation and other Contributors.
|
|
3
|
+
#
|
|
4
|
+
# All rights reserved. This program and the accompanying materials
|
|
5
|
+
# are made available under the terms of the Eclipse Public License v1.0
|
|
6
|
+
# which accompanies this distribution, and is available at
|
|
7
|
+
# http://www.eclipse.org/legal/epl-v10.html
|
|
8
|
+
#
|
|
9
|
+
# *****************************************************************************
|
|
10
|
+
|
|
11
|
+
_FACILITIES_AGENTS_DEPLOYMENT_MODES = ["shared", "dedicated", "disabled", ""]
|
|
12
|
+
|
|
13
|
+
_FACILITIES_AGENTS_DEPLOYMENT_MODES_NO_DISABLED = ["shared", "dedicated", ""]
|
|
14
|
+
|
|
15
|
+
facilitiesAgentsDeploymentModes = {
|
|
16
|
+
"dataconnectagent": _FACILITIES_AGENTS_DEPLOYMENT_MODES,
|
|
17
|
+
"extendedformulaagent": _FACILITIES_AGENTS_DEPLOYMENT_MODES,
|
|
18
|
+
"formularecalcagent": _FACILITIES_AGENTS_DEPLOYMENT_MODES,
|
|
19
|
+
"incomingmailagent": _FACILITIES_AGENTS_DEPLOYMENT_MODES,
|
|
20
|
+
"objectmigrationagent": _FACILITIES_AGENTS_DEPLOYMENT_MODES,
|
|
21
|
+
"objectpublishagent": _FACILITIES_AGENTS_DEPLOYMENT_MODES,
|
|
22
|
+
"maintenanceagent": _FACILITIES_AGENTS_DEPLOYMENT_MODES,
|
|
23
|
+
"reportqueueagent": _FACILITIES_AGENTS_DEPLOYMENT_MODES_NO_DISABLED,
|
|
24
|
+
"wfagent": _FACILITIES_AGENTS_DEPLOYMENT_MODES_NO_DISABLED,
|
|
25
|
+
"wffutureagent": _FACILITIES_AGENTS_DEPLOYMENT_MODES,
|
|
26
|
+
"wfnotificationagent": _FACILITIES_AGENTS_DEPLOYMENT_MODES,
|
|
27
|
+
"reservesmtpagent": _FACILITIES_AGENTS_DEPLOYMENT_MODES,
|
|
28
|
+
"scheduleragent": _FACILITIES_AGENTS_DEPLOYMENT_MODES,
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
facilitiesAgents = list(facilitiesAgentsDeploymentModes.keys())
|
|
@@ -178,6 +178,19 @@ optionalParams = [
|
|
|
178
178
|
"mas_ws_facilities_properties_file_local",
|
|
179
179
|
"mas_ws_facilities_custom_properties",
|
|
180
180
|
"mas_ws_facilities_properties_secret_name",
|
|
181
|
+
"mas_ws_facilities_dataconnectagent_deploymentmode",
|
|
182
|
+
"mas_ws_facilities_extendedformulaagent_deploymentmode",
|
|
183
|
+
"mas_ws_facilities_formularecalcagent_deploymentmode",
|
|
184
|
+
"mas_ws_facilities_incomingmailagent_deploymentmode",
|
|
185
|
+
"mas_ws_facilities_objectmigrationagent_deploymentmode",
|
|
186
|
+
"mas_ws_facilities_objectpublishagent_deploymentmode",
|
|
187
|
+
"mas_ws_facilities_maintenanceagent_deploymentmode",
|
|
188
|
+
"mas_ws_facilities_reportqueueagent_deploymentmode",
|
|
189
|
+
"mas_ws_facilities_wfagent_deploymentmode",
|
|
190
|
+
"mas_ws_facilities_wffutureagent_deploymentmode",
|
|
191
|
+
"mas_ws_facilities_wfnotificationagent_deploymentmode",
|
|
192
|
+
"mas_ws_facilities_reservesmtpagent_deploymentmode",
|
|
193
|
+
"mas_ws_facilities_scheduleragent_deploymentmode",
|
|
181
194
|
# DB2 for Facilities
|
|
182
195
|
"db2_facilities_timezone",
|
|
183
196
|
# Special chars
|
|
@@ -137,10 +137,13 @@ class AdditionalConfigsMixin:
|
|
|
137
137
|
podTemplateChoice = self.promptForInt("Select pod templates profile")
|
|
138
138
|
|
|
139
139
|
if podTemplateChoice == 1:
|
|
140
|
+
self.podTemplatesKeyword = "guaranteed"
|
|
140
141
|
self.setParam("mas_pod_templates_dir", path.join(self.templatesDir, "pod-templates", "guaranteed"))
|
|
141
142
|
elif podTemplateChoice == 2:
|
|
143
|
+
self.podTemplatesKeyword = "best-effort"
|
|
142
144
|
self.setParam("mas_pod_templates_dir", path.join(self.templatesDir, "pod-templates", "best-effort"))
|
|
143
145
|
elif podTemplateChoice == 3:
|
|
146
|
+
self.podTemplatesKeyword = None
|
|
144
147
|
self.setParam("mas_pod_templates_dir", self.promptForDir("Pod templates directory", mustExist=True))
|
|
145
148
|
else:
|
|
146
149
|
self.fatalError(f"Invalid selection: {podTemplateChoice}")
|
|
@@ -230,13 +233,13 @@ class AdditionalConfigsMixin:
|
|
|
230
233
|
mas_facilities_channel = self.getParam("mas_app_channel_facilities")
|
|
231
234
|
|
|
232
235
|
# Only process custom file if MAS 9.2+ and file is provided
|
|
233
|
-
facilitiesPropertiesFileLocal = self.getParam("mas_ws_facilities_properties_file_local")
|
|
236
|
+
self.facilitiesPropertiesFileLocal = self.getParam("mas_ws_facilities_properties_file_local")
|
|
234
237
|
|
|
235
238
|
if (
|
|
236
239
|
mas_facilities_channel
|
|
237
240
|
and isVersionEqualOrAfter("9.2.0", mas_facilities_channel)
|
|
238
|
-
and facilitiesPropertiesFileLocal
|
|
239
|
-
and facilitiesPropertiesFileLocal != ""
|
|
241
|
+
and self.facilitiesPropertiesFileLocal
|
|
242
|
+
and self.facilitiesPropertiesFileLocal != ""
|
|
240
243
|
):
|
|
241
244
|
# Get custom secret name or use default
|
|
242
245
|
secretName = self.getParam("mas_ws_facilities_properties_secret_name")
|
|
@@ -246,9 +249,9 @@ class AdditionalConfigsMixin:
|
|
|
246
249
|
facilitiesPropertiesSecret = {"apiVersion": "v1", "kind": "Secret", "type": "Opaque", "metadata": {"name": "pipeline-facilities-properties"}}
|
|
247
250
|
|
|
248
251
|
# Read the file from user's local path
|
|
249
|
-
self.facilitiesPropertiesSecret = self.addFilesToSecret(facilitiesPropertiesSecret, facilitiesPropertiesFileLocal, "")
|
|
252
|
+
self.facilitiesPropertiesSecret = self.addFilesToSecret(facilitiesPropertiesSecret, self.facilitiesPropertiesFileLocal, "")
|
|
250
253
|
|
|
251
|
-
# Now update the parameters
|
|
254
|
+
# Now update the parameters - set workspace path for pipeline use
|
|
252
255
|
self.setParam("mas_ws_facilities_custom_properties", "true")
|
|
253
256
|
self.setParam("mas_ws_facilities_properties_file_local", "/workspace/facilities/FACILITIES.properties")
|
|
254
257
|
self.setParam("mas_ws_facilities_properties_secret_name", secretName)
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
from typing import TYPE_CHECKING, Dict, List, NoReturn
|
|
12
12
|
from prompt_toolkit.completion import WordCompleter
|
|
13
|
-
from mas.cli.validators import LanguageValidator
|
|
13
|
+
from mas.cli.validators import CustomizationArchiveNameValidator, LanguageValidator
|
|
14
14
|
from mas.devops.aiservice import listAiServiceTenantInstances, listAiServiceInstances
|
|
15
15
|
from openshift.dynamic.exceptions import ResourceNotFoundError
|
|
16
16
|
from ...validators import AiserviceTeanantIDValidator
|
|
@@ -280,7 +280,7 @@ class ManageSettingsMixin:
|
|
|
280
280
|
self.printDescription([f"Provide a customization archive to be used in the {self.manageAppName} build process"])
|
|
281
281
|
|
|
282
282
|
if self.yesOrNo("Include customization archive"):
|
|
283
|
-
self.promptForString("Customization archive name", "mas_app_settings_customization_archive_name")
|
|
283
|
+
self.promptForString("Customization archive name", "mas_app_settings_customization_archive_name", validator=CustomizationArchiveNameValidator())
|
|
284
284
|
self.promptForString("Customization archive path/url", "mas_app_settings_customization_archive_url")
|
|
285
285
|
if self.yesOrNo("Provide authentication to access customization archive URL"):
|
|
286
286
|
self.promptForString("Username", "mas_app_settings_customization_archive_username")
|
|
@@ -325,7 +325,7 @@ class ManageSettingsMixin:
|
|
|
325
325
|
self.setParam("mas_app_settings_secondary_langs", secondaryLanguages.upper())
|
|
326
326
|
|
|
327
327
|
def manageSettingsCP4D(self) -> None:
|
|
328
|
-
if
|
|
328
|
+
if self.showAdvancedOptions:
|
|
329
329
|
self.printDescription(
|
|
330
330
|
[
|
|
331
331
|
f"Integration with Cognos Analytics provides additional support for reporting features in Maximo {self.manageAppName}, for more information refer to the documentation online: ",
|