We are grateful to announce the release of: python-watcher 0.32.0: OpenStack Watcher provides a flexible and scalable resource optimization service for multi-tenant OpenStack- based clouds. This release is part of the ocata release series. The source is available from: https://github.com/openstack/watcher Download the package from: https://tarballs.openstack.org/python-watcher/ Please report issues through launchpad: http://bugs.launchpad.net/watcher For more details, please see below. Changes in python-watcher 0.30.0..0.32.0 ---------------------------------------- 46f511a Implemented base + moved plugins & service conf 25da163 Add audit.planner events 19fe0a0 Add audit.strategy events 6f9f67c Implemented audit.delete notification 0c0a9c8 Implemented audit.create notification 9405eb0 Implemented audit.update notification 54c45a2 Update devstack plugin to add notification param 4bebf88 Added notification_level config option cdda06c Removed status_topic config parameter 395ccbd Remove stale notification code cdee271 Added notifications documentation page b27e5b9 Added support for versioned notifications 5c79389 Add doc for vm_workload_consolidation strategy 3532c74 Updated from global requirements 9761207 Add doc for workload-stabilization spec 72c9d86 Fix the typo in efficacy_indicator module 5e9a2f6 Fix NoMetricValuesForInstance error b6e17a8 Use oslo_log instead of logging 3e392b0 optimized 'find_instance()' ea7e6a7 Fix workload stabilization strategy to ignore disabled hosts 090d5d1 Added Tempest API tests for /scoring_engines 4973dd6 Remove unused SUBMITTED audit state b4b17ba Added action_plan ObjectField for Action 060c369 Added audit & strategy ObjectField for ActionPlan f9df54c Added goal & strategy ObjectField for Audit 54cf10b Added goal+strategy ObjectField for AuditTemplate f54aca7 Added 'goal' ObjectField for Strategy object fc31dae Refactored Watcher objects to use OVO ed95d62 Removed deadline, version, extra & host_aggregate 750e6bf Eager loading on One-to-X foreign keys afdfd81 [Doc] Fix strategy list optional argument aae3f79 Use Enum value instead of String Value Fixing Gating Issue. b48b881 Change "Openstack" to "OpenStack" e681645 Avoid use xx=[] for parameter to initialize it's value ef0d133 Transform KB into MB and normalize CPU 40f98bf Updated from global requirements 35e6565 Delete python bytecode file 3de2d36 Add strategy template doc 6331274 Drop MANIFEST.in - it's not needed by pbr 48cc6b2 Add Audit Scope Handler c34a1ac Add service object to the watcher_db_schema e7a1e14 Add service supervisor 0a7a9e9 Updated from global requirements 3129f31 Added Model base class + related doc cd2cd18 Add RECOMMENDED state f1a2de4 Enable release notes translation 10cbcd2 Added composite unique name constraints f2e5702 Added missing test on GMR plugin 96357ae Moved Watcher doc plugin outside main package 631e139 Stop adding ServiceAvailable group option db3b5b3 HasLength() rewritten to assertEqual() 74acf2a Updated from global requirements abe3739 Fix typo in docstring 8b37bef Remove duplicate unittest 0f9361e Fix typo in hooks.py c8d6059 Docstrings should not start with a space e7888b2 Fix capital letter in doc d0ea20e Doc updates 55591cc Watcher utils cleanup 5112f29 Fixed GMR configuration issue 83d06ce Add constraint target to tox.ini and remove 1 dep 0d61667 Updated from global requirements d8ae88d 'tox -e py27' failed 9eeaa07 Fix typo in docstring from "interprete" to "interpret" 88b04db Fix a typo in watcher.po 1fc59cc Deactivate dashboard plugin until fixed 7714f48 remove redundant word f741434 Fix a typo in basic_consolidation.py 8cf233a Update Watcher description 56a9dd0 Test code tidy up f79bed0 Update reno for stable/newton 55537d2 Fixed issue on compute nodes iteration e621f5d Refactored Tests to load scenarios from file b2fe413 Updated from global requirements b6ab86c Remove group_by statement in metric queries Diffstat (except docs and test files) ------------------------------------- MANIFEST.in | 6 - README.rst | 6 +- devstack/lib/watcher | 2 + devstack/local.conf.controller | 2 +- .../infra-optim-exception.json | 16 + .../plantuml/sequence_overview_watcher_usage.txt | 2 +- .../plantuml/watcher_db_schema_diagram.txt | 68 +- .../images/sequence_overview_watcher_usage.png | Bin 46772 -> 46482 bytes .../strategies/basic-server-consolidation.rst | 96 +++ .../strategies/vm_workload_consolidation.rst | 100 +++ etc/watcher/policy.json | 6 +- releasenotes/source/conf.py | 3 + releasenotes/source/index.rst | 3 +- releasenotes/source/newton.rst | 6 + requirements.txt | 31 +- setup.cfg | 4 +- test-requirements.txt | 12 +- tox.ini | 16 +- watcher/api/acl.py | 2 +- watcher/api/controllers/root.py | 2 +- watcher/api/controllers/v1/__init__.py | 13 + watcher/api/controllers/v1/action.py | 2 +- watcher/api/controllers/v1/audit.py | 59 +- watcher/api/controllers/v1/audit_template.py | 60 +- watcher/api/controllers/v1/efficacy_indicator.py | 2 +- watcher/api/controllers/v1/service.py | 263 ++++++++ watcher/api/controllers/v1/strategy.py | 2 +- watcher/api/controllers/v1/utils.py | 24 +- watcher/api/hooks.py | 2 +- watcher/api/middleware/auth_token.py | 2 +- watcher/applier/action_plan/default.py | 30 +- watcher/applier/manager.py | 45 +- watcher/applier/messaging/event_types.py | 25 - watcher/applier/rpcapi.py | 43 +- watcher/applier/workflow_engine/base.py | 9 +- watcher/applier/workflow_engine/default.py | 17 +- watcher/cmd/api.py | 8 +- watcher/cmd/applier.py | 6 +- watcher/cmd/dbmanage.py | 5 +- watcher/cmd/decisionengine.py | 6 +- watcher/cmd/sync.py | 4 +- watcher/common/ceilometer_helper.py | 6 +- watcher/common/exception.py | 34 +- watcher/common/messaging/__init__.py | 0 watcher/common/messaging/events/__init__.py | 0 watcher/common/messaging/events/event.py | 54 -- .../common/messaging/events/event_dispatcher.py | 78 --- watcher/common/messaging/messaging_handler.py | 120 ---- watcher/common/messaging/notification_handler.py | 47 -- watcher/common/messaging/utils/__init__.py | 0 watcher/common/messaging/utils/observable.py | 57 -- watcher/common/messaging/utils/synchronization.py | 22 - watcher/common/nova_helper.py | 21 +- watcher/common/observable.py | 57 ++ watcher/common/rpc.py | 14 +- watcher/common/service.py | 187 +++--- watcher/common/service_manager.py | 50 ++ watcher/common/synchronization.py | 22 + watcher/common/utils.py | 49 +- watcher/conf/__init__.py | 25 + watcher/conf/_opts.py | 56 ++ watcher/conf/opts.py | 95 +++ watcher/conf/plugins.py | 72 +++ watcher/conf/service.py | 49 ++ watcher/db/api.py | 226 +++++-- watcher/db/sqlalchemy/api.py | 417 +++++++------ watcher/db/sqlalchemy/models.py | 133 ++-- watcher/decision_engine/audit/base.py | 50 +- watcher/decision_engine/audit/continuous.py | 38 +- watcher/decision_engine/cluster/history/base.py | 2 +- watcher/decision_engine/goal/efficacy/specs.py | 4 +- watcher/decision_engine/manager.py | 49 +- .../decision_engine/messaging/audit_endpoint.py | 4 +- watcher/decision_engine/messaging/events.py | 26 - watcher/decision_engine/model/base.py | 36 ++ watcher/decision_engine/model/collector/base.py | 16 +- watcher/decision_engine/model/collector/nova.py | 12 +- watcher/decision_engine/model/mapping.py | 16 +- watcher/decision_engine/model/model_root.py | 54 +- watcher/decision_engine/model/notification/base.py | 9 - watcher/decision_engine/planner/default.py | 6 +- watcher/decision_engine/rpcapi.py | 41 +- watcher/decision_engine/scope/__init__.py | 0 watcher/decision_engine/scope/base.py | 38 ++ watcher/decision_engine/scope/default.py | 219 +++++++ watcher/decision_engine/strategy/context/base.py | 41 +- .../decision_engine/strategy/context/default.py | 10 +- .../decision_engine/strategy/strategies/base.py | 23 +- .../strategy/strategies/basic_consolidation.py | 154 ++--- .../strategies/vm_workload_consolidation.py | 85 ++- .../strategy/strategies/workload_stabilization.py | 70 ++- watcher/decision_engine/sync.py | 40 +- watcher/doc.py | 102 --- watcher/locale/fr/LC_MESSAGES/watcher.po | 2 +- watcher/notifications/__init__.py | 26 + watcher/notifications/audit.py | 310 ++++++++++ watcher/notifications/base.py | 212 +++++++ watcher/notifications/exception.py | 55 ++ watcher/notifications/goal.py | 53 ++ watcher/notifications/strategy.py | 53 ++ watcher/objects/__init__.py | 58 +- watcher/objects/action.py | 162 ++--- watcher/objects/action_plan.py | 182 +++--- watcher/objects/audit.py | 213 ++++--- watcher/objects/audit_template.py | 189 +++--- watcher/objects/base.py | 629 ++++--------------- watcher/objects/efficacy_indicator.py | 62 +- watcher/objects/fields.py | 144 +++++ watcher/objects/goal.py | 65 +- watcher/objects/scoring_engine.py | 123 +--- watcher/objects/service.py | 141 +++++ watcher/objects/strategy.py | 120 ++-- watcher/objects/utils.py | 38 +- watcher/opts.py | 100 --- .../action_plan/test_default_action_handler.py | 25 +- .../test_default_workflow_engine.py | 2 +- .../messaging/event/test_event_dispatcher.py | 84 --- .../common/messaging/test_messaging_handler.py | 78 --- .../common/messaging/test_notification_handler.py | 56 -- .../decision_engine/audit/test_audit_handlers.py | 181 ++++-- .../loading/test_collector_loader.py | 3 +- .../messaging/test_audit_endpoint.py | 4 +- .../decision_engine/model/data/scenario_1.xml | 47 ++ .../model/data/scenario_1_with_metrics.xml | 8 + .../model/data/scenario_2_with_metrics.xml | 13 + .../model/data/scenario_3_with_2_nodes.xml | 8 + .../model/data/scenario_3_with_metrics.xml | 9 + .../data/scenario_4_with_1_node_no_instance.xml | 3 + .../model/data/scenario_5_with_instance_disk_0.xml | 5 + .../model/data/scenario_6_with_2_nodes.xml | 10 + .../model/data/scenario_7_with_2_nodes.xml | 10 + .../model/data/scenario_8_with_4_nodes.xml | 16 + ...nario_9_with_3_active_plus_1_disabled_nodes.xml | 16 + .../model/faker_cluster_and_metrics.py | 161 +++++ .../decision_engine/model/faker_cluster_state.py | 157 +++++ .../model/faker_metrics_collector.py | 255 ++++++++ .../model/notification/fake_managers.py | 42 +- .../model/notification/test_notifications.py | 6 +- .../model/notification/test_nova_notifications.py | 3 +- .../planner/test_default_planner.py | 23 +- .../strategy/context/test_strategy_context.py | 17 +- .../strategies/faker_cluster_and_metrics.py | 270 -------- .../strategy/strategies/faker_cluster_state.py | 414 ------------- .../strategy/strategies/faker_metrics_collector.py | 258 -------- .../strategies/test_basic_consolidation.py | 49 +- .../strategy/strategies/test_dummy_strategy.py | 12 +- .../strategy/strategies/test_dummy_with_scorer.py | 3 +- .../strategies/test_outlet_temp_control.py | 15 +- .../strategy/strategies/test_uniform_airflow.py | 15 +- .../strategies/test_vm_workload_consolidation.py | 12 +- .../strategy/strategies/test_workload_balance.py | 15 +- .../strategies/test_workload_stabilization.py | 39 +- watcher_tempest_plugin/config.py | 12 +- watcher_tempest_plugin/plugin.py | 8 +- .../services/infra_optim/v1/json/client.py | 49 +- 246 files changed, 10640 insertions(+), 5673 deletions(-) Requirements updates -------------------- diff --git a/requirements.txt b/requirements.txt index 94e2867..0265513 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,2 +8,2 @@ jsonpatch>=1.1 # BSD -keystoneauth1>=2.10.0 # Apache-2.0 -keystonemiddleware!=4.1.0,!=4.5.0,>=4.0.0 # Apache-2.0 +keystoneauth1>=2.14.0 # Apache-2.0 +keystonemiddleware!=4.5.0,>=4.2.0 # Apache-2.0 @@ -13 +13 @@ oslo.cache>=1.5.0 # Apache-2.0 -oslo.config>=3.14.0 # Apache-2.0 +oslo.config!=3.18.0,>=3.14.0 # Apache-2.0 @@ -15 +15 @@ oslo.context>=2.9.0 # Apache-2.0 -oslo.db>=4.10.0 # Apache-2.0 +oslo.db!=4.13.1,!=4.13.2,>=4.11.0 # Apache-2.0 @@ -17 +17 @@ oslo.i18n>=2.1.0 # Apache-2.0 -oslo.log>=1.14.0 # Apache-2.0 +oslo.log>=3.11.0 # Apache-2.0 @@ -19 +19 @@ oslo.messaging>=5.2.0 # Apache-2.0 -oslo.policy>=1.9.0 # Apache-2.0 +oslo.policy>=1.15.0 # Apache-2.0 @@ -23 +23,2 @@ oslo.service>=1.10.0 # Apache-2.0 -oslo.utils>=3.16.0 # Apache-2.0 +oslo.utils>=3.18.0 # Apache-2.0 +oslo.versionedobjects>=1.13.0 # Apache-2.0 @@ -25,3 +26,3 @@ PasteDeploy>=1.5.0 # MIT -pbr>=1.6 # Apache-2.0 -pecan!=1.0.2,!=1.0.3,!=1.0.4,>=1.0.0 # BSD -PrettyTable<0.8,>=0.7 # BSD +pbr>=1.8 # Apache-2.0 +pecan!=1.0.2,!=1.0.3,!=1.0.4,!=1.2,>=1.0.0 # BSD +PrettyTable<0.8,>=0.7.1 # BSD @@ -31,2 +32,2 @@ python-cinderclient!=1.7.0,!=1.7.1,>=1.6.0 # Apache-2.0 -python-glanceclient!=2.4.0,>=2.3.0 # Apache-2.0 -python-keystoneclient!=2.1.0,>=2.0.0 # Apache-2.0 +python-glanceclient>=2.5.0 # Apache-2.0 +python-keystoneclient>=3.6.0 # Apache-2.0 @@ -35 +36 @@ python-novaclient!=2.33.0,>=2.29.0 # Apache-2.0 -python-openstackclient>=2.1.0 # Apache-2.0 +python-openstackclient>=3.3.0 # Apache-2.0 @@ -38 +39 @@ SQLAlchemy<1.1.0,>=1.0.10 # MIT -stevedore>=1.16.0 # Apache-2.0 +stevedore>=1.17.1 # Apache-2.0 @@ -40 +41 @@ taskflow>=1.26.0 # Apache-2.0 -WebOb>=1.2.3 # MIT +WebOb>=1.6.0 # MIT diff --git a/test-requirements.txt b/test-requirements.txt index 0ccc117..cf035ca 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -5 +5 @@ -coverage>=3.6 # Apache-2.0 +coverage>=4.0 # Apache-2.0 @@ -7 +7 @@ doc8 # Apache-2.0 -freezegun # Apache-2.0 +freezegun>=0.3.6 # Apache-2.0 @@ -11 +11 @@ oslotest>=1.10.0 # Apache-2.0 -os-testr>=0.7.0 # Apache-2.0 +os-testr>=0.8.0 # Apache-2.0 @@ -18,2 +18,2 @@ testtools>=1.4.0 # MIT -oslosphinx!=3.4.0,>=2.5.0 # Apache-2.0 -sphinx!=1.3b1,<1.3,>=1.2.1 # BSD +oslosphinx>=4.7.0 # Apache-2.0 +sphinx!=1.3b1,<1.4,>=1.2.1 # BSD @@ -23 +23 @@ sphinxcontrib-pecanwsme>=0.8 # Apache-2.0 -reno>=1.8.0 # Apache2 +reno>=1.8.0 # Apache-2.0