Added Actuator Strategy
This strategy now allow us to create action plans with an explicit set of actions. Co-Authored-By: Mikhail Kizilov <kizilov.mikhail@gmail.com> Change-Id: I7b04b9936ce5f3b5b38f319da7f8737e0f3eea88 Closes-Bug: #1659243
This commit is contained in:
committed by
Mikhail Kizilov
parent
529b0d34ee
commit
0b31828a01
@@ -14,6 +14,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from watcher.decision_engine.strategy.strategies import actuation
|
||||
from watcher.decision_engine.strategy.strategies import basic_consolidation
|
||||
from watcher.decision_engine.strategy.strategies import dummy_strategy
|
||||
from watcher.decision_engine.strategy.strategies import dummy_with_scorer
|
||||
@@ -26,6 +27,7 @@ from watcher.decision_engine.strategy.strategies import \
|
||||
from watcher.decision_engine.strategy.strategies import workload_balance
|
||||
from watcher.decision_engine.strategy.strategies import workload_stabilization
|
||||
|
||||
Actuator = actuation.Actuator
|
||||
BasicConsolidation = basic_consolidation.BasicConsolidation
|
||||
OutletTempControl = outlet_temp_control.OutletTempControl
|
||||
DummyStrategy = dummy_strategy.DummyStrategy
|
||||
@@ -37,7 +39,7 @@ WorkloadStabilization = workload_stabilization.WorkloadStabilization
|
||||
UniformAirflow = uniform_airflow.UniformAirflow
|
||||
NoisyNeighbor = noisy_neighbor.NoisyNeighbor
|
||||
|
||||
__all__ = ("BasicConsolidation", "OutletTempControl", "DummyStrategy",
|
||||
"DummyWithScorer", "VMWorkloadConsolidation", "WorkloadBalance",
|
||||
"WorkloadStabilization", "UniformAirflow", "NoisyNeighbor",
|
||||
"SavingEnergy")
|
||||
__all__ = ("Actuator", "BasicConsolidation", "OutletTempControl",
|
||||
"DummyStrategy", "DummyWithScorer", "VMWorkloadConsolidation",
|
||||
"WorkloadBalance", "WorkloadStabilization", "UniformAirflow",
|
||||
"NoisyNeighbor", "SavingEnergy")
|
||||
|
||||
99
watcher/decision_engine/strategy/strategies/actuation.py
Normal file
99
watcher/decision_engine/strategy/strategies/actuation.py
Normal file
@@ -0,0 +1,99 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright (c) 2017 b<>com
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
# implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
"""
|
||||
*Actuator*
|
||||
|
||||
This strategy allows anyone to create an action plan with a predefined set of
|
||||
actions. This strategy can be used for 2 different purposes:
|
||||
|
||||
- Test actions
|
||||
- Use this strategy based on an event trigger to perform some explicit task
|
||||
|
||||
"""
|
||||
|
||||
from oslo_log import log
|
||||
|
||||
from watcher._i18n import _
|
||||
from watcher.decision_engine.strategy.strategies import base
|
||||
|
||||
LOG = log.getLogger(__name__)
|
||||
|
||||
|
||||
class Actuator(base.UnclassifiedStrategy):
|
||||
"""Actuator that simply executes the actions given as parameter"""
|
||||
|
||||
@classmethod
|
||||
def get_name(cls):
|
||||
return "actuator"
|
||||
|
||||
@classmethod
|
||||
def get_display_name(cls):
|
||||
return _("Actuator")
|
||||
|
||||
@classmethod
|
||||
def get_translatable_display_name(cls):
|
||||
return "Actuator"
|
||||
|
||||
@classmethod
|
||||
def get_schema(cls):
|
||||
# Mandatory default setting for each element
|
||||
return {
|
||||
"$schema": "http://json-schema.org/draft-04/schema#",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"actions": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"action_type": {
|
||||
"type": "string"
|
||||
},
|
||||
"resource_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"input_parameters": {
|
||||
"type": "object",
|
||||
"properties": {},
|
||||
"additionalProperties": True
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"action_type", "input_parameters"
|
||||
],
|
||||
"additionalProperties": True,
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"actions"
|
||||
]
|
||||
}
|
||||
|
||||
@property
|
||||
def actions(self):
|
||||
return self.input_parameters.get('actions', [])
|
||||
|
||||
def pre_execute(self):
|
||||
LOG.info("Preparing Actuator strategy...")
|
||||
|
||||
def do_execute(self):
|
||||
for action in self.actions:
|
||||
self.solution.add_action(**action)
|
||||
|
||||
def post_execute(self):
|
||||
pass
|
||||
Reference in New Issue
Block a user