2a36f6554e
It looks like deployment does not have `type` attribute anymore: 2018-12-20 11:31:56.827 32486 ERROR rally.task.hook File "/opt/stack/rally-openstack/rally_openstack/hook/fault_injection.py", line 61, in get_cloud_config 2018-12-20 11:31:56.827 32486 ERROR rally.task.hook if deployment_config["type"] != "ExistingCloud": 2018-12-20 11:31:56.827 32486 ERROR rally.task.hook KeyError: 'type' Also correct parent class of FaultInjectionHook to avoid deprecation warning. Change-Id: I2783757386c997a6555e6338aebcda4f9a5f31fa
79 lines
2.5 KiB
Python
79 lines
2.5 KiB
Python
# Copyright 2016: Mirantis Inc.
|
|
# All Rights Reserved.
|
|
#
|
|
# 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.
|
|
|
|
from rally.common import logging
|
|
from rally.common import objects
|
|
from rally.task import hook
|
|
|
|
from rally_openstack import consts
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
|
|
|
|
@hook.configure(name="fault_injection", platform="openstack")
|
|
class FaultInjectionHook(hook.HookAction):
|
|
"""Performs fault injection using os-faults library.
|
|
|
|
Configuration:
|
|
|
|
* action - string that represents an action (more info in [1])
|
|
* verify - whether to verify connection to cloud nodes or not
|
|
|
|
This plugin discovers extra config of ExistingCloud
|
|
and looks for "cloud_config" field. If cloud_config is present then
|
|
it will be used to connect to the cloud by os-faults.
|
|
|
|
Another option is to provide os-faults config file through
|
|
OS_FAULTS_CONFIG env variable. Format of the config can
|
|
be found in [1].
|
|
|
|
[1] http://os-faults.readthedocs.io/en/latest/usage.html
|
|
"""
|
|
|
|
CONFIG_SCHEMA = {
|
|
"type": "object",
|
|
"$schema": consts.JSON_SCHEMA,
|
|
"properties": {
|
|
"action": {"type": "string"},
|
|
"verify": {"type": "boolean"},
|
|
},
|
|
"required": [
|
|
"action",
|
|
],
|
|
"additionalProperties": False,
|
|
}
|
|
|
|
def get_cloud_config(self):
|
|
deployment = objects.Deployment.get(self.task["deployment_uuid"])
|
|
deployment_config = deployment["config"]
|
|
extra_config = deployment_config.get("extra", {})
|
|
return extra_config.get("cloud_config")
|
|
|
|
def run(self):
|
|
import os_faults
|
|
|
|
# get cloud configuration
|
|
cloud_config = self.get_cloud_config()
|
|
|
|
# connect to the cloud
|
|
injector = os_faults.connect(cloud_config)
|
|
|
|
# verify that all nodes are available
|
|
if self.config.get("verify"):
|
|
injector.verify()
|
|
|
|
LOG.debug("Injecting fault: %s" % self.config["action"])
|
|
os_faults.human_api(injector, self.config["action"])
|