python-watcher 15.1.0__tar.gz → 15.1.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_watcher-15.1.0 → python_watcher-15.1.1}/.zuul.yaml +3 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/ChangeLog +14 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/PKG-INFO +1 -1
- {python_watcher-15.1.0 → python_watcher-15.1.1}/python_watcher.egg-info/PKG-INFO +1 -1
- {python_watcher-15.1.0 → python_watcher-15.1.1}/python_watcher.egg-info/SOURCES.txt +3 -0
- python_watcher-15.1.1/python_watcher.egg-info/pbr.json +1 -0
- python_watcher-15.1.1/releasenotes/notes/960265-optional-pool-fields-storage-xml-26701a4ce5e54f2b.yaml +11 -0
- python_watcher-15.1.1/releasenotes/notes/avoid-transport-url-in-debug-logs.yaml +8 -0
- python_watcher-15.1.1/releasenotes/notes/bug-2129692-a1f941b8fa5a71be.yaml +15 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/cinder_helper.py +58 -16
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/service.py +2 -2
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/grafana_client.py +1 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/maas_client.py +1 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/element/base.py +4 -1
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/model_root.py +13 -2
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/strategies/zone_migration.py +34 -11
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/v1/test_audits.py +33 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/common/test_cinder_helper.py +206 -16
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/common/test_service.py +22 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/test_model.py +39 -9
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/strategies/test_zone_migration.py +109 -0
- python_watcher-15.1.0/python_watcher.egg-info/pbr.json +0 -1
- {python_watcher-15.1.0 → python_watcher-15.1.1}/.coveragerc +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/.mailmap +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/.pre-commit-config.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/.stestr.conf +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/AUTHORS +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/CONTRIBUTING.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/HACKING.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/LICENSE +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/README.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/conf.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/index.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/parameters.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/action-skip-request-with-message.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/action-skip-request.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/action-skip-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/action-update-status-message-request.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/action-update-status-message-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/actionplan-cancel-request-cancelling.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/actionplan-cancel-request-pending.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/actionplan-list-detailed-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/actionplan-list-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/actionplan-show-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/actionplan-start-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/actions-list-detailed-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/actions-list-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/actions-show-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/api-root-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/api-v1-root-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/audit-cancel-request.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/audit-cancel-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/audit-create-request-continuous.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/audit-create-request-oneshot.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/audit-create-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/audit-list-detailed-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/audit-list-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/audit-show-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/audit-update-request.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/audit-update-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/audittemplate-create-request-full.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/audittemplate-create-request-minimal.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/audittemplate-create-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/audittemplate-list-detailed-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/audittemplate-list-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/audittemplate-show-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/audittemplate-update-request.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/audittemplate-update-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/datamodel-list-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/goal-list-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/goal-show-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/scoring_engine-list-detailed-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/scoring_engine-list-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/scoring_engine-show-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/service-list-detailed-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/service-list-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/service-show-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/strategy-list-detailed-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/strategy-list-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/strategy-show-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/samples/strategy-state-response.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/watcher-api-v1-actionplans.inc +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/watcher-api-v1-actions.inc +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/watcher-api-v1-audits.inc +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/watcher-api-v1-audittemplates.inc +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/watcher-api-v1-datamodel.inc +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/watcher-api-v1-goals.inc +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/watcher-api-v1-scoring_engines.inc +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/watcher-api-v1-services.inc +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/watcher-api-v1-strategies.inc +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/watcher-api-v1-webhooks.inc +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/api-ref/source/watcher-api-versions.inc +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/bindep.txt +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/devstack/lib/watcher +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/devstack/local.conf.compute +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/devstack/local.conf.controller +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/devstack/local_gnocchi.conf.compute +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/devstack/local_gnocchi.conf.controller +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/devstack/override-defaults +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/devstack/plugin.sh +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/devstack/prometheus.yml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/devstack/settings +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/devstack/upgrade/from_rocky/upgrade-watcher +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/devstack/upgrade/resources.sh +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/devstack/upgrade/settings +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/devstack/upgrade/shutdown.sh +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/devstack/upgrade/upgrade.sh +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/dictionary.txt +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/ext/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/ext/term.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/ext/versioned_notifications.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/action-cancel-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/action-cancel-error.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/action-cancel-start.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/action-create.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/action-delete.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/action-execution-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/action-execution-error.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/action-execution-start.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/action-update.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/action_plan-cancel-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/action_plan-cancel-error.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/action_plan-cancel-start.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/action_plan-create.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/action_plan-delete.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/action_plan-execution-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/action_plan-execution-error.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/action_plan-execution-start.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/action_plan-update.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/audit-create.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/audit-delete.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/audit-planner-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/audit-planner-error.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/audit-planner-start.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/audit-strategy-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/audit-strategy-error.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/audit-strategy-start.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/audit-update.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/infra-optim-exception.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/notification_samples/service-update.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/requirements.txt +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/_static/.placeholder +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/admin/apache-mod-wsgi.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/admin/gmr.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/admin/index.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/admin/policy.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/architecture.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/conf.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/configuration/configuring.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/configuration/index.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/configuration/watcher.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/contributor/api_microversion_history.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/contributor/concurrency.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/contributor/contributing.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/contributor/devstack.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/contributor/environment.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/contributor/index.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/contributor/notifications.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/contributor/plugin/action-plugin.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/contributor/plugin/base-setup.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/contributor/plugin/cdmc-plugin.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/contributor/plugin/goal-plugin.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/contributor/plugin/index.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/contributor/plugin/planner-plugin.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/contributor/plugin/plugins.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/contributor/plugin/scoring-engine-plugin.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/contributor/plugin/strategy-plugin.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/contributor/rally_link.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/contributor/release-guide.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/contributor/testing.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/datasources/aetos.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/datasources/grafana.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/datasources/index.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/datasources/prometheus.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/glossary.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/image_src/dia/architecture.dia +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/image_src/dia/functional_data_model.dia +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/image_src/plantuml/README.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/image_src/plantuml/action_plan_state_machine.txt +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/image_src/plantuml/action_state_machine.txt +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/image_src/plantuml/audit_state_machine.txt +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/image_src/plantuml/sequence_architecture_cdmc_sync.txt +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/image_src/plantuml/sequence_create_and_launch_audit.txt +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/image_src/plantuml/sequence_create_audit_template.txt +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/image_src/plantuml/sequence_from_audit_execution_to_actionplan_creation.txt +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/image_src/plantuml/sequence_launch_action_plan.txt +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/image_src/plantuml/sequence_launch_action_plan_in_applier.txt +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/image_src/plantuml/sequence_overview_watcher_usage.txt +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/image_src/plantuml/sequence_trigger_audit_in_decision_engine.txt +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/image_src/plantuml/watcher_db_schema_diagram.txt +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/images/action_plan_state_machine.png +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/images/action_state_machine.png +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/images/architecture.svg +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/images/audit_state_machine.png +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/images/functional_data_model.svg +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/images/sequence_architecture_cdmc_sync.png +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/images/sequence_create_and_launch_audit.png +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/images/sequence_create_audit_template.png +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/images/sequence_from_audit_execution_to_actionplan_creation.png +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/images/sequence_launch_action_plan.png +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/images/sequence_launch_action_plan_in_applier.png +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/images/sequence_overview_watcher_usage.png +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/images/sequence_trigger_audit_in_decision_engine.png +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/images/watcher_db_schema_diagram.png +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/index.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/install/common_configure.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/install/common_prerequisites.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/install/get_started.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/install/index.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/install/install-rdo.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/install/install-ubuntu.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/install/install.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/install/next-steps.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/install/verify.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/integrations/index.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/man/footer.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/man/general-options.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/man/index.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/man/watcher-api.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/man/watcher-applier.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/man/watcher-db-manage.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/man/watcher-decision-engine.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/man/watcher-status.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/strategies/actuation.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/strategies/basic-server-consolidation.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/strategies/host_maintenance.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/strategies/index.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/strategies/node_resource_consolidation.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/strategies/noisy_neighbor.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/strategies/outlet_temp_control.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/strategies/saving_energy.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/strategies/storage_capacity_balance.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/strategies/strategy-template.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/strategies/uniform_airflow.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/strategies/vm_workload_consolidation.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/strategies/workload-stabilization.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/strategies/workload_balance.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/strategies/zone_migration.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/user/event_type_audit.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/user/index.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/user/user-guide.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/doc/source/user/ways-to-install.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/etc/apache2/watcher +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/etc/watcher/README-watcher.conf.txt +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/etc/watcher/oslo-config-generator/watcher.conf +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/etc/watcher/oslo-policy-generator/watcher-policy-generator.conf +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/playbooks/generate_prometheus_config.yml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/playbooks/templates/prometheus.yml.j2 +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/pyproject.toml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/python_watcher.egg-info/dependency_links.txt +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/python_watcher.egg-info/entry_points.txt +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/python_watcher.egg-info/not-zip-safe +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/python_watcher.egg-info/requires.txt +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/python_watcher.egg-info/top_level.txt +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/rally-jobs/README.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/rally-jobs/watcher-watcher.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/.placeholder +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/2025.1-prelude-8be97eece4e1d1ff.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/2025.2-prelude-a9f4c7b2e8d15692.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/action-plan-cancel-c54726378019e096.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/action-plan-versioned-notifications-api-e8ca4f5d37aa5b4b.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/action-versioned-notifications-api-ff94fc0f401292d0.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/add-baremetal-scoper-9ef23f5fb8f0be6a.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/add-fail-options-to-nop-f44f506dc732f2a1.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/add-force-field-to-audit-4bcaeedfe27233ad.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/add-ha-support-b9042255e5b76e42.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/add-instance-metrics-to-prometheus-datasource-9fba8c174ff845e1.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/add-name-for-audit-0df1f39f00736f06.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/add-plugins-parameters-376eb6b0b8978b44.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/add-power-on-off-a77673d482568a8b.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/add-retries-nova-calls-32455b6fbf7523f1.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/add-scoring-module-fa00d013ed2d614e.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/add-start-end-time-for-continuous-audit-52c45052cb06d153.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/add-upgrade-check-framework-5bb9693c8a78931c.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/add-wsgi-module-support-597f479e31979270.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/aetos-datasource-60e50a2338c64c08.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/api-call-retry-fef741ac684c58dd.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/api-microversioning-7999a3ee8073bf32.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/audit-scoper-for-storage-data-model-cdccc803542d22db.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/audit-tag-vm-metadata-47a3e4468748853c.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/audit-versioned-notifications-api-bca7738e16954bad.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/automatic-triggering-audit-8a9b0540d547db60.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/background-jobs-ha-9d3cf3fe356f4705.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/blueprint-add-skip-actions-4a5a997dc1133f13.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/bp-audit-scope-exclude-project-511a7720aac00dff.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/bp-extend-compute-model-attributes-b56bc093e8637bb4.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/bug-2098984-zone-migration-instance-not-found-b9ce947dd3e7e020.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/bug-2103451-fixes-prometheus-queries-with-multiple-target-0e65d20711d1abe2.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/bug-2109494-e5bf401767fa6cd6.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/bug-2109722-cb205216d0c1a836.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/bug-2110947.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/bug-2112100-c1e56173cd29a35e.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/bug-2112187-763bae283e0b736d.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/bug-2113776-4bd314fb46623fbc.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/bug-2117726-fix-model-list-api-ref-30cc7ed1c85c0d0e.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/bug-2120586-fix-nova-microversion-check-9022a378b75d046f.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/bug-2121601-allow-status-message-updates-in-skipped-state-a8b4c5d7e9f2g3h1.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/bug-2131663-b486d36f77d13a5d.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/bug-2138857-e3505aa4a20a7831.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/build-baremetal-data-model-in-watcher-3023453a47b61dab.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/cdm-scoping-8d9c307bad46bfa1.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/centralise-config-opts-95670987dfbdb0e7.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/change-ram-util-metric-4a3e6984b9dd968d.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/check-strategy-requirements-66f9e9262412f8ec.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/cinder-model-integration-baa394a72a0a33bf.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/cluster-model-objects-wrapper-9c799ea262c56a5b.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/compute-cdm-include-all-instances-f7506ded2d57732f.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/configurable-weights-default-planner-3746b33160bc7347.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/consume-nova-versioned-notifications-f98361b37e546b4d.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/continuously-optimization-35364f4d2c0b81fc.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/cron-based-continuous-audits-c3eedf28d9752b37.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/datasource-query-retry-00cba5f7e68aec39.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/db-migration-e1a705a8b54ccdd2.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/decision-engine-threading-mode-26fc8066dcd499a2.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/define-the-audit-scope-e89edc5051dcf3f2.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/deprecate-ceilometer-datasource-446b0be70fbce28b.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/deprecate-json-formatted-policy-file-3a92379e9f5dd203.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/deprecate-monasca-ds-9065f4d4bee09ab2.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/deprecate-noisy-neighbor-strat-7da910837ae8fa80.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/donot-run-host-migration-strategy-on-disabled-hosts-24084a22d4c8f914.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/drop-operation-not-permitted-exception-14e49b35a3ca00d1.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/drop-patch-delete-post-action-api-37fe4ce5be6500db.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/drop-py-2-7-54f8e806d71f19a7.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/drop-py39-8a9c99678b3e8eeb.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/drop-python-dateutil-dependency-2118404-f5a8b2c1e9d4a6b3.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/drop-python38-support-eeb19a0bc0160sw1.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/dynamic-action-description-0e947b9e7ef2a134.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/efficacy-indicator-95380ad7b84e3be2.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/enhance-watcher-applier-engine-86c676ce8f179e68.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/event-driven-optimization-based-4870f112bef8a560.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/experimental-integrations-490d4cc32444288d.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/file-based-metric-map-c2af62b5067895df.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/fix-action-plan-state-on-failure-69e498d902ada5c5.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/formal-datasource-interface-implementation-222769d55a127d33.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/general-purpose-decision-engine-threadpool-0711b23abfc9d409.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/get-goal-from-strategy-396c9b13a38bb650.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/global-datasource-preference-3ab47b4be09ff3a5.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/gnocchi-watcher-43c25d391fbd3e9c.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/grafana-datasource-b672367c23ffa0c6.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/graph-based-cluster-model-523937a6f5e66537.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/host-maintenance-strategy-41f640927948fb56.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/host-maintenance-strategy-disable-migration-options-a2b72e32736e5446.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/improve-compute-data-model-b427c85e4ed2b6fb.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/jsonschema-validation-79cab05d5295da00.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/make-monasca-client-optional-7e1a96b2ac902867.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/min-required-nova-train-71f124192d88ae52.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/monasca-support-0b0486b8572ac38b.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/multiple-global-efficacy-indicator-fc11c4844a12a7d5.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/node-resource-consolidation-73bc0c0abfeb0b03.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/noisy-neighbor-strategy-a71342740b59dddc.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/notifications-actionplan-cancel-edb2a4a12543e2d0.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/optimization-threshold-21ad38f0470d0e1a.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/persistent-audit-parameters-ae41dd7252ba9672.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/planner-storage-action-plan-26ef37893c5e8648.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/prometheus-datasource-e56f2f7b8f3427c2.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/query-interval-not-query-timeout-ecb6f2c6b1a647e9.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/remove-ceilometer-datasource-8d9ab7d64d61e405.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/remove-nova-legacy-notifications-e1b6d10eff58f30a.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/replace-cold-migrate-to-use-nova-migration-api-cecd9a39ddd3bc58.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/resize-timeout-0f6ede6ec9b644b7.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/return-error-400-on-bad-parameters-bb964e4f5cadc15c.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/scope-for-data-model-ea9792f90db14343.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/service-versioned-notifications-api-70367b79a565d900.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/show-datamodel-api-6945b744fd5d25d5.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/stale-action-plan-b6a6b08df873c128.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/standard-deviation-strategy-cd1d0c443fdfde9c.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/storage-workload-balance-0ecabbc1791e6894.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/storage_model_enabled_default-48c197f5a540956c.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/support-keystoneclient-option-b30d1ff45f86a2e7.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/support-placement-api-58ce6bef1bbbe98a.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/suspended-audit-state-07f998c94e9d9a47.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/uniform-airflow-strategy-68cdba1419c3f770.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/update-notification-topics-daf6303a63963ee9.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/uwsgi-support-8dcea6961e56dad0.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/volume-migrate-action-fc57b0ce0e4c39ae.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/watcher-notifications-ovo-7b44d52ef6400dd0.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/watcher-planner-selector-84d77549d46f362a.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/watcher-policies-1e86a30f0f11c6fa.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/watcher-service-list-7b2f4b64f71e9b89.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/watcher-versioned-objects-fc5abf5c81c4590c.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/wokload-stablization-strategy-name-9988e554ac2655a2.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/workload-balance-base-on-cpu-or-ram-util-3ff4ee968c32b2ed.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/workload-balance-migration-strategy-a0b05148a57815c0.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/zone-migration-missing-dst-node-bd0377af1f1ed245.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/zone-migration-strategy-10f7656a2a01e607.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/zone-migration-with-attached-volume-without-compute-nodes-ec4b1329e2b58279.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/zone_migrate_src_type-642186730a4f354e.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/notes/zone_migration_schema_change-92a9ec8631870c84.yaml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/2023.1.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/2023.2.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/2024.1.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/2024.2.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/2025.1.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/_static/.placeholder +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/conf.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/index.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/locale/fr/LC_MESSAGES/releasenotes.po +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/newton.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/ocata.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/pike.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/queens.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/rocky.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/stein.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/train.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/unreleased.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/ussuri.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/victoria.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/wallaby.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/xena.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/yoga.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/releasenotes/source/zed.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/requirements.txt +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/setup.cfg +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/setup.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/test-requirements.txt +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/tools/test-setup.sh +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/tox.ini +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/_i18n.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/acl.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/app.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/app.wsgi +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/config.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/controllers/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/controllers/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/controllers/link.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/controllers/rest_api_version_history.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/controllers/root.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/controllers/v1/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/controllers/v1/action.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/controllers/v1/action_plan.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/controllers/v1/audit.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/controllers/v1/audit_template.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/controllers/v1/collection.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/controllers/v1/data_model.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/controllers/v1/efficacy_indicator.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/controllers/v1/goal.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/controllers/v1/scoring_engine.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/controllers/v1/service.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/controllers/v1/strategy.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/controllers/v1/types.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/controllers/v1/utils.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/controllers/v1/versions.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/controllers/v1/webhooks.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/hooks.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/middleware/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/middleware/auth_token.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/middleware/parsable_error.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/scheduling.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/api/wsgi.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/action_plan/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/action_plan/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/action_plan/default.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/actions/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/actions/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/actions/change_node_power_state.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/actions/change_nova_service_state.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/actions/factory.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/actions/migration.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/actions/nop.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/actions/resize.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/actions/sleep.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/actions/stop.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/actions/volume_migration.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/default.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/loading/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/loading/default.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/manager.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/messaging/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/messaging/trigger.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/rpcapi.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/sync.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/workflow_engine/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/workflow_engine/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/applier/workflow_engine/default.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/cmd/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/cmd/dbmanage.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/cmd/eventlet/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/cmd/eventlet/api.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/cmd/eventlet/applier.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/cmd/eventlet/decisionengine.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/cmd/status.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/cmd/sync.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/clients.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/config.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/context.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/exception.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/executor.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/ironic_helper.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/keystone_helper.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/loader/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/loader/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/loader/default.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/loader/loadable.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/metal_helper/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/metal_helper/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/metal_helper/constants.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/metal_helper/factory.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/metal_helper/ironic.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/metal_helper/maas.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/nova_helper.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/oslo_service_helper.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/paths.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/placement_helper.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/policies/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/policies/action.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/policies/action_plan.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/policies/audit.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/policies/audit_template.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/policies/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/policies/data_model.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/policies/goal.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/policies/scoring_engine.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/policies/service.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/policies/strategy.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/policy.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/rpc.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/scheduling.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/service_manager.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/common/utils.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/aetos_client.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/api.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/applier.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/cinder_client.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/clients_auth.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/collector.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/datasources.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/db.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/decision_engine.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/exception.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/glance_client.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/gnocchi_client.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/grafana_translators.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/ironic_client.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/keystone_client.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/models.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/monasca_client.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/neutron_client.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/nova.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/nova_client.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/opts.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/paths.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/placement_client.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/planner.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/plugins.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/prometheus_client.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/conf/service.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/api.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/migration.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/purge.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/sqlalchemy/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/sqlalchemy/alembic/README.rst +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/sqlalchemy/alembic/env.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/sqlalchemy/alembic/script.py.mako +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/sqlalchemy/alembic/versions/001_ocata.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/sqlalchemy/alembic/versions/0f6042416884_add_apscheduler_jobs.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/sqlalchemy/alembic/versions/15f7375ca737_change_efficiacy_indicator_decimals.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/sqlalchemy/alembic/versions/3cfc94cecf4e_add_name_for_audit.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/sqlalchemy/alembic/versions/4b16194c56bc_add_start_end_time.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/sqlalchemy/alembic/versions/52804f2498c4_add_hostname.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/sqlalchemy/alembic/versions/609bec748f2a_add_force_field.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/sqlalchemy/alembic/versions/7150a7d8f228_add_status_message_to_actionplan.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/sqlalchemy/alembic/versions/a86240e89a29_.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/sqlalchemy/alembic/versions/d098df6021e2_cron_support_for_audit.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/sqlalchemy/alembic/versions/d09a5945e4a0_add_action_description_table.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/sqlalchemy/alembic.ini +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/sqlalchemy/api.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/sqlalchemy/job_store.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/sqlalchemy/migration.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/db/sqlalchemy/models.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/audit/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/audit/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/audit/continuous.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/audit/event.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/audit/oneshot.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/datasources/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/datasources/aetos.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/datasources/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/datasources/gnocchi.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/datasources/grafana.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/datasources/grafana_translator/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/datasources/grafana_translator/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/datasources/grafana_translator/influxdb.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/datasources/manager.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/datasources/monasca.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/datasources/prometheus.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/datasources/prometheus_base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/gmr.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/goal/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/goal/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/goal/efficacy/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/goal/efficacy/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/goal/efficacy/indicators.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/goal/efficacy/specs.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/goal/goals.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/loading/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/loading/default.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/manager.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/messaging/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/messaging/audit_endpoint.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/messaging/data_model_endpoint.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/collector/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/collector/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/collector/cinder.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/collector/ironic.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/collector/manager.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/collector/nova.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/element/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/element/baremetal_resource.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/element/compute_resource.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/element/instance.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/element/node.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/element/storage_resource.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/element/volume.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/notification/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/notification/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/notification/cinder.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/notification/filtering.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/notification/nova.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/planner/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/planner/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/planner/manager.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/planner/node_resource_consolidation.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/planner/weight.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/planner/workload_stabilization.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/rpcapi.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/scheduling.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/scope/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/scope/baremetal.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/scope/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/scope/compute.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/scope/storage.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/scoring/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/scoring/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/scoring/dummy_scorer.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/scoring/dummy_scoring_container.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/scoring/scoring_factory.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/service.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/solution/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/solution/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/solution/default.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/solution/efficacy.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/solution/solution_comparator.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/solution/solution_evaluator.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/common/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/common/level.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/context/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/context/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/context/default.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/selection/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/selection/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/selection/default.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/strategies/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/strategies/actuation.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/strategies/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/strategies/basic_consolidation.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/strategies/dummy_strategy.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/strategies/dummy_with_resize.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/strategies/dummy_with_scorer.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/strategies/host_maintenance.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/strategies/node_resource_consolidation.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/strategies/noisy_neighbor.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/strategies/outlet_temp_control.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/strategies/saving_energy.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/strategies/storage_capacity_balance.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/strategies/uniform_airflow.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/strategies/vm_workload_consolidation.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/strategies/workload_balance.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/strategy/strategies/workload_stabilization.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/sync.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/threading.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/eventlet.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/hacking/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/hacking/checks.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/locale/de/LC_MESSAGES/watcher.po +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/locale/en_GB/LC_MESSAGES/watcher.po +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/notifications/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/notifications/action.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/notifications/action_plan.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/notifications/audit.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/notifications/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/notifications/exception.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/notifications/goal.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/notifications/service.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/notifications/strategy.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/objects/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/objects/action.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/objects/action_description.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/objects/action_plan.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/objects/audit.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/objects/audit_template.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/objects/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/objects/efficacy_indicator.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/objects/fields.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/objects/goal.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/objects/scoring_engine.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/objects/service.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/objects/strategy.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/test_base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/test_config.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/test_hooks.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/test_root.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/test_scheduling.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/test_utils.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/utils.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/v1/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/v1/test_actions.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/v1/test_actions_plans.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/v1/test_audit_templates.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/v1/test_data_model.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/v1/test_goals.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/v1/test_microversions.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/v1/test_root.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/v1/test_scoring_engines.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/v1/test_services.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/v1/test_strategies.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/v1/test_types.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/v1/test_utils.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/api/v1/test_webhooks.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/action_plan/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/action_plan/test_default_action_handler.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/actions/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/actions/loading/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/actions/loading/test_default_actions_loader.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/actions/test_change_node_power_state.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/actions/test_change_nova_service_state.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/actions/test_migration.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/actions/test_resize.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/actions/test_sleep.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/actions/test_stop.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/actions/test_volume_migration.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/messaging/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/messaging/test_trigger_action_plan_endpoint.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/test_applier_manager.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/test_rpcapi.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/test_sync.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/workflow_engine/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/workflow_engine/loading/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/workflow_engine/loading/test_default_engine_loader.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/workflow_engine/test_default_workflow_engine.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/applier/workflow_engine/test_taskflow_action_container.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/cmd/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/cmd/test_api.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/cmd/test_applier.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/cmd/test_db_manage.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/cmd/test_decision_engine.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/cmd/test_status.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/common/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/common/loader/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/common/loader/test_loader.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/common/metal_helper/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/common/metal_helper/test_base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/common/metal_helper/test_factory.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/common/metal_helper/test_ironic.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/common/metal_helper/test_maas.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/common/test_clients.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/common/test_executor.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/common/test_ironic_helper.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/common/test_keystone_helper.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/common/test_nova_helper.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/common/test_oslo_service_helper.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/common/test_placement_helper.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/common/test_scheduling.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/common/test_utils.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/conf/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/conf/test_list_opts.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/conf_fixture.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/config.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/db/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/db/base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/db/test_action.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/db/test_action_description.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/db/test_action_plan.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/db/test_audit.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/db/test_audit_template.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/db/test_efficacy_indicator.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/db/test_goal.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/db/test_migrations.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/db/test_purge.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/db/test_scoring_engine.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/db/test_service.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/db/test_strategy.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/db/utils.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/audit/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/audit/test_audit_handlers.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/cluster/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/cluster/test_cinder_cdmc.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/cluster/test_cluster_data_model_collector.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/cluster/test_nova_cdmc.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/datasources/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/datasources/grafana_translators/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/datasources/grafana_translators/test_base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/datasources/grafana_translators/test_influxdb.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/datasources/test_aetos_helper.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/datasources/test_base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/datasources/test_gnocchi_helper.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/datasources/test_grafana_helper.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/datasources/test_manager.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/datasources/test_monasca_helper.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/datasources/test_prometheus_base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/datasources/test_prometheus_helper.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/event_consumer/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/fake_goals.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/fake_metal_helper.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/fake_strategies.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/loading/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/loading/test_collector_loader.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/loading/test_default_planner_loader.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/loading/test_default_strategy_loader.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/loading/test_goal_loader.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/messaging/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/messaging/test_audit_endpoint.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/messaging/test_data_model_endpoint.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/data/ironic_scenario_1.xml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/data/scenario_1.xml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/data/scenario_10.xml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/data/scenario_11_with_1_node_no_instance.xml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/data/scenario_11_with_2_nodes_2_instances.xml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/data/scenario_1_with_1_node_unavailable.xml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/data/scenario_1_with_all_instances_exclude.xml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/data/scenario_1_with_all_nodes_disable.xml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/data/scenario_1_with_metrics.xml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/data/scenario_2_with_metrics.xml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/data/scenario_3_with_2_nodes.xml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/data/scenario_3_with_metrics.xml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/data/scenario_4_with_1_node_no_instance.xml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/data/scenario_5_with_instance_disk_0.xml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/data/scenario_6_with_2_nodes.xml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/data/scenario_7_with_2_nodes.xml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/data/scenario_8_with_4_nodes.xml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/data/scenario_9_with_3_active_plus_1_disabled_nodes.xml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/data/storage_scenario_1.xml +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/faker_cluster_and_metrics.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/faker_cluster_state.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/gnocchi_metrics.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/monasca_metrics.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/capacity.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-create-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-delete-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-live_migration_force_complete-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-live_migration_post_dest-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-lock.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-pause-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-power_off-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-power_on-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-rebuild-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-rescue-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-resize_confirm-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-restore-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-resume-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-shelve-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-shutdown-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-soft_delete-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-suspend-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-unlock.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-unpause-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-unrescue-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-unshelve-end.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-update-2-1.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/instance-update.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/scenario3_instance-update.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/scenario3_notfound_instance-update.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/scenario3_notfound_legacy_instance-update.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/scenario3_service-update-disabled.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/scenario3_service-update-enabled.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/scenario_1_bootable-volume-create.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/scenario_1_capacity.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/scenario_1_capacity_node_notfound.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/scenario_1_capacity_pool_notfound.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/scenario_1_error-volume-create.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/scenario_1_volume-attach.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/scenario_1_volume-create.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/scenario_1_volume-create_pool_notfound.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/scenario_1_volume-delete.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/scenario_1_volume-detach.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/scenario_1_volume-resize.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/scenario_1_volume-update.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/service-create.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/service-delete.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/data/service-update.json +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/fake_managers.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/test_cinder_notifications.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/test_notifications.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/notification/test_nova_notifications.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/model/test_element.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/planner/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/planner/test_node_resource_consolidation.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/planner/test_planner_manager.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/planner/test_weight_planner.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/planner/test_workload_stabilization_planner.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/scope/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/scope/fake_scopes.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/scope/test_baremetal.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/scope/test_compute.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/scope/test_storage.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/scoring/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/scoring/test_dummy_scorer.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/scoring/test_dummy_scoring_container.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/scoring/test_scoring_factory.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/solution/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/solution/test_default_solution.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/context/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/context/test_strategy_context.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/selector/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/selector/test_strategy_selector.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/strategies/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/strategies/test_actuator.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/strategies/test_base.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/strategies/test_basic_consolidation.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/strategies/test_dummy_strategy.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/strategies/test_dummy_with_scorer.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/strategies/test_host_maintenance.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/strategies/test_node_resource_consolidation.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/strategies/test_noisy_neighbor.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/strategies/test_outlet_temp_control.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/strategies/test_saving_energy.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/strategies/test_storage_capacity_balance.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/strategies/test_strategy_endpoint.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/strategies/test_uniform_airflow.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/strategies/test_vm_workload_consolidation.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/strategies/test_workload_balance.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/strategy/strategies/test_workload_stabilization.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/test_gmr.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/test_rpcapi.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/test_scheduling.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/test_service.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/decision_engine/test_sync.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/fake_policy.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/fakes.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/fixtures/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/fixtures/watcher.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/notifications/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/notifications/test_action_notification.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/notifications/test_action_plan_notification.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/notifications/test_audit_notification.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/notifications/test_notification.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/notifications/test_service_notifications.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/objects/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/objects/test_action.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/objects/test_action_description.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/objects/test_action_plan.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/objects/test_audit.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/objects/test_audit_template.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/objects/test_efficacy_indicator.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/objects/test_goal.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/objects/test_objects.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/objects/test_scoring_engine.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/objects/test_service.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/objects/test_strategy.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/objects/utils.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/policy_fixture.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/tests/test_threading.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/version.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/wsgi/__init__.py +0 -0
- {python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/wsgi/api.py +0 -0
|
@@ -147,6 +147,9 @@
|
|
|
147
147
|
block_migration_for_live_migration: true
|
|
148
148
|
optimize:
|
|
149
149
|
run_extended_attributes_tests: true
|
|
150
|
+
run_continuous_audit_tests: true
|
|
151
|
+
run_zone_migration_extra_tests: true
|
|
152
|
+
run_zone_migration_storage_tests: true
|
|
150
153
|
# tempest variables
|
|
151
154
|
tempest_test_regex: watcher_tempest_plugin.tests\.(api|scenario)
|
|
152
155
|
# excluding tests with tag "real_load"
|
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
CHANGES
|
|
2
2
|
=======
|
|
3
3
|
|
|
4
|
+
15.1.1
|
|
5
|
+
------
|
|
6
|
+
|
|
7
|
+
* Avoid logging messaging transport URLs
|
|
8
|
+
* Enable extra zone migration tests on master branch
|
|
9
|
+
* Handle missing fields building storage model XML or list
|
|
10
|
+
* Test zone migration audit without destination
|
|
11
|
+
* Ensure zone migration creates the correct action
|
|
12
|
+
* Add test for zone migration audit without dst\_type
|
|
13
|
+
* Fix zone migration dst pool and type selection
|
|
14
|
+
* Add tests for get\_dst\_pool\_and\_type method
|
|
15
|
+
* Fix small issues in cinder\_helper unit test
|
|
16
|
+
* Fix check for volume type in cinder helper migrate
|
|
17
|
+
|
|
4
18
|
15.1.0
|
|
5
19
|
------
|
|
6
20
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-watcher
|
|
3
|
-
Version: 15.1.
|
|
3
|
+
Version: 15.1.1
|
|
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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-watcher
|
|
3
|
-
Version: 15.1.
|
|
3
|
+
Version: 15.1.1
|
|
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
|
|
@@ -245,6 +245,7 @@ rally-jobs/watcher-watcher.yaml
|
|
|
245
245
|
releasenotes/notes/.placeholder
|
|
246
246
|
releasenotes/notes/2025.1-prelude-8be97eece4e1d1ff.yaml
|
|
247
247
|
releasenotes/notes/2025.2-prelude-a9f4c7b2e8d15692.yaml
|
|
248
|
+
releasenotes/notes/960265-optional-pool-fields-storage-xml-26701a4ce5e54f2b.yaml
|
|
248
249
|
releasenotes/notes/action-plan-cancel-c54726378019e096.yaml
|
|
249
250
|
releasenotes/notes/action-plan-versioned-notifications-api-e8ca4f5d37aa5b4b.yaml
|
|
250
251
|
releasenotes/notes/action-versioned-notifications-api-ff94fc0f401292d0.yaml
|
|
@@ -268,6 +269,7 @@ releasenotes/notes/audit-scoper-for-storage-data-model-cdccc803542d22db.yaml
|
|
|
268
269
|
releasenotes/notes/audit-tag-vm-metadata-47a3e4468748853c.yaml
|
|
269
270
|
releasenotes/notes/audit-versioned-notifications-api-bca7738e16954bad.yaml
|
|
270
271
|
releasenotes/notes/automatic-triggering-audit-8a9b0540d547db60.yaml
|
|
272
|
+
releasenotes/notes/avoid-transport-url-in-debug-logs.yaml
|
|
271
273
|
releasenotes/notes/background-jobs-ha-9d3cf3fe356f4705.yaml
|
|
272
274
|
releasenotes/notes/blueprint-add-skip-actions-4a5a997dc1133f13.yaml
|
|
273
275
|
releasenotes/notes/bp-audit-scope-exclude-project-511a7720aac00dff.yaml
|
|
@@ -283,6 +285,7 @@ releasenotes/notes/bug-2113776-4bd314fb46623fbc.yaml
|
|
|
283
285
|
releasenotes/notes/bug-2117726-fix-model-list-api-ref-30cc7ed1c85c0d0e.yaml
|
|
284
286
|
releasenotes/notes/bug-2120586-fix-nova-microversion-check-9022a378b75d046f.yaml
|
|
285
287
|
releasenotes/notes/bug-2121601-allow-status-message-updates-in-skipped-state-a8b4c5d7e9f2g3h1.yaml
|
|
288
|
+
releasenotes/notes/bug-2129692-a1f941b8fa5a71be.yaml
|
|
286
289
|
releasenotes/notes/bug-2131663-b486d36f77d13a5d.yaml
|
|
287
290
|
releasenotes/notes/bug-2138857-e3505aa4a20a7831.yaml
|
|
288
291
|
releasenotes/notes/build-baremetal-data-model-in-watcher-3023453a47b61dab.yaml
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"git_version": "8e27e90a", "is_release": true}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
fixes:
|
|
3
|
+
- |
|
|
4
|
+
Fixed the errors showing in the decision engine logs when generating the
|
|
5
|
+
xml representation of the storage model when using some storage backends
|
|
6
|
+
other than lvms (like ceph or nfs). Those drivers do not report pool
|
|
7
|
+
fields like total_volumes or free_capacity_gb that the lvm driver does,
|
|
8
|
+
so assuming those fields are always reported by the cinder api calls is
|
|
9
|
+
wrong.
|
|
10
|
+
|
|
11
|
+
See: https://bugs.launchpad.net/watcher/+bug/2121147 for more details.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
security:
|
|
3
|
+
- |
|
|
4
|
+
Hardened service debug logging so service start and stop messages no
|
|
5
|
+
longer include the configured messaging transport URL. This avoids writing
|
|
6
|
+
credentials embedded in the transport URL to service logs when debug
|
|
7
|
+
logging is enabled. This is a security hardening enhancement and not a
|
|
8
|
+
security vulnerability fix.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
fixes:
|
|
3
|
+
- |
|
|
4
|
+
Fixed zone migration strategy destination pool and type selection.
|
|
5
|
+
Previously, the get_dst_pool_and_type method was always selecting the
|
|
6
|
+
first matching storage pool based only on src_pool, ignoring the
|
|
7
|
+
src_type parameter. This caused incorrect volume migrations when
|
|
8
|
+
users supplied multiple values for storage_pools with the same
|
|
9
|
+
source pool but different source types.
|
|
10
|
+
|
|
11
|
+
The method now implements a two-pass matching approach:
|
|
12
|
+
first attempting to match both src_pool and src_type for exact matches,
|
|
13
|
+
then falling back to matching just src_pool if no exact match is found.
|
|
14
|
+
|
|
15
|
+
For more info see: https://bugs.launchpad.net/watcher/+bug/2129692
|
|
@@ -94,18 +94,6 @@ class CinderHelper(object):
|
|
|
94
94
|
except cinder_exception.NotFound:
|
|
95
95
|
return self.cinder.volumes.find(name=volume)
|
|
96
96
|
|
|
97
|
-
def backendname_from_poolname(self, poolname):
|
|
98
|
-
"""Get backendname from poolname"""
|
|
99
|
-
# pooolname formatted as host@backend#pool since ocata
|
|
100
|
-
# as of ocata, may as only host
|
|
101
|
-
backend = poolname.split('#')[0]
|
|
102
|
-
backendname = ""
|
|
103
|
-
try:
|
|
104
|
-
backendname = backend.split('@')[1]
|
|
105
|
-
except IndexError:
|
|
106
|
-
pass
|
|
107
|
-
return backendname
|
|
108
|
-
|
|
109
97
|
def _has_snapshot(self, volume):
|
|
110
98
|
"""Judge volume has a snapshot"""
|
|
111
99
|
volume = self.get_volume(volume)
|
|
@@ -132,6 +120,51 @@ class CinderHelper(object):
|
|
|
132
120
|
else:
|
|
133
121
|
return True
|
|
134
122
|
|
|
123
|
+
def _check_backend_matches_type(self, pool, volume_type):
|
|
124
|
+
"""Check if a storage pool matches volume type requirements.
|
|
125
|
+
|
|
126
|
+
Verifies that all extra_specs properties defined in the volume
|
|
127
|
+
type are present in the pool's capabilities with matching values.
|
|
128
|
+
|
|
129
|
+
:param pool: Storage pool dictionary with capabilities
|
|
130
|
+
:param volume_type: Volume type object with extra_specs
|
|
131
|
+
:returns: True if pool matches all volume type requirements,
|
|
132
|
+
False otherwise
|
|
133
|
+
"""
|
|
134
|
+
for field_name, field_value in volume_type.extra_specs.items():
|
|
135
|
+
pool_value = pool.get("capabilities", {}).get(field_name)
|
|
136
|
+
if pool_value is not None and field_value != pool_value:
|
|
137
|
+
# the property associated with the volume type is
|
|
138
|
+
# not defined in the pool, so the type can't be used in the
|
|
139
|
+
# pool
|
|
140
|
+
LOG.debug(
|
|
141
|
+
f"property {field_name} with value {field_value} "
|
|
142
|
+
f"does not match value {pool_value} from pool "
|
|
143
|
+
f"{pool['name']}"
|
|
144
|
+
)
|
|
145
|
+
return False
|
|
146
|
+
return True
|
|
147
|
+
|
|
148
|
+
def get_volume_types_for_pool(self, pool):
|
|
149
|
+
"""Return a list of volume types that can be associated with a pool.
|
|
150
|
+
|
|
151
|
+
:param pool: Storage pool dictionary with capabilities
|
|
152
|
+
:returns: List of volume types than can be scheduled in the input pool
|
|
153
|
+
"""
|
|
154
|
+
volume_type_list = self.get_volume_type_list()
|
|
155
|
+
|
|
156
|
+
pool_volume_types = []
|
|
157
|
+
for volume_type in volume_type_list:
|
|
158
|
+
if not volume_type.extra_specs:
|
|
159
|
+
# if there are no properties associated with the volume type
|
|
160
|
+
# it can be used in any pool
|
|
161
|
+
pool_volume_types.append(volume_type.name)
|
|
162
|
+
continue
|
|
163
|
+
if self._check_backend_matches_type(pool, volume_type):
|
|
164
|
+
pool_volume_types.append(volume_type.name)
|
|
165
|
+
|
|
166
|
+
return pool_volume_types
|
|
167
|
+
|
|
135
168
|
def check_volume_deleted(self, volume, retry=120, retry_interval=10):
|
|
136
169
|
"""Check volume has been deleted"""
|
|
137
170
|
volume = self.get_volume(volume)
|
|
@@ -224,11 +257,20 @@ class CinderHelper(object):
|
|
|
224
257
|
def migrate(self, volume, dest_node):
|
|
225
258
|
"""Migrate volume to dest_node"""
|
|
226
259
|
volume = self.get_volume(volume)
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
if volume.volume_type not in
|
|
260
|
+
pool_dict = self.get_storage_pool_by_name(dest_node).to_dict()
|
|
261
|
+
dest_types = self.get_volume_types_for_pool(pool_dict)
|
|
262
|
+
if volume.volume_type not in dest_types:
|
|
230
263
|
raise exception.Invalid(
|
|
231
|
-
message=(
|
|
264
|
+
message=(
|
|
265
|
+
_(
|
|
266
|
+
"Volume type '%(volume_type)s' is not compatible with "
|
|
267
|
+
"destination pool '%(pool_name)s'"
|
|
268
|
+
) % {
|
|
269
|
+
'volume_type': volume.volume_type,
|
|
270
|
+
'pool_name': dest_node
|
|
271
|
+
}
|
|
272
|
+
)
|
|
273
|
+
)
|
|
232
274
|
|
|
233
275
|
source_node = getattr(volume, 'os-vol-host-attr:host')
|
|
234
276
|
LOG.debug("Volume %(volume)s found on host '%(host)s'.",
|
|
@@ -241,7 +241,7 @@ class Service(service.ServiceBase):
|
|
|
241
241
|
)
|
|
242
242
|
|
|
243
243
|
def start(self):
|
|
244
|
-
LOG.debug("Connecting to
|
|
244
|
+
LOG.debug("Connecting to messaging transport")
|
|
245
245
|
if self.conductor_topic_handler:
|
|
246
246
|
self.conductor_topic_handler.start()
|
|
247
247
|
if self.notification_handler:
|
|
@@ -250,7 +250,7 @@ class Service(service.ServiceBase):
|
|
|
250
250
|
self.heartbeat.start()
|
|
251
251
|
|
|
252
252
|
def stop(self):
|
|
253
|
-
LOG.debug("Disconnecting from
|
|
253
|
+
LOG.debug("Disconnecting from messaging transport")
|
|
254
254
|
if self.conductor_topic_handler:
|
|
255
255
|
self.conductor_topic_handler.stop()
|
|
256
256
|
if self.notification_handler:
|
|
@@ -29,6 +29,7 @@ GRAFANA_CLIENT_OPTS = [
|
|
|
29
29
|
# A similar structure to the database_map would solve this.
|
|
30
30
|
cfg.StrOpt('token',
|
|
31
31
|
default=None,
|
|
32
|
+
secret=True,
|
|
32
33
|
help="Authentication token to gain access"),
|
|
33
34
|
# TODO(Dantali0n) each individual metric could have its own base url.
|
|
34
35
|
# A similar structure to the database_map would solve this.
|
{python_watcher-15.1.0 → python_watcher-15.1.1}/watcher/decision_engine/model/element/base.py
RENAMED
|
@@ -51,16 +51,19 @@ class Element(base.WatcherObject, base.WatcherObjectDictCompat,
|
|
|
51
51
|
|
|
52
52
|
def as_xml_element(self):
|
|
53
53
|
sorted_fieldmap = []
|
|
54
|
+
element_name = self.__class__.__name__
|
|
54
55
|
for field in self.fields:
|
|
55
56
|
try:
|
|
56
57
|
value = str(self[field])
|
|
57
58
|
sorted_fieldmap.append((field, value))
|
|
59
|
+
except NotImplementedError:
|
|
60
|
+
LOG.debug("Attribute %s for object %s: %s is not provided",
|
|
61
|
+
field, element_name, self)
|
|
58
62
|
except Exception as exc:
|
|
59
63
|
LOG.exception(exc)
|
|
60
64
|
|
|
61
65
|
attrib = collections.OrderedDict(sorted_fieldmap)
|
|
62
66
|
|
|
63
|
-
element_name = self.__class__.__name__
|
|
64
67
|
instance_el = etree.Element(element_name, attrib=attrib)
|
|
65
68
|
|
|
66
69
|
return instance_el
|
|
@@ -269,7 +269,14 @@ class ModelRoot(nx.DiGraph, base.Model):
|
|
|
269
269
|
in_dict = {}
|
|
270
270
|
for field in cn.fields:
|
|
271
271
|
new_name = "node_"+str(field)
|
|
272
|
-
|
|
272
|
+
try:
|
|
273
|
+
in_dict[new_name] = cn[field]
|
|
274
|
+
# NotImplementedError means field not assigned
|
|
275
|
+
# which is really not an issue as it can be an
|
|
276
|
+
# optional field
|
|
277
|
+
except NotImplementedError:
|
|
278
|
+
LOG.debug("Attribute %s for Compute: %s is not provided",
|
|
279
|
+
field, cn.hostname)
|
|
273
280
|
node_instances = self.get_node_instances(cn)
|
|
274
281
|
if not node_instances:
|
|
275
282
|
deep_in_dict = in_dict.copy()
|
|
@@ -278,7 +285,11 @@ class ModelRoot(nx.DiGraph, base.Model):
|
|
|
278
285
|
for instance in sorted(node_instances, key=lambda x: x.uuid):
|
|
279
286
|
for field in instance.fields:
|
|
280
287
|
new_name = "server_"+str(field)
|
|
281
|
-
|
|
288
|
+
try:
|
|
289
|
+
in_dict[new_name] = instance[field]
|
|
290
|
+
except NotImplementedError:
|
|
291
|
+
LOG.debug("Attribute %s for Instance: %s is not "
|
|
292
|
+
"provided", field, instance.uuid)
|
|
282
293
|
if in_dict != {}:
|
|
283
294
|
deep_in_dict = in_dict.copy()
|
|
284
295
|
ret_list.append(deep_in_dict)
|
|
@@ -381,16 +381,36 @@ class ZoneMigration(base.ZoneMigrationBaseStrategy):
|
|
|
381
381
|
if node.get("src_node") == src_node:
|
|
382
382
|
return node.get("dst_node")
|
|
383
383
|
|
|
384
|
-
def get_dst_pool_and_type(self, src_pool):
|
|
384
|
+
def get_dst_pool_and_type(self, src_pool, src_type):
|
|
385
385
|
"""Get destination pool and type from self.migration_storage_pools
|
|
386
386
|
|
|
387
387
|
:param src_pool: storage pool name
|
|
388
|
-
:
|
|
388
|
+
:param src_type: storage volume type
|
|
389
|
+
:returns: set of storage dst pool name and dst volume type name, any
|
|
390
|
+
of those values can be None if no match for it is found in the
|
|
391
|
+
input_parameters
|
|
389
392
|
"""
|
|
393
|
+
src_pool_type_inputs = []
|
|
394
|
+
src_pool_inputs = []
|
|
390
395
|
for pool in self.migrate_storage_pools:
|
|
396
|
+
if pool.get("src_type") is None:
|
|
397
|
+
src_pool_inputs.append(pool)
|
|
398
|
+
else:
|
|
399
|
+
src_pool_type_inputs.append(pool)
|
|
400
|
+
|
|
401
|
+
pool_to_check = (src_pool, src_type)
|
|
402
|
+
# First pass: prefer exact match (both src_pool and src_type)
|
|
403
|
+
for pool in src_pool_type_inputs:
|
|
404
|
+
user_pool = (pool.get("src_pool"), pool.get("src_type"))
|
|
405
|
+
if pool_to_check == user_pool:
|
|
406
|
+
return (pool.get("dst_pool"), pool.get("dst_type"))
|
|
407
|
+
|
|
408
|
+
# Second pass: fall back to matching just src_pool
|
|
409
|
+
for pool in src_pool_inputs:
|
|
391
410
|
if pool.get("src_pool") == src_pool:
|
|
392
|
-
return (pool.get("dst_pool",
|
|
393
|
-
|
|
411
|
+
return (pool.get("dst_pool"), pool.get("dst_type"))
|
|
412
|
+
|
|
413
|
+
return (None, None)
|
|
394
414
|
|
|
395
415
|
def volumes_migration(self, volumes, action_counter, instance_targets=[]):
|
|
396
416
|
instance_target_ids = {instance.id for instance in instance_targets}
|
|
@@ -406,17 +426,20 @@ class ZoneMigration(base.ZoneMigrationBaseStrategy):
|
|
|
406
426
|
continue
|
|
407
427
|
|
|
408
428
|
src_type = volume.volume_type
|
|
409
|
-
dst_pool, dst_type = self.get_dst_pool_and_type(pool)
|
|
429
|
+
dst_pool, dst_type = self.get_dst_pool_and_type(pool, src_type)
|
|
410
430
|
LOG.debug(src_type)
|
|
411
431
|
LOG.debug("%s %s", dst_pool, dst_type)
|
|
412
432
|
|
|
413
|
-
if src_type == dst_type:
|
|
433
|
+
if dst_type is None or src_type == dst_type:
|
|
414
434
|
if dst_pool is None:
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
435
|
+
type_msg = (
|
|
436
|
+
"" if dst_type is None else
|
|
437
|
+
f"it already has type {dst_type} and ")
|
|
438
|
+
LOG.info(
|
|
439
|
+
"volume %s will not be migrated because %s'dst_pool' "
|
|
440
|
+
"was not specified for src_pool %s",
|
|
441
|
+
volume.name, type_msg, pool
|
|
442
|
+
)
|
|
420
443
|
continue
|
|
421
444
|
self._volume_migrate(volume, dst_pool)
|
|
422
445
|
else:
|
|
@@ -1394,6 +1394,39 @@ class TestAuditZoneMigration(TestPostBase):
|
|
|
1394
1394
|
self.assertIn(expected_error_msg, response.json['error_message'])
|
|
1395
1395
|
mock_trigger_audit.assert_not_called()
|
|
1396
1396
|
|
|
1397
|
+
@mock.patch.object(deapi.DecisionEngineAPI, 'trigger_audit')
|
|
1398
|
+
def test_create_audit_zone_migration_no_dst_pool_dst_type(
|
|
1399
|
+
self, mock_trigger_audit
|
|
1400
|
+
):
|
|
1401
|
+
"""Verify zone migration rejects no destination parameters.
|
|
1402
|
+
|
|
1403
|
+
Tests that an audit creation fails with BAD_REQUEST when neither
|
|
1404
|
+
dst_type nor dst_pool are passed in the input parameters. This
|
|
1405
|
+
validates the schema correctly enforces that the at least one
|
|
1406
|
+
destination parameters is present.
|
|
1407
|
+
"""
|
|
1408
|
+
mock_trigger_audit.return_value = mock.ANY
|
|
1409
|
+
zm_params = {
|
|
1410
|
+
'storage_pools': [
|
|
1411
|
+
{"src_type": "src_type_name",
|
|
1412
|
+
"src_pool": "src_pool_name"}
|
|
1413
|
+
]
|
|
1414
|
+
}
|
|
1415
|
+
|
|
1416
|
+
audit_input_dict = self._prepare_audit_params(zm_params)
|
|
1417
|
+
|
|
1418
|
+
response = self.post_json('/audits', audit_input_dict,
|
|
1419
|
+
expect_errors=True)
|
|
1420
|
+
self.assertEqual("application/json", response.content_type)
|
|
1421
|
+
self.assertEqual(HTTPStatus.BAD_REQUEST, response.status_int)
|
|
1422
|
+
expected_error_msgs = (
|
|
1423
|
+
"is not valid under any of the given schemas",
|
|
1424
|
+
"Failed validating 'oneOf' in schema"
|
|
1425
|
+
)
|
|
1426
|
+
for expected_error_msg in expected_error_msgs:
|
|
1427
|
+
self.assertIn(expected_error_msg, response.json['error_message'])
|
|
1428
|
+
mock_trigger_audit.assert_not_called()
|
|
1429
|
+
|
|
1397
1430
|
@mock.patch.object(deapi.DecisionEngineAPI, 'trigger_audit')
|
|
1398
1431
|
def test_create_audit_zone_migration_with_multiple_valid_inputs(
|
|
1399
1432
|
self, mock_trigger_audit
|