python-watcher 14.0.0__tar.gz → 14.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.
- {python_watcher-14.0.0 → python_watcher-14.1.0}/.zuul.yaml +10 -7
- {python_watcher-14.0.0 → python_watcher-14.1.0}/ChangeLog +23 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/PKG-INFO +1 -2
- {python_watcher-14.0.0 → python_watcher-14.1.0}/devstack/lib/watcher +23 -73
- {python_watcher-14.0.0 → python_watcher-14.1.0}/devstack/plugin.sh +3 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/datasources/prometheus.rst +9 -9
- python_watcher-14.1.0/pyproject.toml +3 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/python_watcher.egg-info/PKG-INFO +1 -2
- {python_watcher-14.0.0 → python_watcher-14.1.0}/python_watcher.egg-info/SOURCES.txt +12 -1
- python_watcher-14.1.0/python_watcher.egg-info/pbr.json +1 -0
- python_watcher-14.1.0/releasenotes/notes/add-wsgi-module-support-597f479e31979270.yaml +30 -0
- python_watcher-14.1.0/releasenotes/notes/bug-2103451-fixes-prometheus-queries-with-multiple-target-0e65d20711d1abe2.yaml +8 -0
- python_watcher-14.1.0/releasenotes/notes/bug-2110947.yaml +10 -0
- python_watcher-14.1.0/releasenotes/notes/bug-2112187-763bae283e0b736d.yaml +47 -0
- python_watcher-14.1.0/releasenotes/notes/bug-2113776-4bd314fb46623fbc.yaml +14 -0
- python_watcher-14.1.0/releasenotes/notes/donot-run-host-migration-strategy-on-disabled-hosts-24084a22d4c8f914.yaml +10 -0
- python_watcher-14.1.0/releasenotes/notes/fix-action-plan-state-on-failure-69e498d902ada5c5.yaml +13 -0
- python_watcher-14.1.0/releasenotes/notes/return-error-400-on-bad-parameters-bb964e4f5cadc15c.yaml +7 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/setup.cfg +0 -1
- {python_watcher-14.0.0 → python_watcher-14.1.0}/tox.ini +5 -8
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/controllers/v1/audit.py +12 -7
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/action_plan/default.py +20 -2
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/actions/volume_migration.py +26 -72
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/keystone_helper.py +0 -34
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/utils.py +1 -7
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/datasources/base.py +1 -1
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/datasources/prometheus.py +71 -64
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/strategies/host_maintenance.py +2 -24
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/strategies/zone_migration.py +25 -30
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/v1/test_audits.py +47 -2
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/applier/action_plan/test_default_action_handler.py +27 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/applier/actions/test_volume_migration.py +30 -39
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/datasources/test_prometheus_helper.py +105 -35
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/strategies/test_host_maintenance.py +8 -5
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/strategies/test_workload_stabilization.py +61 -1
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/strategies/test_zone_migration.py +4 -1
- python_watcher-14.1.0/watcher/wsgi/__init__.py +0 -0
- python_watcher-14.1.0/watcher/wsgi/api.py +18 -0
- python_watcher-14.0.0/python_watcher.egg-info/pbr.json +0 -1
- {python_watcher-14.0.0 → python_watcher-14.1.0}/.coveragerc +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/.mailmap +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/.pre-commit-config.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/.stestr.conf +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/AUTHORS +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/CONTRIBUTING.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/HACKING.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/LICENSE +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/README.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/conf.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/index.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/parameters.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/actionplan-cancel-request-cancelling.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/actionplan-cancel-request-pending.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/actionplan-list-detailed-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/actionplan-list-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/actionplan-show-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/actionplan-start-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/actions-list-detailed-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/actions-list-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/actions-show-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/api-root-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/api-v1-root-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/audit-cancel-request.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/audit-cancel-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/audit-create-request-continuous.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/audit-create-request-oneshot.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/audit-create-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/audit-list-detailed-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/audit-list-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/audit-show-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/audit-update-request.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/audit-update-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/audittemplate-create-request-full.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/audittemplate-create-request-minimal.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/audittemplate-create-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/audittemplate-list-detailed-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/audittemplate-list-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/audittemplate-show-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/audittemplate-update-request.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/audittemplate-update-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/datamodel-list-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/goal-list-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/goal-show-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/scoring_engine-list-detailed-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/scoring_engine-list-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/scoring_engine-show-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/service-list-detailed-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/service-list-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/service-show-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/strategy-list-detailed-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/strategy-list-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/strategy-show-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/samples/strategy-state-response.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/watcher-api-v1-actionplans.inc +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/watcher-api-v1-actions.inc +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/watcher-api-v1-audits.inc +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/watcher-api-v1-audittemplates.inc +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/watcher-api-v1-datamodel.inc +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/watcher-api-v1-goals.inc +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/watcher-api-v1-scoring_engines.inc +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/watcher-api-v1-services.inc +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/watcher-api-v1-strategies.inc +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/watcher-api-v1-webhooks.inc +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/api-ref/source/watcher-api-versions.inc +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/devstack/files/apache-watcher-api.template +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/devstack/local.conf.compute +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/devstack/local.conf.controller +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/devstack/override-defaults +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/devstack/settings +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/devstack/upgrade/from_rocky/upgrade-watcher +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/devstack/upgrade/resources.sh +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/devstack/upgrade/settings +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/devstack/upgrade/shutdown.sh +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/devstack/upgrade/upgrade.sh +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/dictionary.txt +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/ext/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/ext/term.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/ext/versioned_notifications.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/action-cancel-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/action-cancel-error.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/action-cancel-start.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/action-create.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/action-delete.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/action-execution-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/action-execution-error.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/action-execution-start.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/action-update.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/action_plan-cancel-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/action_plan-cancel-error.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/action_plan-cancel-start.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/action_plan-create.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/action_plan-delete.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/action_plan-execution-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/action_plan-execution-error.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/action_plan-execution-start.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/action_plan-update.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/audit-create.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/audit-delete.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/audit-planner-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/audit-planner-error.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/audit-planner-start.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/audit-strategy-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/audit-strategy-error.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/audit-strategy-start.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/audit-update.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/infra-optim-exception.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/notification_samples/service-update.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/requirements.txt +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/_static/.placeholder +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/admin/apache-mod-wsgi.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/admin/gmr.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/admin/index.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/admin/policy.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/architecture.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/conf.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/configuration/configuring.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/configuration/index.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/configuration/watcher.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/contributor/api_microversion_history.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/contributor/concurrency.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/contributor/contributing.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/contributor/devstack.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/contributor/environment.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/contributor/index.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/contributor/notifications.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/contributor/plugin/action-plugin.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/contributor/plugin/base-setup.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/contributor/plugin/cdmc-plugin.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/contributor/plugin/goal-plugin.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/contributor/plugin/index.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/contributor/plugin/planner-plugin.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/contributor/plugin/plugins.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/contributor/plugin/scoring-engine-plugin.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/contributor/plugin/strategy-plugin.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/contributor/rally_link.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/contributor/testing.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/datasources/grafana.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/datasources/index.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/glossary.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/image_src/dia/architecture.dia +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/image_src/dia/functional_data_model.dia +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/image_src/plantuml/README.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/image_src/plantuml/action_plan_state_machine.txt +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/image_src/plantuml/audit_state_machine.txt +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/image_src/plantuml/sequence_architecture_cdmc_sync.txt +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/image_src/plantuml/sequence_create_and_launch_audit.txt +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/image_src/plantuml/sequence_create_audit_template.txt +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/image_src/plantuml/sequence_from_audit_execution_to_actionplan_creation.txt +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/image_src/plantuml/sequence_launch_action_plan.txt +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/image_src/plantuml/sequence_launch_action_plan_in_applier.txt +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/image_src/plantuml/sequence_overview_watcher_usage.txt +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/image_src/plantuml/sequence_trigger_audit_in_decision_engine.txt +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/image_src/plantuml/watcher_db_schema_diagram.txt +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/images/action_plan_state_machine.png +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/images/architecture.svg +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/images/audit_state_machine.png +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/images/functional_data_model.svg +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/images/sequence_architecture_cdmc_sync.png +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/images/sequence_create_and_launch_audit.png +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/images/sequence_create_audit_template.png +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/images/sequence_from_audit_execution_to_actionplan_creation.png +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/images/sequence_launch_action_plan.png +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/images/sequence_launch_action_plan_in_applier.png +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/images/sequence_overview_watcher_usage.png +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/images/sequence_trigger_audit_in_decision_engine.png +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/images/watcher_db_schema_diagram.png +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/index.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/install/common_configure.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/install/common_prerequisites.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/install/get_started.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/install/index.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/install/install-rdo.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/install/install-ubuntu.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/install/install.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/install/next-steps.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/install/verify.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/man/footer.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/man/general-options.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/man/index.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/man/watcher-api.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/man/watcher-applier.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/man/watcher-db-manage.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/man/watcher-decision-engine.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/man/watcher-status.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/strategies/actuation.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/strategies/basic-server-consolidation.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/strategies/host_maintenance.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/strategies/index.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/strategies/node_resource_consolidation.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/strategies/noisy_neighbor.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/strategies/outlet_temp_control.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/strategies/saving_energy.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/strategies/storage_capacity_balance.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/strategies/strategy-template.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/strategies/uniform_airflow.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/strategies/vm_workload_consolidation.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/strategies/workload-stabilization.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/strategies/workload_balance.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/strategies/zone_migration.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/user/event_type_audit.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/user/index.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/user/user-guide.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/doc/source/user/ways-to-install.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/etc/apache2/watcher +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/etc/watcher/README-watcher.conf.txt +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/etc/watcher/oslo-config-generator/watcher.conf +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/etc/watcher/oslo-policy-generator/watcher-policy-generator.conf +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/playbooks/generate_prometheus_config.yml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/playbooks/templates/prometheus.yml.j2 +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/python_watcher.egg-info/dependency_links.txt +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/python_watcher.egg-info/entry_points.txt +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/python_watcher.egg-info/not-zip-safe +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/python_watcher.egg-info/requires.txt +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/python_watcher.egg-info/top_level.txt +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/rally-jobs/README.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/rally-jobs/watcher-watcher.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/.placeholder +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/2025.1-prelude-8be97eece4e1d1ff.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/action-plan-cancel-c54726378019e096.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/action-plan-versioned-notifications-api-e8ca4f5d37aa5b4b.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/action-versioned-notifications-api-ff94fc0f401292d0.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/add-baremetal-scoper-9ef23f5fb8f0be6a.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/add-force-field-to-audit-4bcaeedfe27233ad.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/add-ha-support-b9042255e5b76e42.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/add-instance-metrics-to-prometheus-datasource-9fba8c174ff845e1.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/add-name-for-audit-0df1f39f00736f06.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/add-plugins-parameters-376eb6b0b8978b44.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/add-power-on-off-a77673d482568a8b.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/add-scoring-module-fa00d013ed2d614e.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/add-start-end-time-for-continuous-audit-52c45052cb06d153.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/add-upgrade-check-framework-5bb9693c8a78931c.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/api-call-retry-fef741ac684c58dd.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/api-microversioning-7999a3ee8073bf32.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/audit-scoper-for-storage-data-model-cdccc803542d22db.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/audit-tag-vm-metadata-47a3e4468748853c.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/audit-versioned-notifications-api-bca7738e16954bad.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/automatic-triggering-audit-8a9b0540d547db60.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/background-jobs-ha-9d3cf3fe356f4705.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/bp-audit-scope-exclude-project-511a7720aac00dff.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/build-baremetal-data-model-in-watcher-3023453a47b61dab.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/cdm-scoping-8d9c307bad46bfa1.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/centralise-config-opts-95670987dfbdb0e7.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/change-ram-util-metric-4a3e6984b9dd968d.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/check-strategy-requirements-66f9e9262412f8ec.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/cinder-model-integration-baa394a72a0a33bf.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/cluster-model-objects-wrapper-9c799ea262c56a5b.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/compute-cdm-include-all-instances-f7506ded2d57732f.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/configurable-weights-default-planner-3746b33160bc7347.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/consume-nova-versioned-notifications-f98361b37e546b4d.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/continuously-optimization-35364f4d2c0b81fc.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/cron-based-continuous-audits-c3eedf28d9752b37.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/datasource-query-retry-00cba5f7e68aec39.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/db-migration-e1a705a8b54ccdd2.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/define-the-audit-scope-e89edc5051dcf3f2.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/deprecate-ceilometer-datasource-446b0be70fbce28b.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/deprecate-json-formatted-policy-file-3a92379e9f5dd203.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/deprecate-monasca-ds-9065f4d4bee09ab2.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/drop-py-2-7-54f8e806d71f19a7.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/drop-python38-support-eeb19a0bc0160sw1.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/dynamic-action-description-0e947b9e7ef2a134.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/efficacy-indicator-95380ad7b84e3be2.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/enhance-watcher-applier-engine-86c676ce8f179e68.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/event-driven-optimization-based-4870f112bef8a560.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/file-based-metric-map-c2af62b5067895df.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/formal-datasource-interface-implementation-222769d55a127d33.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/general-purpose-decision-engine-threadpool-0711b23abfc9d409.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/get-goal-from-strategy-396c9b13a38bb650.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/global-datasource-preference-3ab47b4be09ff3a5.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/gnocchi-watcher-43c25d391fbd3e9c.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/grafana-datasource-b672367c23ffa0c6.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/graph-based-cluster-model-523937a6f5e66537.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/host-maintenance-strategy-41f640927948fb56.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/improve-compute-data-model-b427c85e4ed2b6fb.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/jsonschema-validation-79cab05d5295da00.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/min-required-nova-train-71f124192d88ae52.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/monasca-support-0b0486b8572ac38b.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/multiple-global-efficacy-indicator-fc11c4844a12a7d5.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/node-resource-consolidation-73bc0c0abfeb0b03.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/noisy-neighbor-strategy-a71342740b59dddc.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/notifications-actionplan-cancel-edb2a4a12543e2d0.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/optimization-threshold-21ad38f0470d0e1a.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/persistent-audit-parameters-ae41dd7252ba9672.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/planner-storage-action-plan-26ef37893c5e8648.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/prometheus-datasource-e56f2f7b8f3427c2.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/remove-ceilometer-datasource-8d9ab7d64d61e405.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/remove-nova-legacy-notifications-e1b6d10eff58f30a.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/replace-cold-migrate-to-use-nova-migration-api-cecd9a39ddd3bc58.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/scope-for-data-model-ea9792f90db14343.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/service-versioned-notifications-api-70367b79a565d900.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/show-datamodel-api-6945b744fd5d25d5.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/stale-action-plan-b6a6b08df873c128.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/standard-deviation-strategy-cd1d0c443fdfde9c.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/storage-workload-balance-0ecabbc1791e6894.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/support-keystoneclient-option-b30d1ff45f86a2e7.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/support-placement-api-58ce6bef1bbbe98a.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/suspended-audit-state-07f998c94e9d9a47.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/uniform-airflow-strategy-68cdba1419c3f770.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/uwsgi-support-8dcea6961e56dad0.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/volume-migrate-action-fc57b0ce0e4c39ae.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/watcher-notifications-ovo-7b44d52ef6400dd0.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/watcher-planner-selector-84d77549d46f362a.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/watcher-policies-1e86a30f0f11c6fa.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/watcher-service-list-7b2f4b64f71e9b89.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/watcher-versioned-objects-fc5abf5c81c4590c.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/workload-balance-base-on-cpu-or-ram-util-3ff4ee968c32b2ed.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/workload-balance-migration-strategy-a0b05148a57815c0.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/notes/zone-migration-strategy-10f7656a2a01e607.yaml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/source/2023.1.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/source/2023.2.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/source/2024.1.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/source/2024.2.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/source/_static/.placeholder +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/source/conf.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/source/index.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/source/newton.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/source/ocata.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/source/pike.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/source/queens.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/source/rocky.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/source/stein.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/source/train.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/source/unreleased.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/source/ussuri.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/source/victoria.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/source/wallaby.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/source/xena.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/source/yoga.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/releasenotes/source/zed.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/requirements.txt +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/setup.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/test-requirements.txt +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/_i18n.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/acl.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/app.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/app.wsgi +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/config.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/controllers/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/controllers/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/controllers/link.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/controllers/rest_api_version_history.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/controllers/root.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/controllers/v1/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/controllers/v1/action.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/controllers/v1/action_plan.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/controllers/v1/audit_template.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/controllers/v1/collection.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/controllers/v1/data_model.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/controllers/v1/efficacy_indicator.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/controllers/v1/goal.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/controllers/v1/scoring_engine.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/controllers/v1/service.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/controllers/v1/strategy.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/controllers/v1/types.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/controllers/v1/utils.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/controllers/v1/versions.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/controllers/v1/webhooks.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/hooks.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/middleware/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/middleware/auth_token.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/middleware/parsable_error.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/scheduling.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/api/wsgi.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/action_plan/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/action_plan/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/actions/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/actions/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/actions/change_node_power_state.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/actions/change_nova_service_state.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/actions/factory.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/actions/migration.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/actions/nop.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/actions/resize.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/actions/sleep.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/default.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/loading/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/loading/default.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/manager.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/messaging/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/messaging/trigger.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/rpcapi.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/sync.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/workflow_engine/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/workflow_engine/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/applier/workflow_engine/default.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/cmd/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/cmd/api.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/cmd/applier.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/cmd/dbmanage.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/cmd/decisionengine.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/cmd/status.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/cmd/sync.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/cinder_helper.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/clients.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/config.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/context.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/exception.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/ironic_helper.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/loader/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/loader/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/loader/default.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/loader/loadable.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/metal_helper/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/metal_helper/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/metal_helper/constants.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/metal_helper/factory.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/metal_helper/ironic.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/metal_helper/maas.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/nova_helper.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/paths.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/placement_helper.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/policies/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/policies/action.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/policies/action_plan.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/policies/audit.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/policies/audit_template.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/policies/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/policies/data_model.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/policies/goal.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/policies/scoring_engine.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/policies/service.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/policies/strategy.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/policy.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/rpc.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/scheduling.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/service.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/common/service_manager.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/api.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/applier.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/cinder_client.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/clients_auth.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/collector.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/datasources.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/db.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/decision_engine.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/exception.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/glance_client.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/gnocchi_client.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/grafana_client.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/grafana_translators.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/ironic_client.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/keystone_client.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/maas_client.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/monasca_client.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/neutron_client.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/nova_client.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/opts.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/paths.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/placement_client.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/planner.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/plugins.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/prometheus_client.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/conf/service.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/db/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/db/api.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/db/migration.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/db/purge.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/db/sqlalchemy/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/db/sqlalchemy/alembic/README.rst +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/db/sqlalchemy/alembic/env.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/db/sqlalchemy/alembic/script.py.mako +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/db/sqlalchemy/alembic/versions/001_ocata.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/db/sqlalchemy/alembic/versions/0f6042416884_add_apscheduler_jobs.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/db/sqlalchemy/alembic/versions/3cfc94cecf4e_add_name_for_audit.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/db/sqlalchemy/alembic/versions/4b16194c56bc_add_start_end_time.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/db/sqlalchemy/alembic/versions/52804f2498c4_add_hostname.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/db/sqlalchemy/alembic/versions/609bec748f2a_add_force_field.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/db/sqlalchemy/alembic/versions/a86240e89a29_.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/db/sqlalchemy/alembic/versions/d098df6021e2_cron_support_for_audit.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/db/sqlalchemy/alembic/versions/d09a5945e4a0_add_action_description_table.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/db/sqlalchemy/alembic.ini +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/db/sqlalchemy/api.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/db/sqlalchemy/job_store.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/db/sqlalchemy/migration.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/db/sqlalchemy/models.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/audit/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/audit/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/audit/continuous.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/audit/event.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/audit/oneshot.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/datasources/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/datasources/gnocchi.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/datasources/grafana.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/datasources/grafana_translator/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/datasources/grafana_translator/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/datasources/grafana_translator/influxdb.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/datasources/manager.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/datasources/monasca.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/gmr.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/goal/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/goal/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/goal/efficacy/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/goal/efficacy/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/goal/efficacy/indicators.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/goal/efficacy/specs.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/goal/goals.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/loading/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/loading/default.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/manager.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/messaging/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/messaging/audit_endpoint.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/messaging/data_model_endpoint.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/model/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/model/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/model/collector/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/model/collector/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/model/collector/cinder.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/model/collector/ironic.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/model/collector/manager.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/model/collector/nova.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/model/element/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/model/element/baremetal_resource.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/model/element/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/model/element/compute_resource.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/model/element/instance.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/model/element/node.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/model/element/storage_resource.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/model/element/volume.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/model/model_root.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/model/notification/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/model/notification/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/model/notification/cinder.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/model/notification/filtering.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/model/notification/nova.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/planner/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/planner/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/planner/manager.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/planner/node_resource_consolidation.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/planner/weight.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/planner/workload_stabilization.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/rpcapi.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/scheduling.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/scope/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/scope/baremetal.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/scope/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/scope/compute.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/scope/storage.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/scoring/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/scoring/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/scoring/dummy_scorer.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/scoring/dummy_scoring_container.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/scoring/scoring_factory.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/solution/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/solution/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/solution/default.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/solution/efficacy.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/solution/solution_comparator.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/solution/solution_evaluator.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/common/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/common/level.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/context/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/context/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/context/default.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/selection/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/selection/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/selection/default.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/strategies/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/strategies/actuation.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/strategies/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/strategies/basic_consolidation.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/strategies/dummy_strategy.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/strategies/dummy_with_resize.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/strategies/dummy_with_scorer.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/strategies/node_resource_consolidation.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/strategies/noisy_neighbor.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/strategies/outlet_temp_control.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/strategies/saving_energy.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/strategies/storage_capacity_balance.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/strategies/uniform_airflow.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/strategies/vm_workload_consolidation.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/strategies/workload_balance.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/strategy/strategies/workload_stabilization.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/sync.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/decision_engine/threading.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/eventlet.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/hacking/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/hacking/checks.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/locale/de/LC_MESSAGES/watcher.po +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/locale/en_GB/LC_MESSAGES/watcher.po +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/notifications/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/notifications/action.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/notifications/action_plan.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/notifications/audit.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/notifications/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/notifications/exception.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/notifications/goal.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/notifications/service.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/notifications/strategy.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/objects/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/objects/action.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/objects/action_description.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/objects/action_plan.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/objects/audit.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/objects/audit_template.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/objects/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/objects/efficacy_indicator.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/objects/fields.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/objects/goal.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/objects/scoring_engine.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/objects/service.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/objects/strategy.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/test_base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/test_config.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/test_hooks.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/test_root.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/test_scheduling.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/test_utils.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/utils.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/v1/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/v1/test_actions.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/v1/test_actions_plans.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/v1/test_audit_templates.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/v1/test_data_model.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/v1/test_goals.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/v1/test_microversions.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/v1/test_root.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/v1/test_scoring_engines.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/v1/test_services.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/v1/test_strategies.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/v1/test_types.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/v1/test_utils.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/api/v1/test_webhooks.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/applier/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/applier/action_plan/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/applier/actions/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/applier/actions/loading/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/applier/actions/loading/test_default_actions_loader.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/applier/actions/test_change_node_power_state.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/applier/actions/test_change_nova_service_state.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/applier/actions/test_migration.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/applier/actions/test_resize.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/applier/actions/test_sleep.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/applier/messaging/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/applier/messaging/test_trigger_action_plan_endpoint.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/applier/test_applier_manager.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/applier/test_rpcapi.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/applier/test_sync.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/applier/workflow_engine/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/applier/workflow_engine/loading/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/applier/workflow_engine/loading/test_default_engine_loader.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/applier/workflow_engine/test_default_workflow_engine.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/applier/workflow_engine/test_taskflow_action_container.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/cmd/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/cmd/test_api.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/cmd/test_applier.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/cmd/test_db_manage.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/cmd/test_decision_engine.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/cmd/test_status.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/common/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/common/loader/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/common/loader/test_loader.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/common/metal_helper/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/common/metal_helper/test_base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/common/metal_helper/test_factory.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/common/metal_helper/test_ironic.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/common/metal_helper/test_maas.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/common/test_cinder_helper.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/common/test_clients.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/common/test_ironic_helper.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/common/test_nova_helper.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/common/test_placement_helper.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/common/test_scheduling.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/common/test_service.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/common/test_utils.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/conf/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/conf/test_list_opts.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/conf_fixture.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/config.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/db/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/db/base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/db/test_action.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/db/test_action_description.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/db/test_action_plan.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/db/test_audit.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/db/test_audit_template.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/db/test_efficacy_indicator.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/db/test_goal.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/db/test_purge.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/db/test_scoring_engine.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/db/test_service.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/db/test_strategy.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/db/utils.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/audit/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/audit/test_audit_handlers.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/cluster/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/cluster/test_cinder_cdmc.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/cluster/test_cluster_data_model_collector.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/cluster/test_nova_cdmc.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/datasources/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/datasources/grafana_translators/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/datasources/grafana_translators/test_base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/datasources/grafana_translators/test_influxdb.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/datasources/test_base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/datasources/test_gnocchi_helper.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/datasources/test_grafana_helper.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/datasources/test_manager.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/datasources/test_monasca_helper.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/event_consumer/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/fake_goals.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/fake_metal_helper.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/fake_strategies.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/loading/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/loading/test_collector_loader.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/loading/test_default_planner_loader.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/loading/test_default_strategy_loader.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/loading/test_goal_loader.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/messaging/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/messaging/test_audit_endpoint.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/messaging/test_data_model_endpoint.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/data/ironic_scenario_1.xml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/data/scenario_1.xml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/data/scenario_10.xml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/data/scenario_1_with_1_node_unavailable.xml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/data/scenario_1_with_all_instances_exclude.xml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/data/scenario_1_with_all_nodes_disable.xml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/data/scenario_1_with_metrics.xml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/data/scenario_2_with_metrics.xml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/data/scenario_3_with_2_nodes.xml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/data/scenario_3_with_metrics.xml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/data/scenario_4_with_1_node_no_instance.xml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/data/scenario_5_with_instance_disk_0.xml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/data/scenario_6_with_2_nodes.xml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/data/scenario_7_with_2_nodes.xml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/data/scenario_8_with_4_nodes.xml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/data/scenario_9_with_3_active_plus_1_disabled_nodes.xml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/data/storage_scenario_1.xml +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/faker_cluster_and_metrics.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/faker_cluster_state.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/gnocchi_metrics.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/monasca_metrics.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/capacity.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/instance-create-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/instance-delete-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/instance-live_migration_force_complete-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/instance-live_migration_post-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/instance-lock.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/instance-pause-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/instance-power_off-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/instance-power_on-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/instance-rebuild-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/instance-rescue-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/instance-resize_confirm-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/instance-restore-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/instance-resume-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/instance-shelve-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/instance-shutdown-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/instance-soft_delete-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/instance-suspend-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/instance-unlock.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/instance-unpause-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/instance-unrescue-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/instance-unshelve-end.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/instance-update.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/scenario3_instance-update.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/scenario3_notfound_instance-update.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/scenario3_notfound_legacy_instance-update.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/scenario3_service-update-disabled.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/scenario3_service-update-enabled.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/scenario_1_bootable-volume-create.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/scenario_1_capacity.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/scenario_1_capacity_node_notfound.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/scenario_1_capacity_pool_notfound.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/scenario_1_error-volume-create.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/scenario_1_volume-attach.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/scenario_1_volume-create.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/scenario_1_volume-create_pool_notfound.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/scenario_1_volume-delete.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/scenario_1_volume-detach.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/scenario_1_volume-resize.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/scenario_1_volume-update.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/service-create.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/service-delete.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/data/service-update.json +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/fake_managers.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/test_cinder_notifications.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/test_notifications.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/notification/test_nova_notifications.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/test_element.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/model/test_model.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/planner/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/planner/test_node_resource_consolidation.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/planner/test_planner_manager.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/planner/test_weight_planner.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/planner/test_workload_stabilization_planner.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/scope/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/scope/fake_scopes.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/scope/test_baremetal.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/scope/test_compute.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/scope/test_storage.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/scoring/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/scoring/test_dummy_scorer.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/scoring/test_dummy_scoring_container.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/scoring/test_scoring_factory.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/solution/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/solution/test_default_solution.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/context/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/context/test_strategy_context.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/selector/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/selector/test_strategy_selector.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/strategies/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/strategies/test_actuator.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/strategies/test_base.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/strategies/test_basic_consolidation.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/strategies/test_dummy_strategy.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/strategies/test_dummy_with_scorer.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/strategies/test_node_resource_consolidation.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/strategies/test_noisy_neighbor.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/strategies/test_outlet_temp_control.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/strategies/test_saving_energy.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/strategies/test_storage_capacity_balance.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/strategies/test_strategy_endpoint.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/strategies/test_uniform_airflow.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/strategies/test_vm_workload_consolidation.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/strategy/strategies/test_workload_balance.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/test_gmr.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/test_rpcapi.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/test_scheduling.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/decision_engine/test_sync.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/fake_policy.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/fakes.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/notifications/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/notifications/test_action_notification.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/notifications/test_action_plan_notification.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/notifications/test_audit_notification.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/notifications/test_notification.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/notifications/test_service_notifications.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/objects/__init__.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/objects/test_action.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/objects/test_action_description.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/objects/test_action_plan.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/objects/test_audit.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/objects/test_audit_template.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/objects/test_efficacy_indicator.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/objects/test_goal.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/objects/test_objects.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/objects/test_scoring_engine.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/objects/test_service.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/objects/test_strategy.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/objects/utils.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/policy_fixture.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/tests/test_threading.py +0 -0
- {python_watcher-14.0.0 → python_watcher-14.1.0}/watcher/version.py +0 -0
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
vars:
|
|
35
35
|
tempest_concurrency: 1
|
|
36
36
|
tempest_test_regex: watcher_tempest_plugin.tests.scenario.test_execute_strategies
|
|
37
|
+
tempest_exclude_regex: .*\[.*\breal_load\b.*\].*
|
|
37
38
|
|
|
38
39
|
- job:
|
|
39
40
|
name: watcher-tempest-multinode
|
|
@@ -213,10 +214,12 @@
|
|
|
213
214
|
CEILOMETER_BACKENDS: "sg-core"
|
|
214
215
|
CEILOMETER_PIPELINE_INTERVAL: 15
|
|
215
216
|
CEILOMETER_ALARM_THRESHOLD: 6000000000
|
|
216
|
-
NODE_EXPORTER_ENABLE: false
|
|
217
|
-
PROMETHEUS_ENABLE: false
|
|
218
|
-
PROMETHEUS_SERVICE_SCRAPE_TARGETS: "sg-core,node-exporter"
|
|
219
217
|
PROMETHEUS_CONFIG_FILE: "/home/zuul/prometheus.yml"
|
|
218
|
+
# Disable sg_core prometheus config copy
|
|
219
|
+
PROMETHEUS_ENABLE: false
|
|
220
|
+
# PROMETHEUS_CONFIG_FILE var conflicts with sg_core var
|
|
221
|
+
# to avoid issue, set PROMETHEUS_CONF_DIR
|
|
222
|
+
PROMETHEUS_CONF_DIR: "/home/zuul"
|
|
220
223
|
devstack_local_conf:
|
|
221
224
|
post-config:
|
|
222
225
|
$WATCHER_CONF:
|
|
@@ -253,6 +256,7 @@
|
|
|
253
256
|
tempest_plugins:
|
|
254
257
|
- watcher-tempest-plugin
|
|
255
258
|
tempest_test_regex: watcher_tempest_plugin.tests.scenario.test_execute_strategies
|
|
259
|
+
tempest_exclude_regex: .*\[.*\breal_load\b.*\].*
|
|
256
260
|
tempest_concurrency: 1
|
|
257
261
|
tox_envlist: all
|
|
258
262
|
zuul_copy_output:
|
|
@@ -261,7 +265,6 @@
|
|
|
261
265
|
subnode:
|
|
262
266
|
devstack_plugins:
|
|
263
267
|
ceilometer: https://opendev.org/openstack/ceilometer
|
|
264
|
-
sg-core: https://github.com/openstack-k8s-operators/sg-core
|
|
265
268
|
devstack-plugin-prometheus: https://opendev.org/openstack/devstack-plugin-prometheus
|
|
266
269
|
devstack_services:
|
|
267
270
|
ceilometer-acompute: true
|
|
@@ -271,9 +274,9 @@
|
|
|
271
274
|
devstack_localrc:
|
|
272
275
|
CEILOMETER_BACKEND: "none"
|
|
273
276
|
CEILOMETER_BACKENDS: "none"
|
|
274
|
-
#
|
|
275
|
-
|
|
276
|
-
|
|
277
|
+
# avoid collecting real host cpu metric since tests
|
|
278
|
+
# will inject fake metrics when needed
|
|
279
|
+
NODE_EXPORTER_COLLECTOR_EXCLUDE: "cpu"
|
|
277
280
|
devstack_local_conf:
|
|
278
281
|
post-config:
|
|
279
282
|
$WATCHER_CONF:
|
|
@@ -1,6 +1,29 @@
|
|
|
1
1
|
CHANGES
|
|
2
2
|
=======
|
|
3
3
|
|
|
4
|
+
14.1.0
|
|
5
|
+
------
|
|
6
|
+
|
|
7
|
+
* use cinder migrate for swap volume
|
|
8
|
+
* Configure watcher tempest's microversion in devstack
|
|
9
|
+
* Fix audit creation with no name and no goal or audit\_template
|
|
10
|
+
* Set actionplan state to FAILED if any action has failed
|
|
11
|
+
* Add unit test to check action plan state when a nested action fails
|
|
12
|
+
* Return HTTP code 400 when creating an audit with wrong parameters
|
|
13
|
+
* Use KiB as unit for host\_ram\_usage when using prometheus datasource
|
|
14
|
+
* Aggregate by label when querying instance cpu usage in prometheus
|
|
15
|
+
* Drop code from Host maintenance strategy migrating instance to disabled hosts
|
|
16
|
+
* Added unit test to validate audit creation with no goal and no name
|
|
17
|
+
* Add a unit test to check the error when creating an audit with wrong parameters
|
|
18
|
+
* [host\_maintenance] Pass des hostname in add\_action solution
|
|
19
|
+
* Add support for pyproject.toml and wsgi module paths
|
|
20
|
+
* Skip real-data tests in non-real-data jobs
|
|
21
|
+
* Aggregate by fqdn label instead instance in host cpu metrics
|
|
22
|
+
* Query by fqdn\_label instead of instance for host metrics
|
|
23
|
+
* Drop sg\_core prometheus related vars
|
|
24
|
+
* Update TOX\_CONSTRAINTS\_FILE for stable/2025.1
|
|
25
|
+
* Update .gitreview for stable/2025.1
|
|
26
|
+
|
|
4
27
|
14.0.0
|
|
5
28
|
------
|
|
6
29
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: python-watcher
|
|
3
|
-
Version: 14.
|
|
3
|
+
Version: 14.1.0
|
|
4
4
|
Summary: OpenStack Watcher provides a flexible and scalable resource optimization service for multi-tenant OpenStack-based clouds.
|
|
5
5
|
Home-page: https://docs.openstack.org/watcher/latest/
|
|
6
6
|
Author: OpenStack
|
|
@@ -14,7 +14,6 @@ Classifier: Programming Language :: Python
|
|
|
14
14
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
15
15
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
16
16
|
Classifier: Programming Language :: Python :: 3
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
18
17
|
Classifier: Programming Language :: Python :: 3.10
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.11
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -55,11 +55,7 @@ else
|
|
|
55
55
|
WATCHER_BIN_DIR=$(get_python_exec_prefix)
|
|
56
56
|
fi
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
# proxy uwsgi in front of it, or "mod_wsgi", which runs in
|
|
60
|
-
# apache. mod_wsgi is deprecated, don't use it.
|
|
61
|
-
WATCHER_USE_WSGI_MODE=${WATCHER_USE_WSGI_MODE:-$WSGI_MODE}
|
|
62
|
-
WATCHER_UWSGI=$WATCHER_BIN_DIR/watcher-api-wsgi
|
|
58
|
+
WATCHER_UWSGI=watcher.wsgi.api:application
|
|
63
59
|
WATCHER_UWSGI_CONF=$WATCHER_CONF_DIR/watcher-uwsgi.ini
|
|
64
60
|
|
|
65
61
|
if is_suse; then
|
|
@@ -73,11 +69,7 @@ WATCHER_SERVICE_PORT=${WATCHER_SERVICE_PORT:-9322}
|
|
|
73
69
|
WATCHER_SERVICE_PORT_INT=${WATCHER_SERVICE_PORT_INT:-19322}
|
|
74
70
|
WATCHER_SERVICE_PROTOCOL=${WATCHER_SERVICE_PROTOCOL:-$SERVICE_PROTOCOL}
|
|
75
71
|
|
|
76
|
-
|
|
77
|
-
WATCHER_API_URL="$WATCHER_SERVICE_PROTOCOL://$WATCHER_SERVICE_HOST/infra-optim"
|
|
78
|
-
else
|
|
79
|
-
WATCHER_API_URL="$WATCHER_SERVICE_PROTOCOL://$WATCHER_SERVICE_HOST:$WATCHER_SERVICE_PORT"
|
|
80
|
-
fi
|
|
72
|
+
WATCHER_API_URL="$WATCHER_SERVICE_PROTOCOL://$WATCHER_SERVICE_HOST/infra-optim"
|
|
81
73
|
|
|
82
74
|
# Entry Points
|
|
83
75
|
# ------------
|
|
@@ -101,11 +93,7 @@ function _cleanup_watcher_apache_wsgi {
|
|
|
101
93
|
# runs that a clean run would need to clean up
|
|
102
94
|
function cleanup_watcher {
|
|
103
95
|
sudo rm -rf $WATCHER_STATE_PATH
|
|
104
|
-
|
|
105
|
-
remove_uwsgi_config "$WATCHER_UWSGI_CONF" "$WATCHER_UWSGI"
|
|
106
|
-
else
|
|
107
|
-
_cleanup_watcher_apache_wsgi
|
|
108
|
-
fi
|
|
96
|
+
remove_uwsgi_config "$WATCHER_UWSGI_CONF" "$WATCHER_UWSGI"
|
|
109
97
|
}
|
|
110
98
|
|
|
111
99
|
# configure_watcher() - Set config files, create data dirs, etc
|
|
@@ -154,31 +142,6 @@ function create_watcher_accounts {
|
|
|
154
142
|
"$WATCHER_API_URL"
|
|
155
143
|
}
|
|
156
144
|
|
|
157
|
-
# _config_watcher_apache_wsgi() - Set WSGI config files of watcher
|
|
158
|
-
function _config_watcher_apache_wsgi {
|
|
159
|
-
local watcher_apache_conf
|
|
160
|
-
if [[ "$WATCHER_USE_WSGI_MODE" == "mod_wsgi" ]]; then
|
|
161
|
-
local service_port=$WATCHER_SERVICE_PORT
|
|
162
|
-
if is_service_enabled tls-proxy; then
|
|
163
|
-
service_port=$WATCHER_SERVICE_PORT_INT
|
|
164
|
-
service_protocol="http"
|
|
165
|
-
fi
|
|
166
|
-
sudo mkdir -p $WATCHER_WSGI_DIR
|
|
167
|
-
sudo cp $WATCHER_DIR/watcher/api/app.wsgi $WATCHER_WSGI_DIR/app.wsgi
|
|
168
|
-
watcher_apache_conf=$(apache_site_config_for watcher-api)
|
|
169
|
-
sudo cp $WATCHER_DEVSTACK_FILES_DIR/apache-watcher-api.template $watcher_apache_conf
|
|
170
|
-
sudo sed -e "
|
|
171
|
-
s|%WATCHER_SERVICE_PORT%|$service_port|g;
|
|
172
|
-
s|%WATCHER_WSGI_DIR%|$WATCHER_WSGI_DIR|g;
|
|
173
|
-
s|%USER%|$STACK_USER|g;
|
|
174
|
-
s|%APIWORKERS%|$API_WORKERS|g;
|
|
175
|
-
s|%APACHE_NAME%|$APACHE_NAME|g;
|
|
176
|
-
" -i $watcher_apache_conf
|
|
177
|
-
enable_apache_site watcher-api
|
|
178
|
-
fi
|
|
179
|
-
|
|
180
|
-
}
|
|
181
|
-
|
|
182
145
|
# create_watcher_conf() - Create a new watcher.conf file
|
|
183
146
|
function create_watcher_conf {
|
|
184
147
|
# (Re)create ``watcher.conf``
|
|
@@ -196,11 +159,6 @@ function create_watcher_conf {
|
|
|
196
159
|
iniset $WATCHER_CONF api host "$(ipv6_unquote $WATCHER_SERVICE_HOST)"
|
|
197
160
|
iniset $WATCHER_CONF api port "$WATCHER_SERVICE_PORT_INT"
|
|
198
161
|
# iniset $WATCHER_CONF api enable_ssl_api "True"
|
|
199
|
-
else
|
|
200
|
-
if [[ "$WATCHER_USE_WSGI_MODE" == "mod_wsgi" ]]; then
|
|
201
|
-
iniset $WATCHER_CONF api host "$(ipv6_unquote $WATCHER_SERVICE_HOST)"
|
|
202
|
-
iniset $WATCHER_CONF api port "$WATCHER_SERVICE_PORT"
|
|
203
|
-
fi
|
|
204
162
|
fi
|
|
205
163
|
|
|
206
164
|
iniset $WATCHER_CONF oslo_policy policy_file $WATCHER_POLICY_YAML
|
|
@@ -228,12 +186,8 @@ function create_watcher_conf {
|
|
|
228
186
|
# Format logging
|
|
229
187
|
setup_logging $WATCHER_CONF
|
|
230
188
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
write_uwsgi_config "$WATCHER_UWSGI_CONF" "$WATCHER_UWSGI" "/infra-optim"
|
|
234
|
-
else
|
|
235
|
-
_config_watcher_apache_wsgi
|
|
236
|
-
fi
|
|
189
|
+
write_uwsgi_config "$WATCHER_UWSGI_CONF" "$WATCHER_UWSGI" "/infra-optim" "" "watcher-api"
|
|
190
|
+
|
|
237
191
|
# Register SSL certificates if provided
|
|
238
192
|
if is_ssl_enabled_service watcher; then
|
|
239
193
|
ensure_certificates WATCHER
|
|
@@ -273,9 +227,6 @@ function install_watcherclient {
|
|
|
273
227
|
function install_watcher {
|
|
274
228
|
git_clone $WATCHER_REPO $WATCHER_DIR $WATCHER_BRANCH
|
|
275
229
|
setup_develop $WATCHER_DIR
|
|
276
|
-
if [[ "$WATCHER_USE_WSGI_MODE" == "mod_wsgi" ]]; then
|
|
277
|
-
install_apache_wsgi
|
|
278
|
-
fi
|
|
279
230
|
}
|
|
280
231
|
|
|
281
232
|
# start_watcher_api() - Start the API process ahead of other things
|
|
@@ -289,19 +240,10 @@ function start_watcher_api {
|
|
|
289
240
|
service_port=$WATCHER_SERVICE_PORT_INT
|
|
290
241
|
service_protocol="http"
|
|
291
242
|
fi
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
watcher_url=$service_protocol://$SERVICE_HOST:$service_port
|
|
297
|
-
enable_apache_site watcher-api
|
|
298
|
-
restart_apache_server
|
|
299
|
-
# Start proxies if enabled
|
|
300
|
-
if is_service_enabled tls-proxy; then
|
|
301
|
-
start_tls_proxy watcher '*' $WATCHER_SERVICE_PORT $WATCHER_SERVICE_HOST $WATCHER_SERVICE_PORT_INT
|
|
302
|
-
fi
|
|
303
|
-
fi
|
|
304
|
-
|
|
243
|
+
run_process "watcher-api" "$(which uwsgi) --procname-prefix watcher-api --ini $WATCHER_UWSGI_CONF"
|
|
244
|
+
watcher_url=$service_protocol://$SERVICE_HOST/infra-optim
|
|
245
|
+
# TODO(sean-k-mooney): we should probably check that we can hit
|
|
246
|
+
# the microversion endpoint and get a valid response.
|
|
305
247
|
echo "Waiting for watcher-api to start..."
|
|
306
248
|
if ! wait_for_service $SERVICE_TIMEOUT $watcher_url; then
|
|
307
249
|
die $LINENO "watcher-api did not start"
|
|
@@ -319,17 +261,25 @@ function start_watcher {
|
|
|
319
261
|
|
|
320
262
|
# stop_watcher() - Stop running processes (non-screen)
|
|
321
263
|
function stop_watcher {
|
|
322
|
-
|
|
323
|
-
stop_process watcher-api
|
|
324
|
-
else
|
|
325
|
-
disable_apache_site watcher-api
|
|
326
|
-
restart_apache_server
|
|
327
|
-
fi
|
|
264
|
+
stop_process watcher-api
|
|
328
265
|
for serv in watcher-decision-engine watcher-applier; do
|
|
329
266
|
stop_process $serv
|
|
330
267
|
done
|
|
331
268
|
}
|
|
332
269
|
|
|
270
|
+
# configure_tempest_for_watcher() - Configure Tempest for watcher
|
|
271
|
+
function configure_tempest_for_watcher {
|
|
272
|
+
# Set default microversion for watcher-tempest-plugin
|
|
273
|
+
# Please make sure to update this when the microversion is updated, otherwise
|
|
274
|
+
# new tests may be skipped.
|
|
275
|
+
TEMPEST_WATCHER_MIN_MICROVERSION=${TEMPEST_WATCHER_MIN_MICROVERSION:-"1.0"}
|
|
276
|
+
TEMPEST_WATCHER_MAX_MICROVERSION=${TEMPEST_WATCHER_MAX_MICROVERSION:-"1.4"}
|
|
277
|
+
|
|
278
|
+
# Set microversion options in tempest.conf
|
|
279
|
+
iniset $TEMPEST_CONFIG optimize min_microversion $TEMPEST_WATCHER_MIN_MICROVERSION
|
|
280
|
+
iniset $TEMPEST_CONFIG optimize max_microversion $TEMPEST_WATCHER_MAX_MICROVERSION
|
|
281
|
+
}
|
|
282
|
+
|
|
333
283
|
# Restore xtrace
|
|
334
284
|
$_XTRACE_WATCHER
|
|
335
285
|
|
|
@@ -36,6 +36,9 @@ if is_service_enabled watcher-api watcher-decision-engine watcher-applier; then
|
|
|
36
36
|
# Start the watcher components
|
|
37
37
|
echo_summary "Starting watcher"
|
|
38
38
|
start_watcher
|
|
39
|
+
elif [[ "$1" == "stack" && "$2" == "test-config" ]]; then
|
|
40
|
+
echo_summary "Configuring tempest for watcher"
|
|
41
|
+
configure_tempest_for_watcher
|
|
39
42
|
fi
|
|
40
43
|
|
|
41
44
|
if [[ "$1" == "unstack" ]]; then
|
|
@@ -29,19 +29,19 @@ This default can be overridden when a deployer uses a different label to
|
|
|
29
29
|
identify the exporter host (for example ``hostname`` or ``host``, or any other
|
|
30
30
|
label, as long as it identifies the host).
|
|
31
31
|
|
|
32
|
-
Internally this label is used in creating
|
|
33
|
-
the
|
|
34
|
-
The
|
|
32
|
+
Internally this label is used in creating ``fqdn_instance_labels``, containing
|
|
33
|
+
the list of values assigned to the the label in the Prometheus targets.
|
|
34
|
+
The elements of the resulting fqdn_instance_labels are expected to match the
|
|
35
35
|
``ComputeNode.hostname`` used in the Watcher decision engine cluster model.
|
|
36
|
-
An example ``
|
|
36
|
+
An example ``fqdn_instance_labels`` is the following:
|
|
37
37
|
|
|
38
38
|
.. code-block::
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
'ena.controlplane.domain'
|
|
42
|
-
'dio.controlplane.domain'
|
|
43
|
-
'tria.controlplane.domain'
|
|
44
|
-
|
|
40
|
+
[
|
|
41
|
+
'ena.controlplane.domain',
|
|
42
|
+
'dio.controlplane.domain',
|
|
43
|
+
'tria.controlplane.domain',
|
|
44
|
+
]
|
|
45
45
|
|
|
46
46
|
For instance metrics, it is required that Prometheus contains a label
|
|
47
47
|
with the uuid of the OpenStack instance in each relevant metric. By default,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: python-watcher
|
|
3
|
-
Version: 14.
|
|
3
|
+
Version: 14.1.0
|
|
4
4
|
Summary: OpenStack Watcher provides a flexible and scalable resource optimization service for multi-tenant OpenStack-based clouds.
|
|
5
5
|
Home-page: https://docs.openstack.org/watcher/latest/
|
|
6
6
|
Author: OpenStack
|
|
@@ -14,7 +14,6 @@ Classifier: Programming Language :: Python
|
|
|
14
14
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
15
15
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
16
16
|
Classifier: Programming Language :: Python :: 3
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
18
17
|
Classifier: Programming Language :: Python :: 3.10
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.11
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -9,6 +9,7 @@ ChangeLog
|
|
|
9
9
|
HACKING.rst
|
|
10
10
|
LICENSE
|
|
11
11
|
README.rst
|
|
12
|
+
pyproject.toml
|
|
12
13
|
requirements.txt
|
|
13
14
|
setup.cfg
|
|
14
15
|
setup.py
|
|
@@ -243,6 +244,7 @@ releasenotes/notes/add-power-on-off-a77673d482568a8b.yaml
|
|
|
243
244
|
releasenotes/notes/add-scoring-module-fa00d013ed2d614e.yaml
|
|
244
245
|
releasenotes/notes/add-start-end-time-for-continuous-audit-52c45052cb06d153.yaml
|
|
245
246
|
releasenotes/notes/add-upgrade-check-framework-5bb9693c8a78931c.yaml
|
|
247
|
+
releasenotes/notes/add-wsgi-module-support-597f479e31979270.yaml
|
|
246
248
|
releasenotes/notes/api-call-retry-fef741ac684c58dd.yaml
|
|
247
249
|
releasenotes/notes/api-microversioning-7999a3ee8073bf32.yaml
|
|
248
250
|
releasenotes/notes/audit-scoper-for-storage-data-model-cdccc803542d22db.yaml
|
|
@@ -251,6 +253,10 @@ releasenotes/notes/audit-versioned-notifications-api-bca7738e16954bad.yaml
|
|
|
251
253
|
releasenotes/notes/automatic-triggering-audit-8a9b0540d547db60.yaml
|
|
252
254
|
releasenotes/notes/background-jobs-ha-9d3cf3fe356f4705.yaml
|
|
253
255
|
releasenotes/notes/bp-audit-scope-exclude-project-511a7720aac00dff.yaml
|
|
256
|
+
releasenotes/notes/bug-2103451-fixes-prometheus-queries-with-multiple-target-0e65d20711d1abe2.yaml
|
|
257
|
+
releasenotes/notes/bug-2110947.yaml
|
|
258
|
+
releasenotes/notes/bug-2112187-763bae283e0b736d.yaml
|
|
259
|
+
releasenotes/notes/bug-2113776-4bd314fb46623fbc.yaml
|
|
254
260
|
releasenotes/notes/build-baremetal-data-model-in-watcher-3023453a47b61dab.yaml
|
|
255
261
|
releasenotes/notes/cdm-scoping-8d9c307bad46bfa1.yaml
|
|
256
262
|
releasenotes/notes/centralise-config-opts-95670987dfbdb0e7.yaml
|
|
@@ -269,6 +275,7 @@ releasenotes/notes/define-the-audit-scope-e89edc5051dcf3f2.yaml
|
|
|
269
275
|
releasenotes/notes/deprecate-ceilometer-datasource-446b0be70fbce28b.yaml
|
|
270
276
|
releasenotes/notes/deprecate-json-formatted-policy-file-3a92379e9f5dd203.yaml
|
|
271
277
|
releasenotes/notes/deprecate-monasca-ds-9065f4d4bee09ab2.yaml
|
|
278
|
+
releasenotes/notes/donot-run-host-migration-strategy-on-disabled-hosts-24084a22d4c8f914.yaml
|
|
272
279
|
releasenotes/notes/drop-py-2-7-54f8e806d71f19a7.yaml
|
|
273
280
|
releasenotes/notes/drop-python38-support-eeb19a0bc0160sw1.yaml
|
|
274
281
|
releasenotes/notes/dynamic-action-description-0e947b9e7ef2a134.yaml
|
|
@@ -276,6 +283,7 @@ releasenotes/notes/efficacy-indicator-95380ad7b84e3be2.yaml
|
|
|
276
283
|
releasenotes/notes/enhance-watcher-applier-engine-86c676ce8f179e68.yaml
|
|
277
284
|
releasenotes/notes/event-driven-optimization-based-4870f112bef8a560.yaml
|
|
278
285
|
releasenotes/notes/file-based-metric-map-c2af62b5067895df.yaml
|
|
286
|
+
releasenotes/notes/fix-action-plan-state-on-failure-69e498d902ada5c5.yaml
|
|
279
287
|
releasenotes/notes/formal-datasource-interface-implementation-222769d55a127d33.yaml
|
|
280
288
|
releasenotes/notes/general-purpose-decision-engine-threadpool-0711b23abfc9d409.yaml
|
|
281
289
|
releasenotes/notes/get-goal-from-strategy-396c9b13a38bb650.yaml
|
|
@@ -299,6 +307,7 @@ releasenotes/notes/prometheus-datasource-e56f2f7b8f3427c2.yaml
|
|
|
299
307
|
releasenotes/notes/remove-ceilometer-datasource-8d9ab7d64d61e405.yaml
|
|
300
308
|
releasenotes/notes/remove-nova-legacy-notifications-e1b6d10eff58f30a.yaml
|
|
301
309
|
releasenotes/notes/replace-cold-migrate-to-use-nova-migration-api-cecd9a39ddd3bc58.yaml
|
|
310
|
+
releasenotes/notes/return-error-400-on-bad-parameters-bb964e4f5cadc15c.yaml
|
|
302
311
|
releasenotes/notes/scope-for-data-model-ea9792f90db14343.yaml
|
|
303
312
|
releasenotes/notes/service-versioned-notifications-api-70367b79a565d900.yaml
|
|
304
313
|
releasenotes/notes/show-datamodel-api-6945b744fd5d25d5.yaml
|
|
@@ -882,4 +891,6 @@ watcher/tests/objects/test_objects.py
|
|
|
882
891
|
watcher/tests/objects/test_scoring_engine.py
|
|
883
892
|
watcher/tests/objects/test_service.py
|
|
884
893
|
watcher/tests/objects/test_strategy.py
|
|
885
|
-
watcher/tests/objects/utils.py
|
|
894
|
+
watcher/tests/objects/utils.py
|
|
895
|
+
watcher/wsgi/__init__.py
|
|
896
|
+
watcher/wsgi/api.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"git_version": "024815af", "is_release": true}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
features:
|
|
3
|
+
- |
|
|
4
|
+
A new module, ``watcher.wsgi``, has been added as a place to gather WSGI
|
|
5
|
+
``application`` objects. This is intended to ease deployment by providing
|
|
6
|
+
a consistent location for these objects. For example, if using uWSGI then
|
|
7
|
+
instead of:
|
|
8
|
+
|
|
9
|
+
.. code-block:: ini
|
|
10
|
+
|
|
11
|
+
[uwsgi]
|
|
12
|
+
wsgi-file = /bin/watcher-api-wsgi
|
|
13
|
+
|
|
14
|
+
You can now use:
|
|
15
|
+
|
|
16
|
+
.. code-block:: ini
|
|
17
|
+
|
|
18
|
+
[uwsgi]
|
|
19
|
+
module = watcher.wsgi.api:application
|
|
20
|
+
|
|
21
|
+
This also simplifies deployment with other WSGI servers that expect module
|
|
22
|
+
paths such as gunicorn.
|
|
23
|
+
deprecations:
|
|
24
|
+
- |
|
|
25
|
+
The watcher-api-wsgi console script is deprecated for removal
|
|
26
|
+
in a future release. This artifact is generated using a setup-tools
|
|
27
|
+
extension that is provide by PBR which is also deprecated.
|
|
28
|
+
due to the changes in python packaging this custom extensions
|
|
29
|
+
is planned to be removed form all OpenStack projects in a future
|
|
30
|
+
PBR release in favor of module based wsgi applications entry points.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
fixes:
|
|
3
|
+
- |
|
|
4
|
+
When using prometheus datasource and more that one target has the same value
|
|
5
|
+
for the ``fqdn_label``, the driver used the wrong instance label to query for host
|
|
6
|
+
metrics. The ``instance`` label is no longer used in the queries but the ``fqdn_label``
|
|
7
|
+
which identifies all the metrics for a specific compute node.
|
|
8
|
+
see Bug 2103451: https://bugs.launchpad.net/watcher/+bug/2103451 for more info.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
fixes:
|
|
3
|
+
- |
|
|
4
|
+
Previously, when users attempted to create a new audit without providing
|
|
5
|
+
a name and a goal or an audit template, the API returned error 500 and an
|
|
6
|
+
incorrect error message was displayed.
|
|
7
|
+
|
|
8
|
+
Now, Watcher displays a helpful message and returns HTTP error 400.
|
|
9
|
+
|
|
10
|
+
For more info see: https://bugs.launchpad.net/watcher/+bug/2110947
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
security:
|
|
3
|
+
- |
|
|
4
|
+
Watchers no longer forges requests on behalf of a tenant when
|
|
5
|
+
swapping volumes. Prior to this release watcher had 2 implementations
|
|
6
|
+
of moving a volume, it could use cinders volume migrate api or its own
|
|
7
|
+
internal implementation that directly calls nova volume attachment update
|
|
8
|
+
api. The former is safe and the recommend way to move volumes between
|
|
9
|
+
cinder storage backend the internal implementation was insecure, fragile
|
|
10
|
+
due to a lack of error handling and capable of deleting user data.
|
|
11
|
+
|
|
12
|
+
Insecure: the internal volume migration operation created a new keystone
|
|
13
|
+
user with a weak name and password and added it to the tenants project
|
|
14
|
+
with the admin role. It then used that user to forge request on behalf
|
|
15
|
+
of the tenant with admin right to swap the volume. if the applier was
|
|
16
|
+
restarted during the execution of this operation it would never be cleaned
|
|
17
|
+
up.
|
|
18
|
+
|
|
19
|
+
Fragile: the error handling was minimal, the swap volume api is async
|
|
20
|
+
so watcher has to poll for completion, there was no support to resume
|
|
21
|
+
that if interrupted of the time out was exceeded.
|
|
22
|
+
|
|
23
|
+
Data-loss: while the internal polling logic returned success or failure
|
|
24
|
+
watcher did not check the result, once the function returned it
|
|
25
|
+
unconditionally deleted the source volume. For larger volumes this
|
|
26
|
+
could result in irretrievable data loss.
|
|
27
|
+
|
|
28
|
+
Finally if a volume was swapped using the internal workflow it put
|
|
29
|
+
the nova instance in an out of sync state. If the VM was live migrated
|
|
30
|
+
after the swap volume completed successfully prior to a hard reboot
|
|
31
|
+
then the migration would fail or succeed and break tenant isolation.
|
|
32
|
+
|
|
33
|
+
see: https://bugs.launchpad.net/nova/+bug/2112187 for details.
|
|
34
|
+
fixes:
|
|
35
|
+
- |
|
|
36
|
+
All code related to creating keystone user and granting roles has been
|
|
37
|
+
removed. The internal swap volume implementation has been removed and
|
|
38
|
+
replaced by cinders volume migrate api. Note as part of this change
|
|
39
|
+
Watcher will no longer attempt volume migrations or retypes if the
|
|
40
|
+
instance is in the `Verify Resize` task state. This resolves several
|
|
41
|
+
issues related to volume migration in the zone migration and
|
|
42
|
+
Storage capacity balance strategies. While efforts have been made
|
|
43
|
+
to maintain backward compatibility these changes are required to
|
|
44
|
+
address a security weakness in watcher's prior approach.
|
|
45
|
+
|
|
46
|
+
see: https://bugs.launchpad.net/nova/+bug/2112187 for more context.
|
|
47
|
+
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
fixes:
|
|
3
|
+
- |
|
|
4
|
+
When running an audit with the `workload_stabilization` strategy with
|
|
5
|
+
`instance_ram_usage` metric in a deployment with prometheus datasource,
|
|
6
|
+
the host metric for the ram usage was wrongly reported with the incorrect
|
|
7
|
+
unit which lead to incorrect standard deviation and action plans due to the
|
|
8
|
+
application of the wrong scale factor in the algorithm.
|
|
9
|
+
|
|
10
|
+
The host ram usage metric is now properly reported in KB when using a
|
|
11
|
+
prometheus datasource and the strategy `workload_stabilization` calculates
|
|
12
|
+
the standard deviation properly.
|
|
13
|
+
|
|
14
|
+
For more details: https://launchpad.net/bugs/2113776
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
fixes:
|
|
3
|
+
- |
|
|
4
|
+
Host maintenance strategy should migrate servers based on backup node if specified
|
|
5
|
+
or rely on nova scheduler. It was enabling disabled hosts with watcher_disabled
|
|
6
|
+
reason and migrating servers to those nodes. It can impact customer workload. Compute
|
|
7
|
+
nodes were disabled for a reason.
|
|
8
|
+
|
|
9
|
+
Host maintenance strategy is fixed now to support migrating servers only on backup
|
|
10
|
+
node or rely on nova scheduler if no backup node is provided.
|
python_watcher-14.1.0/releasenotes/notes/fix-action-plan-state-on-failure-69e498d902ada5c5.yaml
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
fixes:
|
|
3
|
+
- |
|
|
4
|
+
Previously, if an action failed in an action plan, the state of the
|
|
5
|
+
action plan was reported as SUCCEEDED if the execution of the action has
|
|
6
|
+
finished regardless of the outcome.
|
|
7
|
+
|
|
8
|
+
Watcher will now reflect the actual state of all the actions in the plan
|
|
9
|
+
after the execution has finished. If any action has status FAILED, it
|
|
10
|
+
will set the state of the action plan as FAILED. This is the expected
|
|
11
|
+
behavior according to Watcher documentation.
|
|
12
|
+
|
|
13
|
+
For more info see: https://bugs.launchpad.net/watcher/+bug/2106407
|
|
@@ -17,7 +17,6 @@ classifier =
|
|
|
17
17
|
Programming Language :: Python :: Implementation :: CPython
|
|
18
18
|
Programming Language :: Python :: 3 :: Only
|
|
19
19
|
Programming Language :: Python :: 3
|
|
20
|
-
Programming Language :: Python :: 3.9
|
|
21
20
|
Programming Language :: Python :: 3.10
|
|
22
21
|
Programming Language :: Python :: 3.11
|
|
23
22
|
Programming Language :: Python :: 3.12
|
|
@@ -8,7 +8,7 @@ basepython = python3
|
|
|
8
8
|
usedevelop = True
|
|
9
9
|
allowlist_externals = find
|
|
10
10
|
rm
|
|
11
|
-
install_command = pip install -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/
|
|
11
|
+
install_command = pip install -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/2025.1} {opts} {packages}
|
|
12
12
|
setenv =
|
|
13
13
|
VIRTUAL_ENV={envdir}
|
|
14
14
|
OS_STDOUT_CAPTURE=1
|
|
@@ -106,8 +106,10 @@ commands =
|
|
|
106
106
|
make -C doc/build/pdf
|
|
107
107
|
|
|
108
108
|
[testenv:releasenotes]
|
|
109
|
-
deps =
|
|
110
|
-
commands =
|
|
109
|
+
deps = {[testenv:docs]deps}
|
|
110
|
+
commands =
|
|
111
|
+
rm -rf releasenotes/build
|
|
112
|
+
sphinx-build -W --keep-going -b html -j auto releasenotes/source releasenotes/build/html
|
|
111
113
|
|
|
112
114
|
[testenv:bandit]
|
|
113
115
|
skip_install = true
|
|
@@ -146,8 +148,3 @@ extension =
|
|
|
146
148
|
N342 = checks:no_redundant_import_alias
|
|
147
149
|
N366 = checks:import_stock_mock
|
|
148
150
|
paths = ./watcher/hacking
|
|
149
|
-
|
|
150
|
-
[doc8]
|
|
151
|
-
extension=.rst
|
|
152
|
-
# todo: stop ignoring doc/source/man when https://bugs.launchpad.net/doc8/+bug/1502391 is fixed
|
|
153
|
-
ignore-path=doc/source/image_src,doc/source/man,doc/source/api
|
|
@@ -33,6 +33,7 @@ import datetime
|
|
|
33
33
|
from dateutil import tz
|
|
34
34
|
|
|
35
35
|
from http import HTTPStatus
|
|
36
|
+
import jsonschema
|
|
36
37
|
from oslo_log import log
|
|
37
38
|
from oslo_utils import timeutils
|
|
38
39
|
import pecan
|
|
@@ -114,6 +115,11 @@ class AuditPostType(wtypes.Base):
|
|
|
114
115
|
if self.audit_type not in audit_type_values:
|
|
115
116
|
raise exception.AuditTypeNotFound(audit_type=self.audit_type)
|
|
116
117
|
|
|
118
|
+
if not self.audit_template_uuid and not self.goal:
|
|
119
|
+
message = _(
|
|
120
|
+
'A valid goal or audit_template_id must be provided')
|
|
121
|
+
raise exception.Invalid(message)
|
|
122
|
+
|
|
117
123
|
if (self.audit_type == objects.audit.AuditType.ONESHOT.value and
|
|
118
124
|
self.interval not in (wtypes.Unset, None)):
|
|
119
125
|
raise exception.AuditIntervalNotAllowed(audit_type=self.audit_type)
|
|
@@ -612,11 +618,6 @@ class AuditsController(rest.RestController):
|
|
|
612
618
|
if self.from_audits:
|
|
613
619
|
raise exception.OperationNotPermitted
|
|
614
620
|
|
|
615
|
-
if not audit._goal_uuid:
|
|
616
|
-
raise exception.Invalid(
|
|
617
|
-
message=_('A valid goal_id or audit_template_id '
|
|
618
|
-
'must be provided'))
|
|
619
|
-
|
|
620
621
|
strategy_uuid = audit.strategy_uuid
|
|
621
622
|
no_schema = True
|
|
622
623
|
if strategy_uuid is not None:
|
|
@@ -627,8 +628,12 @@ class AuditsController(rest.RestController):
|
|
|
627
628
|
if schema:
|
|
628
629
|
# validate input parameter with default value feedback
|
|
629
630
|
no_schema = False
|
|
630
|
-
|
|
631
|
-
|
|
631
|
+
try:
|
|
632
|
+
utils.StrictDefaultValidatingDraft4Validator(
|
|
633
|
+
schema).validate(audit.parameters)
|
|
634
|
+
except jsonschema.exceptions.ValidationError as e:
|
|
635
|
+
raise exception.Invalid(
|
|
636
|
+
_('Invalid parameters for strategy: %s') % e)
|
|
632
637
|
|
|
633
638
|
if no_schema and audit.parameters:
|
|
634
639
|
raise exception.Invalid(_('Specify parameters but no predefined '
|
|
@@ -56,12 +56,30 @@ class DefaultActionPlanHandler(base.BaseActionPlanHandler):
|
|
|
56
56
|
applier = default.DefaultApplier(self.ctx, self.service)
|
|
57
57
|
applier.execute(self.action_plan_uuid)
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
# If any action has failed the action plan should be FAILED
|
|
60
|
+
# Define default values for successful execution
|
|
61
|
+
ap_state = objects.action_plan.State.SUCCEEDED
|
|
62
|
+
notification_kwargs = {
|
|
63
|
+
'phase': fields.NotificationPhase.END
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
failed_filter = {'action_plan_uuid': self.action_plan_uuid,
|
|
67
|
+
'state': objects.action.State.FAILED}
|
|
68
|
+
failed_actions = objects.Action.list(
|
|
69
|
+
self.ctx, filters=failed_filter, eager=True)
|
|
70
|
+
if failed_actions:
|
|
71
|
+
ap_state = objects.action_plan.State.FAILED
|
|
72
|
+
notification_kwargs = {
|
|
73
|
+
'phase': fields.NotificationPhase.ERROR,
|
|
74
|
+
'priority': fields.NotificationPriority.ERROR
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
action_plan.state = ap_state
|
|
60
78
|
action_plan.save()
|
|
61
79
|
notifications.action_plan.send_action_notification(
|
|
62
80
|
self.ctx, action_plan,
|
|
63
81
|
action=fields.NotificationAction.EXECUTION,
|
|
64
|
-
|
|
82
|
+
**notification_kwargs)
|
|
65
83
|
|
|
66
84
|
except exception.ActionPlanCancelled as e:
|
|
67
85
|
LOG.exception(e)
|