python-watcher 11.0.0.0rc1__tar.gz → 12.0.0.0rc2__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-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/.zuul.yaml +2 -1
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/AUTHORS +2 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/ChangeLog +21 -1
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/PKG-INFO +5 -4
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/configuration/configuring.rst +1 -1
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/contributor/plugin/strategy-plugin.rst +1 -1
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/strategies/basic-server-consolidation.rst +1 -2
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/strategies/vm_workload_consolidation.rst +7 -2
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/strategies/workload-stabilization.rst +8 -9
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/strategies/workload_balance.rst +12 -12
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/python_watcher.egg-info/PKG-INFO +5 -4
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/python_watcher.egg-info/SOURCES.txt +15 -0
- python-watcher-12.0.0.0rc2/python_watcher.egg-info/pbr.json +1 -0
- python-watcher-12.0.0.0rc2/releasenotes/source/2023.2.rst +6 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/source/index.rst +1 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/setup.cfg +4 -3
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/tox.ini +1 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/actions/change_node_power_state.py +37 -31
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/clients.py +25 -0
- python-watcher-12.0.0.0rc2/watcher/common/metal_helper/base.py +81 -0
- python-watcher-12.0.0.0rc2/watcher/common/metal_helper/constants.py +23 -0
- python-watcher-12.0.0.0rc2/watcher/common/metal_helper/factory.py +33 -0
- python-watcher-12.0.0.0rc2/watcher/common/metal_helper/ironic.py +94 -0
- python-watcher-12.0.0.0rc2/watcher/common/metal_helper/maas.py +125 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/utils.py +38 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/__init__.py +2 -0
- python-watcher-12.0.0.0rc2/watcher/conf/maas_client.py +38 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/db/sqlalchemy/api.py +21 -20
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/datasources/base.py +9 -1
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/datasources/gnocchi.py +44 -5
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/model/collector/ironic.py +1 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/model/collector/nova.py +4 -3
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/model/model_root.py +1 -1
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/strategies/saving_energy.py +34 -28
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/strategies/vm_workload_consolidation.py +100 -13
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/strategies/workload_balance.py +1 -1
- python-watcher-12.0.0.0rc2/watcher/tests/applier/actions/test_change_node_power_state.py +169 -0
- python-watcher-12.0.0.0rc2/watcher/tests/common/metal_helper/test_base.py +96 -0
- python-watcher-12.0.0.0rc2/watcher/tests/common/metal_helper/test_factory.py +38 -0
- python-watcher-12.0.0.0rc2/watcher/tests/common/metal_helper/test_ironic.py +128 -0
- python-watcher-12.0.0.0rc2/watcher/tests/common/metal_helper/test_maas.py +126 -0
- python-watcher-12.0.0.0rc2/watcher/tests/common/test_utils.py +52 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/datasources/test_gnocchi_helper.py +18 -2
- python-watcher-12.0.0.0rc2/watcher/tests/decision_engine/fake_metal_helper.py +47 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/faker_cluster_and_metrics.py +21 -94
- python-watcher-12.0.0.0rc2/watcher/tests/decision_engine/strategy/strategies/test_saving_energy.py +163 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/strategy/strategies/test_vm_workload_consolidation.py +97 -29
- python-watcher-12.0.0.0rc2/watcher/tests/notifications/__init__.py +0 -0
- python-watcher-12.0.0.0rc2/watcher/tests/objects/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/objects/test_objects.py +2 -0
- python-watcher-11.0.0.0rc1/python_watcher.egg-info/pbr.json +0 -1
- python-watcher-11.0.0.0rc1/watcher/tests/applier/actions/test_change_node_power_state.py +0 -152
- python-watcher-11.0.0.0rc1/watcher/tests/decision_engine/strategy/strategies/test_saving_energy.py +0 -210
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/.coveragerc +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/.mailmap +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/.stestr.conf +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/CONTRIBUTING.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/HACKING.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/LICENSE +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/README.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/conf.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/index.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/parameters.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/actionplan-cancel-request-cancelling.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/actionplan-cancel-request-pending.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/actionplan-list-detailed-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/actionplan-list-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/actionplan-show-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/actionplan-start-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/actions-list-detailed-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/actions-list-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/actions-show-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/api-root-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/api-v1-root-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/audit-cancel-request.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/audit-cancel-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/audit-create-request-continuous.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/audit-create-request-oneshot.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/audit-create-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/audit-list-detailed-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/audit-list-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/audit-show-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/audit-update-request.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/audit-update-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/audittemplate-create-request-full.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/audittemplate-create-request-minimal.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/audittemplate-create-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/audittemplate-list-detailed-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/audittemplate-list-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/audittemplate-show-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/audittemplate-update-request.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/audittemplate-update-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/datamodel-list-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/goal-list-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/goal-show-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/scoring_engine-list-detailed-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/scoring_engine-list-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/scoring_engine-show-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/service-list-detailed-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/service-list-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/service-show-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/strategy-list-detailed-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/strategy-list-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/strategy-show-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/samples/strategy-state-response.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/watcher-api-v1-actionplans.inc +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/watcher-api-v1-actions.inc +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/watcher-api-v1-audits.inc +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/watcher-api-v1-audittemplates.inc +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/watcher-api-v1-datamodel.inc +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/watcher-api-v1-goals.inc +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/watcher-api-v1-scoring_engines.inc +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/watcher-api-v1-services.inc +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/watcher-api-v1-strategies.inc +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/watcher-api-v1-webhooks.inc +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/api-ref/source/watcher-api-versions.inc +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/devstack/files/apache-watcher-api.template +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/devstack/lib/watcher +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/devstack/local.conf.compute +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/devstack/local.conf.controller +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/devstack/override-defaults +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/devstack/plugin.sh +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/devstack/settings +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/devstack/upgrade/from_rocky/upgrade-watcher +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/devstack/upgrade/resources.sh +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/devstack/upgrade/settings +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/devstack/upgrade/shutdown.sh +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/devstack/upgrade/upgrade.sh +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/ext/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/ext/term.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/ext/versioned_notifications.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/action-cancel-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/action-cancel-error.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/action-cancel-start.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/action-create.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/action-delete.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/action-execution-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/action-execution-error.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/action-execution-start.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/action-update.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/action_plan-cancel-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/action_plan-cancel-error.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/action_plan-cancel-start.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/action_plan-create.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/action_plan-delete.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/action_plan-execution-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/action_plan-execution-error.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/action_plan-execution-start.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/action_plan-update.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/audit-create.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/audit-delete.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/audit-planner-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/audit-planner-error.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/audit-planner-start.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/audit-strategy-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/audit-strategy-error.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/audit-strategy-start.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/audit-update.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/infra-optim-exception.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/notification_samples/service-update.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/requirements.txt +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/_static/.placeholder +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/admin/apache-mod-wsgi.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/admin/gmr.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/admin/index.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/admin/policy.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/architecture.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/conf.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/configuration/index.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/configuration/watcher.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/contributor/api_microversion_history.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/contributor/concurrency.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/contributor/contributing.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/contributor/devstack.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/contributor/environment.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/contributor/index.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/contributor/notifications.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/contributor/plugin/action-plugin.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/contributor/plugin/base-setup.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/contributor/plugin/cdmc-plugin.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/contributor/plugin/goal-plugin.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/contributor/plugin/index.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/contributor/plugin/planner-plugin.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/contributor/plugin/plugins.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/contributor/plugin/scoring-engine-plugin.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/contributor/rally_link.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/contributor/testing.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/datasources/grafana.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/datasources/index.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/glossary.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/image_src/dia/architecture.dia +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/image_src/dia/functional_data_model.dia +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/image_src/plantuml/README.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/image_src/plantuml/action_plan_state_machine.txt +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/image_src/plantuml/audit_state_machine.txt +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/image_src/plantuml/sequence_architecture_cdmc_sync.txt +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/image_src/plantuml/sequence_create_and_launch_audit.txt +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/image_src/plantuml/sequence_create_audit_template.txt +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/image_src/plantuml/sequence_from_audit_execution_to_actionplan_creation.txt +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/image_src/plantuml/sequence_launch_action_plan.txt +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/image_src/plantuml/sequence_launch_action_plan_in_applier.txt +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/image_src/plantuml/sequence_overview_watcher_usage.txt +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/image_src/plantuml/sequence_trigger_audit_in_decision_engine.txt +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/image_src/plantuml/watcher_db_schema_diagram.txt +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/images/action_plan_state_machine.png +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/images/architecture.svg +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/images/audit_state_machine.png +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/images/functional_data_model.svg +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/images/sequence_architecture_cdmc_sync.png +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/images/sequence_create_and_launch_audit.png +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/images/sequence_create_audit_template.png +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/images/sequence_from_audit_execution_to_actionplan_creation.png +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/images/sequence_launch_action_plan.png +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/images/sequence_launch_action_plan_in_applier.png +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/images/sequence_overview_watcher_usage.png +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/images/sequence_trigger_audit_in_decision_engine.png +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/images/watcher_db_schema_diagram.png +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/index.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/install/common_configure.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/install/common_prerequisites.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/install/get_started.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/install/index.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/install/install-rdo.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/install/install-ubuntu.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/install/install.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/install/next-steps.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/install/verify.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/man/footer.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/man/general-options.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/man/index.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/man/watcher-api.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/man/watcher-applier.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/man/watcher-db-manage.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/man/watcher-decision-engine.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/man/watcher-status.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/strategies/actuation.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/strategies/host_maintenance.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/strategies/index.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/strategies/node_resource_consolidation.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/strategies/noisy_neighbor.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/strategies/outlet_temp_control.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/strategies/saving_energy.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/strategies/storage_capacity_balance.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/strategies/strategy-template.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/strategies/uniform_airflow.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/strategies/zone_migration.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/user/event_type_audit.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/user/index.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/user/user-guide.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/user/ways-to-install.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/etc/apache2/watcher +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/etc/watcher/README-watcher.conf.txt +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/etc/watcher/oslo-config-generator/watcher.conf +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/etc/watcher/oslo-policy-generator/watcher-policy-generator.conf +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/python_watcher.egg-info/dependency_links.txt +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/python_watcher.egg-info/entry_points.txt +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/python_watcher.egg-info/not-zip-safe +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/python_watcher.egg-info/requires.txt +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/python_watcher.egg-info/top_level.txt +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/rally-jobs/README.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/rally-jobs/watcher-watcher.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/.placeholder +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/action-plan-cancel-c54726378019e096.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/action-plan-versioned-notifications-api-e8ca4f5d37aa5b4b.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/action-versioned-notifications-api-ff94fc0f401292d0.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/add-baremetal-scoper-9ef23f5fb8f0be6a.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/add-force-field-to-audit-4bcaeedfe27233ad.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/add-ha-support-b9042255e5b76e42.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/add-name-for-audit-0df1f39f00736f06.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/add-plugins-parameters-376eb6b0b8978b44.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/add-power-on-off-a77673d482568a8b.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/add-scoring-module-fa00d013ed2d614e.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/add-start-end-time-for-continuous-audit-52c45052cb06d153.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/add-upgrade-check-framework-5bb9693c8a78931c.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/api-call-retry-fef741ac684c58dd.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/api-microversioning-7999a3ee8073bf32.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/audit-scoper-for-storage-data-model-cdccc803542d22db.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/audit-tag-vm-metadata-47a3e4468748853c.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/audit-versioned-notifications-api-bca7738e16954bad.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/automatic-triggering-audit-8a9b0540d547db60.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/background-jobs-ha-9d3cf3fe356f4705.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/bp-audit-scope-exclude-project-511a7720aac00dff.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/build-baremetal-data-model-in-watcher-3023453a47b61dab.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/cdm-scoping-8d9c307bad46bfa1.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/centralise-config-opts-95670987dfbdb0e7.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/change-ram-util-metric-4a3e6984b9dd968d.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/check-strategy-requirements-66f9e9262412f8ec.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/cinder-model-integration-baa394a72a0a33bf.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/cluster-model-objects-wrapper-9c799ea262c56a5b.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/compute-cdm-include-all-instances-f7506ded2d57732f.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/configurable-weights-default-planner-3746b33160bc7347.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/consume-nova-versioned-notifications-f98361b37e546b4d.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/continuously-optimization-35364f4d2c0b81fc.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/cron-based-continuous-audits-c3eedf28d9752b37.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/datasource-query-retry-00cba5f7e68aec39.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/db-migration-e1a705a8b54ccdd2.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/define-the-audit-scope-e89edc5051dcf3f2.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/deprecate-ceilometer-datasource-446b0be70fbce28b.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/deprecate-json-formatted-policy-file-3a92379e9f5dd203.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/drop-py-2-7-54f8e806d71f19a7.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/dynamic-action-description-0e947b9e7ef2a134.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/efficacy-indicator-95380ad7b84e3be2.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/enhance-watcher-applier-engine-86c676ce8f179e68.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/event-driven-optimization-based-4870f112bef8a560.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/file-based-metric-map-c2af62b5067895df.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/formal-datasource-interface-implementation-222769d55a127d33.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/general-purpose-decision-engine-threadpool-0711b23abfc9d409.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/get-goal-from-strategy-396c9b13a38bb650.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/global-datasource-preference-3ab47b4be09ff3a5.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/gnocchi-watcher-43c25d391fbd3e9c.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/grafana-datasource-b672367c23ffa0c6.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/graph-based-cluster-model-523937a6f5e66537.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/host-maintenance-strategy-41f640927948fb56.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/improve-compute-data-model-b427c85e4ed2b6fb.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/jsonschema-validation-79cab05d5295da00.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/min-required-nova-train-71f124192d88ae52.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/monasca-support-0b0486b8572ac38b.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/multiple-global-efficacy-indicator-fc11c4844a12a7d5.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/node-resource-consolidation-73bc0c0abfeb0b03.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/noisy-neighbor-strategy-a71342740b59dddc.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/notifications-actionplan-cancel-edb2a4a12543e2d0.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/optimization-threshold-21ad38f0470d0e1a.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/persistent-audit-parameters-ae41dd7252ba9672.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/planner-storage-action-plan-26ef37893c5e8648.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/remove-nova-legacy-notifications-e1b6d10eff58f30a.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/replace-cold-migrate-to-use-nova-migration-api-cecd9a39ddd3bc58.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/scope-for-data-model-ea9792f90db14343.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/service-versioned-notifications-api-70367b79a565d900.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/show-datamodel-api-6945b744fd5d25d5.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/stale-action-plan-b6a6b08df873c128.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/standard-deviation-strategy-cd1d0c443fdfde9c.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/storage-workload-balance-0ecabbc1791e6894.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/support-keystoneclient-option-b30d1ff45f86a2e7.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/support-placement-api-58ce6bef1bbbe98a.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/suspended-audit-state-07f998c94e9d9a47.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/uniform-airflow-strategy-68cdba1419c3f770.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/uwsgi-support-8dcea6961e56dad0.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/volume-migrate-action-fc57b0ce0e4c39ae.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/watcher-notifications-ovo-7b44d52ef6400dd0.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/watcher-planner-selector-84d77549d46f362a.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/watcher-policies-1e86a30f0f11c6fa.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/watcher-service-list-7b2f4b64f71e9b89.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/watcher-versioned-objects-fc5abf5c81c4590c.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/workload-balance-base-on-cpu-or-ram-util-3ff4ee968c32b2ed.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/workload-balance-migration-strategy-a0b05148a57815c0.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/notes/zone-migration-strategy-10f7656a2a01e607.yaml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/source/2023.1.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/source/_static/.placeholder +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/source/conf.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/source/locale/en_GB/LC_MESSAGES/releasenotes.po +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/source/locale/fr/LC_MESSAGES/releasenotes.po +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/source/newton.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/source/ocata.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/source/pike.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/source/queens.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/source/rocky.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/source/stein.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/source/train.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/source/unreleased.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/source/ussuri.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/source/victoria.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/source/wallaby.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/source/xena.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/source/yoga.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/releasenotes/source/zed.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/requirements.txt +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/setup.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/test-requirements.txt +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/_i18n.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/acl.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/app.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/app.wsgi +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/config.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/controllers/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/controllers/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/controllers/link.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/controllers/rest_api_version_history.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/controllers/root.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/controllers/v1/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/controllers/v1/action.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/controllers/v1/action_plan.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/controllers/v1/audit.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/controllers/v1/audit_template.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/controllers/v1/collection.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/controllers/v1/data_model.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/controllers/v1/efficacy_indicator.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/controllers/v1/goal.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/controllers/v1/scoring_engine.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/controllers/v1/service.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/controllers/v1/strategy.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/controllers/v1/types.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/controllers/v1/utils.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/controllers/v1/versions.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/controllers/v1/webhooks.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/hooks.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/middleware/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/middleware/auth_token.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/middleware/parsable_error.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/scheduling.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/api/wsgi.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/action_plan/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/action_plan/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/action_plan/default.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/actions/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/actions/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/actions/change_nova_service_state.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/actions/factory.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/actions/migration.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/actions/nop.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/actions/resize.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/actions/sleep.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/actions/volume_migration.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/default.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/loading/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/loading/default.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/manager.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/messaging/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/messaging/trigger.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/rpcapi.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/sync.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/workflow_engine/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/workflow_engine/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/applier/workflow_engine/default.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/cmd/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/cmd/api.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/cmd/applier.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/cmd/dbmanage.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/cmd/decisionengine.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/cmd/status.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/cmd/sync.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/cinder_helper.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/config.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/context.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/exception.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/ironic_helper.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/keystone_helper.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/loader/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/loader/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/loader/default.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/loader/loadable.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/db → python-watcher-12.0.0.0rc2/watcher/common/metal_helper}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/nova_helper.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/paths.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/placement_helper.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/policies/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/policies/action.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/policies/action_plan.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/policies/audit.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/policies/audit_template.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/policies/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/policies/data_model.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/policies/goal.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/policies/scoring_engine.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/policies/service.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/policies/strategy.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/policy.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/rpc.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/scheduling.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/service.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/common/service_manager.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/api.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/applier.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/ceilometer_client.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/cinder_client.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/clients_auth.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/collector.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/datasources.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/db.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/decision_engine.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/exception.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/glance_client.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/gnocchi_client.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/grafana_client.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/grafana_translators.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/ironic_client.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/keystone_client.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/monasca_client.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/neutron_client.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/nova_client.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/opts.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/paths.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/placement_client.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/planner.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/plugins.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/conf/service.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/db/sqlalchemy → python-watcher-12.0.0.0rc2/watcher/db}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/db/api.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/db/migration.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/db/purge.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/decision_engine → python-watcher-12.0.0.0rc2/watcher/db/sqlalchemy}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/db/sqlalchemy/alembic/README.rst +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/db/sqlalchemy/alembic/env.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/db/sqlalchemy/alembic/script.py.mako +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/db/sqlalchemy/alembic/versions/001_ocata.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/db/sqlalchemy/alembic/versions/0f6042416884_add_apscheduler_jobs.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/db/sqlalchemy/alembic/versions/3cfc94cecf4e_add_name_for_audit.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/db/sqlalchemy/alembic/versions/4b16194c56bc_add_start_end_time.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/db/sqlalchemy/alembic/versions/52804f2498c4_add_hostname.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/db/sqlalchemy/alembic/versions/609bec748f2a_add_force_field.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/db/sqlalchemy/alembic/versions/a86240e89a29_.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/db/sqlalchemy/alembic/versions/d098df6021e2_cron_support_for_audit.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/db/sqlalchemy/alembic/versions/d09a5945e4a0_add_action_description_table.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/db/sqlalchemy/alembic.ini +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/db/sqlalchemy/job_store.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/db/sqlalchemy/migration.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/db/sqlalchemy/models.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/decision_engine/audit → python-watcher-12.0.0.0rc2/watcher/decision_engine}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/decision_engine/datasources → python-watcher-12.0.0.0rc2/watcher/decision_engine/audit}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/audit/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/audit/continuous.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/audit/event.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/audit/oneshot.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/decision_engine/datasources/grafana_translator → python-watcher-12.0.0.0rc2/watcher/decision_engine/datasources}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/datasources/ceilometer.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/datasources/grafana.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/decision_engine/goal/efficacy → python-watcher-12.0.0.0rc2/watcher/decision_engine/datasources/grafana_translator}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/datasources/grafana_translator/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/datasources/grafana_translator/influxdb.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/datasources/manager.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/datasources/monasca.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/gmr.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/goal/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/goal/base.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/decision_engine/loading → python-watcher-12.0.0.0rc2/watcher/decision_engine/goal/efficacy}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/goal/efficacy/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/goal/efficacy/indicators.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/goal/efficacy/specs.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/goal/goals.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/decision_engine/messaging → python-watcher-12.0.0.0rc2/watcher/decision_engine/loading}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/loading/default.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/manager.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/decision_engine/model → python-watcher-12.0.0.0rc2/watcher/decision_engine/messaging}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/messaging/audit_endpoint.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/messaging/data_model_endpoint.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/decision_engine/model/collector → python-watcher-12.0.0.0rc2/watcher/decision_engine/model}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/model/base.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/decision_engine/model/notification → python-watcher-12.0.0.0rc2/watcher/decision_engine/model/collector}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/model/collector/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/model/collector/cinder.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/model/collector/manager.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/model/element/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/model/element/baremetal_resource.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/model/element/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/model/element/compute_resource.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/model/element/instance.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/model/element/node.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/model/element/storage_resource.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/model/element/volume.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/decision_engine/planner → python-watcher-12.0.0.0rc2/watcher/decision_engine/model/notification}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/model/notification/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/model/notification/cinder.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/model/notification/filtering.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/model/notification/nova.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/decision_engine/scope → python-watcher-12.0.0.0rc2/watcher/decision_engine/planner}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/planner/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/planner/manager.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/planner/node_resource_consolidation.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/planner/weight.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/planner/workload_stabilization.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/rpcapi.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/scheduling.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/decision_engine/scoring → python-watcher-12.0.0.0rc2/watcher/decision_engine/scope}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/scope/baremetal.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/scope/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/scope/compute.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/scope/storage.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/decision_engine/solution → python-watcher-12.0.0.0rc2/watcher/decision_engine/scoring}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/scoring/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/scoring/dummy_scorer.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/scoring/dummy_scoring_container.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/scoring/scoring_factory.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/decision_engine/strategy → python-watcher-12.0.0.0rc2/watcher/decision_engine/solution}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/solution/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/solution/default.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/solution/efficacy.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/solution/solution_comparator.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/solution/solution_evaluator.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/decision_engine/strategy/common → python-watcher-12.0.0.0rc2/watcher/decision_engine/strategy}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/decision_engine/strategy/context → python-watcher-12.0.0.0rc2/watcher/decision_engine/strategy/common}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/common/level.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/decision_engine/strategy/selection → python-watcher-12.0.0.0rc2/watcher/decision_engine/strategy/context}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/context/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/context/default.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/hacking → python-watcher-12.0.0.0rc2/watcher/decision_engine/strategy/selection}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/selection/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/selection/default.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/strategies/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/strategies/actuation.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/strategies/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/strategies/basic_consolidation.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/strategies/dummy_strategy.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/strategies/dummy_with_resize.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/strategies/dummy_with_scorer.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/strategies/host_maintenance.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/strategies/node_resource_consolidation.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/strategies/noisy_neighbor.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/strategies/outlet_temp_control.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/strategies/storage_capacity_balance.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/strategies/uniform_airflow.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/strategies/workload_stabilization.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/strategy/strategies/zone_migration.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/sync.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/decision_engine/threading.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/api → python-watcher-12.0.0.0rc2/watcher/hacking}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/hacking/checks.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/locale/de/LC_MESSAGES/watcher.po +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/locale/en_GB/LC_MESSAGES/watcher.po +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/notifications/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/notifications/action.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/notifications/action_plan.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/notifications/audit.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/notifications/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/notifications/exception.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/notifications/goal.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/notifications/service.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/notifications/strategy.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/objects/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/objects/action.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/objects/action_description.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/objects/action_plan.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/objects/audit.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/objects/audit_template.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/objects/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/objects/efficacy_indicator.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/objects/fields.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/objects/goal.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/objects/scoring_engine.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/objects/service.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/objects/strategy.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/api/v1 → python-watcher-12.0.0.0rc2/watcher/tests/api}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/api/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/api/test_base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/api/test_config.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/api/test_hooks.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/api/test_root.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/api/test_scheduling.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/api/test_utils.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/api/utils.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/applier → python-watcher-12.0.0.0rc2/watcher/tests/api/v1}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/api/v1/test_actions.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/api/v1/test_actions_plans.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/api/v1/test_audit_templates.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/api/v1/test_audits.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/api/v1/test_data_model.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/api/v1/test_goals.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/api/v1/test_microversions.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/api/v1/test_root.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/api/v1/test_scoring_engines.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/api/v1/test_services.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/api/v1/test_strategies.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/api/v1/test_types.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/api/v1/test_utils.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/api/v1/test_webhooks.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/applier/action_plan → python-watcher-12.0.0.0rc2/watcher/tests/applier}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/applier/actions → python-watcher-12.0.0.0rc2/watcher/tests/applier/action_plan}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/applier/action_plan/test_default_action_handler.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/applier/actions/loading → python-watcher-12.0.0.0rc2/watcher/tests/applier/actions}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/applier/messaging → python-watcher-12.0.0.0rc2/watcher/tests/applier/actions/loading}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/applier/actions/loading/test_default_actions_loader.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/applier/actions/test_change_nova_service_state.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/applier/actions/test_migration.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/applier/actions/test_resize.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/applier/actions/test_sleep.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/applier/actions/test_volume_migration.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/applier/workflow_engine → python-watcher-12.0.0.0rc2/watcher/tests/applier/messaging}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/applier/messaging/test_trigger_action_plan_endpoint.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/applier/test_applier_manager.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/applier/test_rpcapi.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/applier/test_sync.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/applier/workflow_engine/loading → python-watcher-12.0.0.0rc2/watcher/tests/applier/workflow_engine}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/cmd → python-watcher-12.0.0.0rc2/watcher/tests/applier/workflow_engine/loading}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/applier/workflow_engine/loading/test_default_engine_loader.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/applier/workflow_engine/test_default_workflow_engine.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/applier/workflow_engine/test_taskflow_action_container.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/base.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/common → python-watcher-12.0.0.0rc2/watcher/tests/cmd}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/cmd/test_api.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/cmd/test_applier.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/cmd/test_db_manage.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/cmd/test_decision_engine.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/cmd/test_status.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/common/loader → python-watcher-12.0.0.0rc2/watcher/tests/common}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/conf → python-watcher-12.0.0.0rc2/watcher/tests/common/loader}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/common/loader/test_loader.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/db → python-watcher-12.0.0.0rc2/watcher/tests/common/metal_helper}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/common/test_cinder_helper.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/common/test_clients.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/common/test_ironic_helper.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/common/test_nova_helper.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/common/test_placement_helper.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/common/test_service.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/decision_engine/audit → python-watcher-12.0.0.0rc2/watcher/tests/conf}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/conf/test_list_opts.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/conf_fixture.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/config.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/decision_engine/cluster → python-watcher-12.0.0.0rc2/watcher/tests/db}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/db/base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/db/test_action.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/db/test_action_description.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/db/test_action_plan.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/db/test_audit.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/db/test_audit_template.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/db/test_efficacy_indicator.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/db/test_goal.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/db/test_purge.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/db/test_scoring_engine.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/db/test_service.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/db/test_strategy.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/db/utils.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/decision_engine/datasources → python-watcher-12.0.0.0rc2/watcher/tests/decision_engine/audit}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/audit/test_audit_handlers.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/decision_engine/datasources/grafana_translators → python-watcher-12.0.0.0rc2/watcher/tests/decision_engine/cluster}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/cluster/test_cinder_cdmc.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/cluster/test_cluster_data_model_collector.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/cluster/test_nova_cdmc.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/decision_engine/event_consumer → python-watcher-12.0.0.0rc2/watcher/tests/decision_engine/datasources}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/decision_engine/loading → python-watcher-12.0.0.0rc2/watcher/tests/decision_engine/datasources/grafana_translators}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/datasources/grafana_translators/test_base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/datasources/grafana_translators/test_influxdb.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/datasources/test_base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/datasources/test_grafana_helper.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/datasources/test_manager.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/datasources/test_monasca_helper.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/decision_engine/messaging → python-watcher-12.0.0.0rc2/watcher/tests/decision_engine/event_consumer}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/fake_goals.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/fake_strategies.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/decision_engine/model → python-watcher-12.0.0.0rc2/watcher/tests/decision_engine/loading}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/loading/test_collector_loader.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/loading/test_default_planner_loader.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/loading/test_default_strategy_loader.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/loading/test_goal_loader.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/decision_engine/model/notification → python-watcher-12.0.0.0rc2/watcher/tests/decision_engine/messaging}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/messaging/test_audit_endpoint.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/messaging/test_data_model_endpoint.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/decision_engine/planner → python-watcher-12.0.0.0rc2/watcher/tests/decision_engine/model}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/ceilometer_metrics.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/data/ironic_scenario_1.xml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/data/scenario_1.xml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/data/scenario_10.xml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/data/scenario_1_with_1_node_unavailable.xml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/data/scenario_1_with_all_instances_exclude.xml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/data/scenario_1_with_all_nodes_disable.xml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/data/scenario_1_with_metrics.xml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/data/scenario_2_with_metrics.xml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/data/scenario_3_with_2_nodes.xml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/data/scenario_3_with_metrics.xml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/data/scenario_4_with_1_node_no_instance.xml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/data/scenario_5_with_instance_disk_0.xml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/data/scenario_6_with_2_nodes.xml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/data/scenario_7_with_2_nodes.xml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/data/scenario_8_with_4_nodes.xml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/data/scenario_9_with_3_active_plus_1_disabled_nodes.xml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/data/storage_scenario_1.xml +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/faker_cluster_state.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/gnocchi_metrics.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/monasca_metrics.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/decision_engine/scope → python-watcher-12.0.0.0rc2/watcher/tests/decision_engine/model/notification}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/capacity.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/instance-create-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/instance-delete-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/instance-live_migration_force_complete-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/instance-live_migration_post-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/instance-lock.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/instance-pause-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/instance-power_off-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/instance-power_on-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/instance-rebuild-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/instance-rescue-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/instance-resize_confirm-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/instance-restore-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/instance-resume-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/instance-shelve-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/instance-shutdown-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/instance-soft_delete-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/instance-suspend-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/instance-unlock.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/instance-unpause-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/instance-unrescue-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/instance-unshelve-end.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/instance-update.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/scenario3_instance-update.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/scenario3_notfound_instance-update.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/scenario3_notfound_legacy_instance-update.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/scenario3_service-update-disabled.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/scenario3_service-update-enabled.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/scenario_1_bootable-volume-create.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/scenario_1_capacity.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/scenario_1_capacity_node_notfound.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/scenario_1_capacity_pool_notfound.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/scenario_1_error-volume-create.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/scenario_1_volume-attach.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/scenario_1_volume-create.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/scenario_1_volume-create_pool_notfound.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/scenario_1_volume-delete.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/scenario_1_volume-detach.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/scenario_1_volume-resize.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/scenario_1_volume-update.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/service-create.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/service-delete.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/data/service-update.json +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/fake_managers.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/test_cinder_notifications.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/test_notifications.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/notification/test_nova_notifications.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/test_element.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/model/test_model.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/decision_engine/scoring → python-watcher-12.0.0.0rc2/watcher/tests/decision_engine/planner}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/planner/test_node_resource_consolidation.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/planner/test_planner_manager.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/planner/test_weight_planner.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/planner/test_workload_stabilization_planner.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/decision_engine/solution → python-watcher-12.0.0.0rc2/watcher/tests/decision_engine/scope}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/scope/fake_scopes.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/scope/test_baremetal.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/scope/test_compute.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/scope/test_storage.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/decision_engine/strategy → python-watcher-12.0.0.0rc2/watcher/tests/decision_engine/scoring}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/scoring/test_dummy_scorer.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/scoring/test_dummy_scoring_container.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/scoring/test_scoring_factory.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/decision_engine/strategy/context → python-watcher-12.0.0.0rc2/watcher/tests/decision_engine/solution}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/solution/test_default_solution.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/decision_engine/strategy/selector → python-watcher-12.0.0.0rc2/watcher/tests/decision_engine/strategy}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/decision_engine/strategy/strategies → python-watcher-12.0.0.0rc2/watcher/tests/decision_engine/strategy/context}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/strategy/context/test_strategy_context.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/notifications → python-watcher-12.0.0.0rc2/watcher/tests/decision_engine/strategy/selector}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/strategy/selector/test_strategy_selector.py +0 -0
- {python-watcher-11.0.0.0rc1/watcher/tests/objects → python-watcher-12.0.0.0rc2/watcher/tests/decision_engine/strategy/strategies}/__init__.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/strategy/strategies/test_actuator.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/strategy/strategies/test_base.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/strategy/strategies/test_basic_consolidation.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/strategy/strategies/test_dummy_strategy.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/strategy/strategies/test_dummy_with_scorer.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/strategy/strategies/test_host_maintenance.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/strategy/strategies/test_node_resource_consolidation.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/strategy/strategies/test_noisy_neighbor.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/strategy/strategies/test_outlet_temp_control.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/strategy/strategies/test_storage_capacity_balance.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/strategy/strategies/test_strategy_endpoint.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/strategy/strategies/test_uniform_airflow.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/strategy/strategies/test_workload_balance.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/strategy/strategies/test_workload_stabilization.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/strategy/strategies/test_zone_migration.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/test_gmr.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/test_rpcapi.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/test_scheduling.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/decision_engine/test_sync.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/fake_policy.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/fakes.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/notifications/test_action_notification.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/notifications/test_action_plan_notification.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/notifications/test_audit_notification.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/notifications/test_notification.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/notifications/test_service_notifications.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/objects/test_action.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/objects/test_action_description.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/objects/test_action_plan.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/objects/test_audit.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/objects/test_audit_template.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/objects/test_efficacy_indicator.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/objects/test_goal.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/objects/test_scoring_engine.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/objects/test_service.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/objects/test_strategy.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/objects/utils.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/policy_fixture.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/tests/test_threading.py +0 -0
- {python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/watcher/version.py +0 -0
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
- job:
|
|
90
90
|
name: watcher-tempest-multinode
|
|
91
91
|
parent: watcher-tempest-functional
|
|
92
|
-
nodeset: openstack-two-node-
|
|
92
|
+
nodeset: openstack-two-node-jammy
|
|
93
93
|
roles:
|
|
94
94
|
- zuul: openstack/tempest
|
|
95
95
|
group-vars:
|
|
@@ -107,6 +107,7 @@
|
|
|
107
107
|
watcher-api: false
|
|
108
108
|
watcher-decision-engine: true
|
|
109
109
|
watcher-applier: false
|
|
110
|
+
c-bak: false
|
|
110
111
|
ceilometer: false
|
|
111
112
|
ceilometer-acompute: false
|
|
112
113
|
ceilometer-acentral: false
|
|
@@ -47,6 +47,7 @@ Ian Wienand <iwienand@redhat.com>
|
|
|
47
47
|
Iswarya_Vakati <v.iswarya@nectechnologies.in>
|
|
48
48
|
Jaewoo Park <jp655p@att.com>
|
|
49
49
|
James E. Blair <jeblair@redhat.com>
|
|
50
|
+
James Page <james.page@canonical.com>
|
|
50
51
|
Jean-Emile DARTOIS <jean-emile.dartois@b-com.com>
|
|
51
52
|
Jeremy Liu <liujiong@gohighsec.com>
|
|
52
53
|
Joe Cropper <jwcroppe@us.ibm.com>
|
|
@@ -57,6 +58,7 @@ Lance Bragstad <lbragstad@gmail.com>
|
|
|
57
58
|
Larry Rensing <lr699s@att.com>
|
|
58
59
|
LiXiangyu <lixiangyu@cmss.chinamobile.com>
|
|
59
60
|
Lin Yang <lin.a.yang@intel.com>
|
|
61
|
+
Lucian Petrut <lpetrut@cloudbasesolutions.com>
|
|
60
62
|
Luigi Toscano <ltoscano@redhat.com>
|
|
61
63
|
Luong Anh Tuan <tuanla@vn.fujitsu.com>
|
|
62
64
|
M V P Nitesh <m.nitesh@nectechnologies.in>
|
|
@@ -1,9 +1,29 @@
|
|
|
1
1
|
CHANGES
|
|
2
2
|
=======
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
12.0.0.0rc2
|
|
5
5
|
-----------
|
|
6
6
|
|
|
7
|
+
* Fix oslo.db >= 15.0.0 compatibility
|
|
8
|
+
|
|
9
|
+
12.0.0.0rc1
|
|
10
|
+
-----------
|
|
11
|
+
|
|
12
|
+
* Update python classifier in setup.cfg
|
|
13
|
+
* Add MAAS support
|
|
14
|
+
* Update action json schema
|
|
15
|
+
* Fix object tests
|
|
16
|
+
* vm workload consolidation: use actual host metrics
|
|
17
|
+
* Handle deprecated "cpu\_util" metric
|
|
18
|
+
* Avoid performing retries in case of missing resources
|
|
19
|
+
* Improve vm\_consolidation logging
|
|
20
|
+
* vm workload consolidation: allow cold migrations
|
|
21
|
+
* Unblock the CI gate
|
|
22
|
+
* Update master for stable/2023.2
|
|
23
|
+
|
|
24
|
+
11.0.0
|
|
25
|
+
------
|
|
26
|
+
|
|
7
27
|
* Add timeout option for Grafana request
|
|
8
28
|
* Imported Translations from Zanata
|
|
9
29
|
* Fix watcher comment
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 1.2
|
|
2
2
|
Name: python-watcher
|
|
3
|
-
Version:
|
|
3
|
+
Version: 12.0.0.0rc2
|
|
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
|
|
@@ -47,7 +47,8 @@ Classifier: Programming Language :: Python
|
|
|
47
47
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
48
48
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
49
49
|
Classifier: Programming Language :: Python :: 3
|
|
50
|
-
Classifier: Programming Language :: Python :: 3.6
|
|
51
|
-
Classifier: Programming Language :: Python :: 3.7
|
|
52
50
|
Classifier: Programming Language :: Python :: 3.8
|
|
53
|
-
|
|
51
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
52
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
53
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
54
|
+
Requires-Python: >=3.8
|
{python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/configuration/configuring.rst
RENAMED
|
@@ -372,7 +372,7 @@ You can configure and install Ceilometer by following the documentation below :
|
|
|
372
372
|
#. https://docs.openstack.org/ceilometer/latest
|
|
373
373
|
|
|
374
374
|
The built-in strategy 'basic_consolidation' provided by watcher requires
|
|
375
|
-
"**compute.node.cpu.percent**" and "**
|
|
375
|
+
"**compute.node.cpu.percent**" and "**cpu**" measurements to be collected
|
|
376
376
|
by Ceilometer.
|
|
377
377
|
The measurements available depend on the hypervisors that OpenStack manages on
|
|
378
378
|
the specific implementation.
|
|
@@ -300,6 +300,6 @@ Using that you can now query the values for that specific metric:
|
|
|
300
300
|
.. code-block:: py
|
|
301
301
|
|
|
302
302
|
avg_meter = self.datasource_backend.statistic_aggregation(
|
|
303
|
-
instance.uuid, '
|
|
303
|
+
instance.uuid, 'instance_cpu_usage', self.periods['instance'],
|
|
304
304
|
self.granularity,
|
|
305
305
|
aggregation=self.aggregation_method['instance'])
|
|
@@ -26,8 +26,7 @@ metric service name plugins comment
|
|
|
26
26
|
``compute_monitors`` option
|
|
27
27
|
to ``cpu.virt_driver`` in
|
|
28
28
|
the nova.conf.
|
|
29
|
-
``
|
|
30
|
-
since Stein.
|
|
29
|
+
``cpu`` ceilometer_ none
|
|
31
30
|
============================ ============ ======= ===========================
|
|
32
31
|
|
|
33
32
|
.. _ceilometer: https://docs.openstack.org/ceilometer/latest/admin/telemetry-measurements.html#openstack-compute
|
|
@@ -22,14 +22,19 @@ The *vm_workload_consolidation* strategy requires the following metrics:
|
|
|
22
22
|
============================ ============ ======= =========================
|
|
23
23
|
metric service name plugins comment
|
|
24
24
|
============================ ============ ======= =========================
|
|
25
|
-
``
|
|
26
|
-
since Stein.
|
|
25
|
+
``cpu`` ceilometer_ none
|
|
27
26
|
``memory.resident`` ceilometer_ none
|
|
28
27
|
``memory`` ceilometer_ none
|
|
29
28
|
``disk.root.size`` ceilometer_ none
|
|
29
|
+
``compute.node.cpu.percent`` ceilometer_ none (optional) need to set the
|
|
30
|
+
``compute_monitors`` option
|
|
31
|
+
to ``cpu.virt_driver`` in the
|
|
32
|
+
nova.conf.
|
|
33
|
+
``hardware.memory.used`` ceilometer_ SNMP_ (optional)
|
|
30
34
|
============================ ============ ======= =========================
|
|
31
35
|
|
|
32
36
|
.. _ceilometer: https://docs.openstack.org/ceilometer/latest/admin/telemetry-measurements.html#openstack-compute
|
|
37
|
+
.. _SNMP: https://docs.openstack.org/ceilometer/latest/admin/telemetry-measurements.html#snmp-based-meters
|
|
33
38
|
|
|
34
39
|
Cluster data model
|
|
35
40
|
******************
|
|
@@ -27,9 +27,8 @@ metric service name plugins comment
|
|
|
27
27
|
to ``cpu.virt_driver`` in the
|
|
28
28
|
nova.conf.
|
|
29
29
|
``hardware.memory.used`` ceilometer_ SNMP_
|
|
30
|
-
``
|
|
31
|
-
|
|
32
|
-
``memory.resident`` ceilometer_ none
|
|
30
|
+
``cpu`` ceilometer_ none
|
|
31
|
+
``instance_ram_usage`` ceilometer_ none
|
|
33
32
|
============================ ============ ======= =============================
|
|
34
33
|
|
|
35
34
|
.. _ceilometer: https://docs.openstack.org/ceilometer/latest/admin/telemetry-measurements.html#openstack-compute
|
|
@@ -107,10 +106,10 @@ parameter type default Value description
|
|
|
107
106
|
period of all received ones.
|
|
108
107
|
==================== ====== ===================== =============================
|
|
109
108
|
|
|
110
|
-
.. |metrics| replace:: ["
|
|
111
|
-
.. |thresholds| replace:: {"
|
|
112
|
-
.. |weights| replace:: {"
|
|
113
|
-
.. |instance_metrics| replace:: {"
|
|
109
|
+
.. |metrics| replace:: ["instance_cpu_usage", "instance_ram_usage"]
|
|
110
|
+
.. |thresholds| replace:: {"instance_cpu_usage": 0.2, "instance_ram_usage": 0.2}
|
|
111
|
+
.. |weights| replace:: {"instance_cpu_usage_weight": 1.0, "instance_ram_usage_weight": 1.0}
|
|
112
|
+
.. |instance_metrics| replace:: {"instance_cpu_usage": "compute.node.cpu.percent", "instance_ram_usage": "hardware.memory.used"}
|
|
114
113
|
.. |periods| replace:: {"instance": 720, "node": 600}
|
|
115
114
|
|
|
116
115
|
Efficacy Indicator
|
|
@@ -136,8 +135,8 @@ How to use it ?
|
|
|
136
135
|
at1 workload_balancing --strategy workload_stabilization
|
|
137
136
|
|
|
138
137
|
$ openstack optimize audit create -a at1 \
|
|
139
|
-
-p thresholds='{"
|
|
140
|
-
-p metrics='["
|
|
138
|
+
-p thresholds='{"instance_ram_usage": 0.05}' \
|
|
139
|
+
-p metrics='["instance_ram_usage"]'
|
|
141
140
|
|
|
142
141
|
External Links
|
|
143
142
|
--------------
|
{python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/doc/source/strategies/workload_balance.rst
RENAMED
|
@@ -24,8 +24,7 @@ The *workload_balance* strategy requires the following metrics:
|
|
|
24
24
|
======================= ============ ======= =========================
|
|
25
25
|
metric service name plugins comment
|
|
26
26
|
======================= ============ ======= =========================
|
|
27
|
-
``
|
|
28
|
-
since Stein.
|
|
27
|
+
``cpu`` ceilometer_ none
|
|
29
28
|
``memory.resident`` ceilometer_ none
|
|
30
29
|
======================= ============ ======= =========================
|
|
31
30
|
|
|
@@ -65,15 +64,16 @@ Configuration
|
|
|
65
64
|
|
|
66
65
|
Strategy parameters are:
|
|
67
66
|
|
|
68
|
-
============== ======
|
|
69
|
-
parameter type default Value
|
|
70
|
-
============== ======
|
|
71
|
-
``metrics`` String '
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
``
|
|
76
|
-
|
|
67
|
+
============== ====== ==================== ====================================
|
|
68
|
+
parameter type default Value description
|
|
69
|
+
============== ====== ==================== ====================================
|
|
70
|
+
``metrics`` String 'instance_cpu_usage' Workload balance base on cpu or ram
|
|
71
|
+
utilization. Choices:
|
|
72
|
+
['instance_cpu_usage',
|
|
73
|
+
'instance_ram_usage']
|
|
74
|
+
``threshold`` Number 25.0 Workload threshold for migration
|
|
75
|
+
``period`` Number 300 Aggregate time period of ceilometer
|
|
76
|
+
============== ====== ==================== ====================================
|
|
77
77
|
|
|
78
78
|
Efficacy Indicator
|
|
79
79
|
------------------
|
|
@@ -95,7 +95,7 @@ How to use it ?
|
|
|
95
95
|
at1 workload_balancing --strategy workload_balance
|
|
96
96
|
|
|
97
97
|
$ openstack optimize audit create -a at1 -p threshold=26.0 \
|
|
98
|
-
-p period=310 -p metrics=
|
|
98
|
+
-p period=310 -p metrics=instance_cpu_usage
|
|
99
99
|
|
|
100
100
|
External Links
|
|
101
101
|
--------------
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 1.2
|
|
2
2
|
Name: python-watcher
|
|
3
|
-
Version:
|
|
3
|
+
Version: 12.0.0.0rc2
|
|
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
|
|
@@ -47,7 +47,8 @@ Classifier: Programming Language :: Python
|
|
|
47
47
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
48
48
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
49
49
|
Classifier: Programming Language :: Python :: 3
|
|
50
|
-
Classifier: Programming Language :: Python :: 3.6
|
|
51
|
-
Classifier: Programming Language :: Python :: 3.7
|
|
52
50
|
Classifier: Programming Language :: Python :: 3.8
|
|
53
|
-
|
|
51
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
52
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
53
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
54
|
+
Requires-Python: >=3.8
|
{python-watcher-11.0.0.0rc1 → python-watcher-12.0.0.0rc2}/python_watcher.egg-info/SOURCES.txt
RENAMED
|
@@ -309,6 +309,7 @@ releasenotes/notes/workload-balance-base-on-cpu-or-ram-util-3ff4ee968c32b2ed.yam
|
|
|
309
309
|
releasenotes/notes/workload-balance-migration-strategy-a0b05148a57815c0.yaml
|
|
310
310
|
releasenotes/notes/zone-migration-strategy-10f7656a2a01e607.yaml
|
|
311
311
|
releasenotes/source/2023.1.rst
|
|
312
|
+
releasenotes/source/2023.2.rst
|
|
312
313
|
releasenotes/source/conf.py
|
|
313
314
|
releasenotes/source/index.rst
|
|
314
315
|
releasenotes/source/newton.rst
|
|
@@ -417,6 +418,12 @@ watcher/common/loader/__init__.py
|
|
|
417
418
|
watcher/common/loader/base.py
|
|
418
419
|
watcher/common/loader/default.py
|
|
419
420
|
watcher/common/loader/loadable.py
|
|
421
|
+
watcher/common/metal_helper/__init__.py
|
|
422
|
+
watcher/common/metal_helper/base.py
|
|
423
|
+
watcher/common/metal_helper/constants.py
|
|
424
|
+
watcher/common/metal_helper/factory.py
|
|
425
|
+
watcher/common/metal_helper/ironic.py
|
|
426
|
+
watcher/common/metal_helper/maas.py
|
|
420
427
|
watcher/common/policies/__init__.py
|
|
421
428
|
watcher/common/policies/action.py
|
|
422
429
|
watcher/common/policies/action_plan.py
|
|
@@ -445,6 +452,7 @@ watcher/conf/grafana_client.py
|
|
|
445
452
|
watcher/conf/grafana_translators.py
|
|
446
453
|
watcher/conf/ironic_client.py
|
|
447
454
|
watcher/conf/keystone_client.py
|
|
455
|
+
watcher/conf/maas_client.py
|
|
448
456
|
watcher/conf/monasca_client.py
|
|
449
457
|
watcher/conf/neutron_client.py
|
|
450
458
|
watcher/conf/nova_client.py
|
|
@@ -674,8 +682,14 @@ watcher/tests/common/test_ironic_helper.py
|
|
|
674
682
|
watcher/tests/common/test_nova_helper.py
|
|
675
683
|
watcher/tests/common/test_placement_helper.py
|
|
676
684
|
watcher/tests/common/test_service.py
|
|
685
|
+
watcher/tests/common/test_utils.py
|
|
677
686
|
watcher/tests/common/loader/__init__.py
|
|
678
687
|
watcher/tests/common/loader/test_loader.py
|
|
688
|
+
watcher/tests/common/metal_helper/__init__.py
|
|
689
|
+
watcher/tests/common/metal_helper/test_base.py
|
|
690
|
+
watcher/tests/common/metal_helper/test_factory.py
|
|
691
|
+
watcher/tests/common/metal_helper/test_ironic.py
|
|
692
|
+
watcher/tests/common/metal_helper/test_maas.py
|
|
679
693
|
watcher/tests/conf/__init__.py
|
|
680
694
|
watcher/tests/conf/test_list_opts.py
|
|
681
695
|
watcher/tests/db/__init__.py
|
|
@@ -694,6 +708,7 @@ watcher/tests/db/test_strategy.py
|
|
|
694
708
|
watcher/tests/db/utils.py
|
|
695
709
|
watcher/tests/decision_engine/__init__.py
|
|
696
710
|
watcher/tests/decision_engine/fake_goals.py
|
|
711
|
+
watcher/tests/decision_engine/fake_metal_helper.py
|
|
697
712
|
watcher/tests/decision_engine/fake_strategies.py
|
|
698
713
|
watcher/tests/decision_engine/test_gmr.py
|
|
699
714
|
watcher/tests/decision_engine/test_rpcapi.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"git_version": "6b433b35", "is_release": true}
|
|
@@ -6,7 +6,7 @@ description_file =
|
|
|
6
6
|
author = OpenStack
|
|
7
7
|
author_email = openstack-discuss@lists.openstack.org
|
|
8
8
|
home_page = https://docs.openstack.org/watcher/latest/
|
|
9
|
-
python_requires = >=3.
|
|
9
|
+
python_requires = >=3.8
|
|
10
10
|
classifier =
|
|
11
11
|
Environment :: OpenStack
|
|
12
12
|
Intended Audience :: Information Technology
|
|
@@ -17,9 +17,10 @@ classifier =
|
|
|
17
17
|
Programming Language :: Python :: Implementation :: CPython
|
|
18
18
|
Programming Language :: Python :: 3 :: Only
|
|
19
19
|
Programming Language :: Python :: 3
|
|
20
|
-
Programming Language :: Python :: 3.6
|
|
21
|
-
Programming Language :: Python :: 3.7
|
|
22
20
|
Programming Language :: Python :: 3.8
|
|
21
|
+
Programming Language :: Python :: 3.9
|
|
22
|
+
Programming Language :: Python :: 3.10
|
|
23
|
+
Programming Language :: Python :: 3.11
|
|
23
24
|
|
|
24
25
|
[files]
|
|
25
26
|
packages =
|
|
@@ -17,17 +17,17 @@
|
|
|
17
17
|
# limitations under the License.
|
|
18
18
|
#
|
|
19
19
|
|
|
20
|
-
import enum
|
|
21
20
|
import time
|
|
22
21
|
|
|
22
|
+
from oslo_log import log
|
|
23
|
+
|
|
23
24
|
from watcher._i18n import _
|
|
24
25
|
from watcher.applier.actions import base
|
|
25
26
|
from watcher.common import exception
|
|
27
|
+
from watcher.common.metal_helper import constants as metal_constants
|
|
28
|
+
from watcher.common.metal_helper import factory as metal_helper_factory
|
|
26
29
|
|
|
27
|
-
|
|
28
|
-
class NodeState(enum.Enum):
|
|
29
|
-
POWERON = 'on'
|
|
30
|
-
POWEROFF = 'off'
|
|
30
|
+
LOG = log.getLogger(__name__)
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
class ChangeNodePowerState(base.BaseAction):
|
|
@@ -43,8 +43,8 @@ class ChangeNodePowerState(base.BaseAction):
|
|
|
43
43
|
'state': str,
|
|
44
44
|
})
|
|
45
45
|
|
|
46
|
-
The `resource_id` references a
|
|
47
|
-
ironic
|
|
46
|
+
The `resource_id` references a baremetal node id (list of available
|
|
47
|
+
ironic nodes is returned by this command: ``ironic node-list``).
|
|
48
48
|
The `state` value should either be `on` or `off`.
|
|
49
49
|
"""
|
|
50
50
|
|
|
@@ -59,10 +59,14 @@ class ChangeNodePowerState(base.BaseAction):
|
|
|
59
59
|
'type': 'string',
|
|
60
60
|
"minlength": 1
|
|
61
61
|
},
|
|
62
|
+
'resource_name': {
|
|
63
|
+
'type': 'string',
|
|
64
|
+
"minlength": 1
|
|
65
|
+
},
|
|
62
66
|
'state': {
|
|
63
67
|
'type': 'string',
|
|
64
|
-
'enum': [
|
|
65
|
-
|
|
68
|
+
'enum': [metal_constants.PowerState.ON.value,
|
|
69
|
+
metal_constants.PowerState.OFF.value]
|
|
66
70
|
}
|
|
67
71
|
},
|
|
68
72
|
'required': ['resource_id', 'state'],
|
|
@@ -82,10 +86,10 @@ class ChangeNodePowerState(base.BaseAction):
|
|
|
82
86
|
return self._node_manage_power(target_state)
|
|
83
87
|
|
|
84
88
|
def revert(self):
|
|
85
|
-
if self.state ==
|
|
86
|
-
target_state =
|
|
87
|
-
elif self.state ==
|
|
88
|
-
target_state =
|
|
89
|
+
if self.state == metal_constants.PowerState.ON.value:
|
|
90
|
+
target_state = metal_constants.PowerState.OFF.value
|
|
91
|
+
elif self.state == metal_constants.PowerState.OFF.value:
|
|
92
|
+
target_state = metal_constants.PowerState.ON.value
|
|
89
93
|
return self._node_manage_power(target_state)
|
|
90
94
|
|
|
91
95
|
def _node_manage_power(self, state, retry=60):
|
|
@@ -93,30 +97,32 @@ class ChangeNodePowerState(base.BaseAction):
|
|
|
93
97
|
raise exception.IllegalArgumentException(
|
|
94
98
|
message=_("The target state is not defined"))
|
|
95
99
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
current_state =
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
if state in current_state:
|
|
100
|
+
metal_helper = metal_helper_factory.get_helper(self.osc)
|
|
101
|
+
node = metal_helper.get_node(self.node_uuid)
|
|
102
|
+
current_state = node.get_power_state()
|
|
103
|
+
|
|
104
|
+
if state == current_state.value:
|
|
102
105
|
return True
|
|
103
106
|
|
|
104
|
-
if state ==
|
|
105
|
-
|
|
106
|
-
compute_node_id = node_info['extra']['compute_node_id']
|
|
107
|
-
compute_node = nova_client.hypervisors.get(compute_node_id)
|
|
108
|
-
compute_node = compute_node.to_dict()
|
|
107
|
+
if state == metal_constants.PowerState.OFF.value:
|
|
108
|
+
compute_node = node.get_hypervisor_node().to_dict()
|
|
109
109
|
if (compute_node['running_vms'] == 0):
|
|
110
|
-
|
|
111
|
-
|
|
110
|
+
node.set_power_state(state)
|
|
111
|
+
else:
|
|
112
|
+
LOG.warning(
|
|
113
|
+
"Compute node %s has %s running vms and will "
|
|
114
|
+
"NOT be shut off.",
|
|
115
|
+
compute_node["hypervisor_hostname"],
|
|
116
|
+
compute_node['running_vms'])
|
|
117
|
+
return False
|
|
112
118
|
else:
|
|
113
|
-
|
|
119
|
+
node.set_power_state(state)
|
|
114
120
|
|
|
115
|
-
|
|
116
|
-
while
|
|
121
|
+
node = metal_helper.get_node(self.node_uuid)
|
|
122
|
+
while node.get_power_state() == current_state and retry:
|
|
117
123
|
time.sleep(10)
|
|
118
124
|
retry -= 1
|
|
119
|
-
|
|
125
|
+
node = metal_helper.get_node(self.node_uuid)
|
|
120
126
|
if retry > 0:
|
|
121
127
|
return True
|
|
122
128
|
else:
|
|
@@ -130,4 +136,4 @@ class ChangeNodePowerState(base.BaseAction):
|
|
|
130
136
|
|
|
131
137
|
def get_description(self):
|
|
132
138
|
"""Description of the action"""
|
|
133
|
-
return ("Compute node power on/off through
|
|
139
|
+
return ("Compute node power on/off through Ironic or MaaS.")
|
|
@@ -25,6 +25,7 @@ from novaclient import api_versions as nova_api_versions
|
|
|
25
25
|
from novaclient import client as nvclient
|
|
26
26
|
|
|
27
27
|
from watcher.common import exception
|
|
28
|
+
from watcher.common import utils
|
|
28
29
|
|
|
29
30
|
try:
|
|
30
31
|
from ceilometerclient import client as ceclient
|
|
@@ -32,6 +33,12 @@ try:
|
|
|
32
33
|
except ImportError:
|
|
33
34
|
HAS_CEILCLIENT = False
|
|
34
35
|
|
|
36
|
+
try:
|
|
37
|
+
from maas import client as maas_client
|
|
38
|
+
except ImportError:
|
|
39
|
+
maas_client = None
|
|
40
|
+
|
|
41
|
+
|
|
35
42
|
CONF = cfg.CONF
|
|
36
43
|
|
|
37
44
|
_CLIENTS_AUTH_GROUP = 'watcher_clients_auth'
|
|
@@ -74,6 +81,7 @@ class OpenStackClients(object):
|
|
|
74
81
|
self._monasca = None
|
|
75
82
|
self._neutron = None
|
|
76
83
|
self._ironic = None
|
|
84
|
+
self._maas = None
|
|
77
85
|
self._placement = None
|
|
78
86
|
|
|
79
87
|
def _get_keystone_session(self):
|
|
@@ -265,6 +273,23 @@ class OpenStackClients(object):
|
|
|
265
273
|
session=self.session)
|
|
266
274
|
return self._ironic
|
|
267
275
|
|
|
276
|
+
def maas(self):
|
|
277
|
+
if self._maas:
|
|
278
|
+
return self._maas
|
|
279
|
+
|
|
280
|
+
if not maas_client:
|
|
281
|
+
raise exception.UnsupportedError(
|
|
282
|
+
"MAAS client unavailable. Please install python-libmaas.")
|
|
283
|
+
|
|
284
|
+
url = self._get_client_option('maas', 'url')
|
|
285
|
+
api_key = self._get_client_option('maas', 'api_key')
|
|
286
|
+
timeout = self._get_client_option('maas', 'timeout')
|
|
287
|
+
self._maas = utils.async_compat_call(
|
|
288
|
+
maas_client.connect,
|
|
289
|
+
url, apikey=api_key,
|
|
290
|
+
timeout=timeout)
|
|
291
|
+
return self._maas
|
|
292
|
+
|
|
268
293
|
@exception.wrap_keystone_exception
|
|
269
294
|
def placement(self):
|
|
270
295
|
if self._placement:
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Copyright 2023 Cloudbase Solutions
|
|
2
|
+
# All Rights Reserved.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
5
|
+
# not use this file except in compliance with the License. You may obtain
|
|
6
|
+
# a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
13
|
+
# License for the specific language governing permissions and limitations
|
|
14
|
+
# under the License.
|
|
15
|
+
|
|
16
|
+
import abc
|
|
17
|
+
|
|
18
|
+
from watcher.common import exception
|
|
19
|
+
from watcher.common.metal_helper import constants as metal_constants
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class BaseMetalNode(abc.ABC):
|
|
23
|
+
hv_up_when_powered_off = False
|
|
24
|
+
|
|
25
|
+
def __init__(self, nova_node=None):
|
|
26
|
+
self._nova_node = nova_node
|
|
27
|
+
|
|
28
|
+
def get_hypervisor_node(self):
|
|
29
|
+
if not self._nova_node:
|
|
30
|
+
raise exception.Invalid(message="No associated hypervisor.")
|
|
31
|
+
return self._nova_node
|
|
32
|
+
|
|
33
|
+
def get_hypervisor_hostname(self):
|
|
34
|
+
return self.get_hypervisor_node().hypervisor_hostname
|
|
35
|
+
|
|
36
|
+
@abc.abstractmethod
|
|
37
|
+
def get_power_state(self):
|
|
38
|
+
# TODO(lpetrut): document the following methods
|
|
39
|
+
pass
|
|
40
|
+
|
|
41
|
+
@abc.abstractmethod
|
|
42
|
+
def get_id(self):
|
|
43
|
+
"""Return the node id provided by the bare metal service."""
|
|
44
|
+
pass
|
|
45
|
+
|
|
46
|
+
@abc.abstractmethod
|
|
47
|
+
def power_on(self):
|
|
48
|
+
pass
|
|
49
|
+
|
|
50
|
+
@abc.abstractmethod
|
|
51
|
+
def power_off(self):
|
|
52
|
+
pass
|
|
53
|
+
|
|
54
|
+
def set_power_state(self, state):
|
|
55
|
+
state = metal_constants.PowerState(state)
|
|
56
|
+
if state == metal_constants.PowerState.ON:
|
|
57
|
+
self.power_on()
|
|
58
|
+
elif state == metal_constants.PowerState.OFF:
|
|
59
|
+
self.power_off()
|
|
60
|
+
else:
|
|
61
|
+
raise exception.UnsupportedActionType(
|
|
62
|
+
"Cannot set power state: %s" % state)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class BaseMetalHelper(abc.ABC):
|
|
66
|
+
def __init__(self, osc):
|
|
67
|
+
self._osc = osc
|
|
68
|
+
|
|
69
|
+
@property
|
|
70
|
+
def nova_client(self):
|
|
71
|
+
if not getattr(self, "_nova_client", None):
|
|
72
|
+
self._nova_client = self._osc.nova()
|
|
73
|
+
return self._nova_client
|
|
74
|
+
|
|
75
|
+
@abc.abstractmethod
|
|
76
|
+
def list_compute_nodes(self):
|
|
77
|
+
pass
|
|
78
|
+
|
|
79
|
+
@abc.abstractmethod
|
|
80
|
+
def get_node(self, node_id):
|
|
81
|
+
pass
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Copyright 2023 Cloudbase Solutions
|
|
2
|
+
# All Rights Reserved.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
5
|
+
# not use this file except in compliance with the License. You may obtain
|
|
6
|
+
# a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
13
|
+
# License for the specific language governing permissions and limitations
|
|
14
|
+
# under the License.
|
|
15
|
+
|
|
16
|
+
import enum
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class PowerState(str, enum.Enum):
|
|
20
|
+
ON = "on"
|
|
21
|
+
OFF = "off"
|
|
22
|
+
UNKNOWN = "unknown"
|
|
23
|
+
ERROR = "error"
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Copyright 2023 Cloudbase Solutions
|
|
2
|
+
# All Rights Reserved.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
5
|
+
# not use this file except in compliance with the License. You may obtain
|
|
6
|
+
# a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
13
|
+
# License for the specific language governing permissions and limitations
|
|
14
|
+
# under the License.
|
|
15
|
+
|
|
16
|
+
from oslo_config import cfg
|
|
17
|
+
|
|
18
|
+
from watcher.common import clients
|
|
19
|
+
from watcher.common.metal_helper import ironic
|
|
20
|
+
from watcher.common.metal_helper import maas
|
|
21
|
+
|
|
22
|
+
CONF = cfg.CONF
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def get_helper(osc=None):
|
|
26
|
+
# TODO(lpetrut): consider caching this client.
|
|
27
|
+
if not osc:
|
|
28
|
+
osc = clients.OpenStackClients()
|
|
29
|
+
|
|
30
|
+
if CONF.maas_client.url:
|
|
31
|
+
return maas.MaasHelper(osc)
|
|
32
|
+
else:
|
|
33
|
+
return ironic.IronicHelper(osc)
|