1 # Copyright (c) 2017 Intel Corporation
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
15 from oslo_utils import excutils
17 from yardstick.common import constants
20 class ProcessExecutionError(RuntimeError):
21 def __init__(self, message, returncode):
22 super(ProcessExecutionError, self).__init__(message)
23 self.returncode = returncode
26 class ErrorClass(object):
28 def __init__(self, *args, **kwargs):
29 if 'test' not in kwargs:
32 def __getattr__(self, item):
36 class YardstickException(Exception):
37 """Base Yardstick Exception.
39 To correctly use this class, inherit from it and define
40 a 'message' property. That message will get printf'd
41 with the keyword arguments provided to the constructor.
43 Based on NeutronException class.
45 message = "An unknown exception occurred."
47 def __init__(self, **kwargs):
49 super(YardstickException, self).__init__(self.message % kwargs)
50 self.msg = self.message % kwargs
51 except Exception: # pylint: disable=broad-except
52 with excutils.save_and_reraise_exception() as ctxt:
53 if not self.use_fatal_exceptions():
55 # at least get the core message out if something happened
56 super(YardstickException, self).__init__(self.message)
61 def use_fatal_exceptions(self):
62 """Is the instance using fatal exceptions.
64 :returns: Always returns False.
69 class ResourceCommandError(YardstickException):
70 message = 'Command: "%(command)s" Failed, stderr: "%(stderr)s"'
73 class ContextUpdateCollectdForNodeError(YardstickException):
74 message = 'Cannot find node %(attr_name)s'
77 class FunctionNotImplemented(YardstickException):
78 message = ('The function "%(function_name)s" is not implemented in '
79 '"%(class_name)" class.')
82 class InfluxDBConfigurationMissing(YardstickException):
83 message = ('InfluxDB configuration is not available. Add "influxdb" as '
84 'a dispatcher and the configuration section')
87 class YardstickBannedModuleImported(YardstickException):
88 message = 'Module "%(module)s" cannnot be imported. Reason: "%(reason)s"'
91 class IXIAUnsupportedProtocol(YardstickException):
92 message = 'Protocol "%(protocol)" is not supported in IXIA'
95 class PayloadMissingAttributes(YardstickException):
96 message = ('Error instantiating a Payload class, missing attributes: '
97 '%(missing_attributes)s')
100 class HeatTemplateError(YardstickException):
101 message = ('Error in Heat during the creation of the OpenStack stack '
105 class IPv6RangeError(YardstickException):
106 message = 'Start IP "%(start_ip)s" is greater than end IP "%(end_ip)s"'
109 class TrafficProfileNotImplemented(YardstickException):
110 message = 'No implementation for traffic profile %(profile_class)s.'
113 class TrafficProfileRate(YardstickException):
114 message = 'Traffic profile rate must be "<number>[fps|%]"'
117 class DPDKSetupDriverError(YardstickException):
118 message = '"igb_uio" driver is not loaded'
121 class OVSUnsupportedVersion(YardstickException):
122 message = ('Unsupported OVS version "%(ovs_version)s". Please check the '
123 'config. OVS to DPDK version map: %(ovs_to_dpdk_map)s.')
126 class OVSHugepagesInfoError(YardstickException):
127 message = 'MemInfo cannnot be retrieved.'
130 class OVSHugepagesNotConfigured(YardstickException):
131 message = 'HugePages are not configured in this system.'
134 class OVSHugepagesZeroFree(YardstickException):
135 message = ('There are no HugePages free in this system. Total HugePages '
136 'configured: %(total_hugepages)s')
139 class OVSDeployError(YardstickException):
140 message = 'OVS deploy tool failed with error: %(stderr)s.'
143 class OVSSetupError(YardstickException):
144 message = 'OVS setup error. Command: %(command)s. Error: %(error)s.'
147 class LibvirtCreateError(YardstickException):
148 message = 'Error creating the virtual machine. Error: %(error)s.'
151 class LibvirtQemuImageBaseImageNotPresent(YardstickException):
152 message = ('Error creating the qemu image for %(vm_image)s. Base image: '
153 '%(base_image)s. Base image not present in execution host or '
157 class LibvirtQemuImageCreateError(YardstickException):
158 message = ('Error creating the qemu image for %(vm_image)s. Base image: '
159 '%(base_image)s. Error: %(error)s.')
162 class SSHError(YardstickException):
163 message = '%(error_msg)s'
166 class SSHTimeout(SSHError):
170 class IncorrectConfig(YardstickException):
171 message = '%(error_msg)s'
174 class IncorrectSetup(YardstickException):
175 message = '%(error_msg)s'
178 class IncorrectNodeSetup(IncorrectSetup):
182 class ScenarioConfigContextNameNotFound(YardstickException):
183 message = 'Context for host name "%(host_name)s" not found'
186 class StackCreationInterrupt(YardstickException):
187 message = 'Stack create interrupted.'
190 class TaskRenderArgumentError(YardstickException):
191 message = 'Error reading the task input arguments'
194 class TaskReadError(YardstickException):
195 message = 'Failed to read task %(task_file)s'
198 class TaskRenderError(YardstickException):
199 message = 'Failed to render template:\n%(input_task)s'
202 class RunnerIterationIPCSetupActionNeeded(YardstickException):
203 message = ('IterationIPC needs the "setup" action to retrieve the VNF '
204 'handling processes PIDs to receive the messages sent')
207 class RunnerIterationIPCNoCtxs(YardstickException):
208 message = 'Benchmark "setup" action did not return any VNF process PID'
211 class TimerTimeout(YardstickException):
212 message = 'Timer timeout expired, %(timeout)s seconds'
215 class WaitTimeout(YardstickException):
216 message = 'Wait timeout while waiting for condition'
219 class PktgenActionError(YardstickException):
220 message = 'Error in "%(action)s" action'
223 class KubernetesApiException(YardstickException):
224 message = ('Kubernetes API errors. Action: %(action)s, '
225 'resource: %(resource)s')
228 class KubernetesConfigFileNotFound(YardstickException):
229 message = 'Config file (%s) not found' % constants.K8S_CONF_FILE
232 class KubernetesTemplateInvalidVolumeType(YardstickException):
233 message = 'No valid "volume" types present in %(volume)s'
236 class KubernetesSSHPortNotDefined(YardstickException):
237 message = 'Port 22 needs to be defined'
240 class KubernetesServiceObjectNotDefined(YardstickException):
241 message = 'ServiceObject is not defined'
244 class KubernetesServiceObjectDefinitionError(YardstickException):
245 message = ('Kubernetes Service object definition error, missing '
246 'parameters: %(missing_parameters)s')
249 class KubernetesServiceObjectNameError(YardstickException):
250 message = ('Kubernetes Service object name "%(name)s" does not comply'
254 class KubernetesCRDObjectDefinitionError(YardstickException):
255 message = ('Kubernetes Custom Resource Definition Object error, missing '
256 'parameters: %(missing_parameters)s')
259 class KubernetesNetworkObjectDefinitionError(YardstickException):
260 message = ('Kubernetes Network object definition error, missing '
261 'parameters: %(missing_parameters)s')
264 class KubernetesNetworkObjectKindMissing(YardstickException):
265 message = 'Kubernetes kind "Network" is not defined'
268 class KubernetesWrongRestartPolicy(YardstickException):
269 message = 'Restart policy "%(rpolicy)s" is not valid'
272 class KubernetesContainerPortNotDefined(YardstickException):
273 message = 'Container port not defined in "%(port)s"'
276 class KubernetesContainerWrongImagePullPolicy(YardstickException):
277 message = 'Image pull policy must be "Always", "IfNotPresent" or "Never"'
280 class KubernetesContainerCommandType(YardstickException):
281 message = '"args" and "command" must be string or list of strings'
284 class ScenarioCreateNetworkError(YardstickException):
285 message = 'Create Neutron Network Scenario failed'
288 class ScenarioCreateSubnetError(YardstickException):
289 message = 'Create Neutron Subnet Scenario failed'
292 class ScenarioDeleteRouterError(YardstickException):
293 message = 'Delete Neutron Router Scenario failed'
296 class MissingPodInfoError(YardstickException):
297 message = 'Missing pod args, please check'
300 class UnsupportedPodFormatError(YardstickException):
301 message = 'Failed to load pod info, unsupported format'
304 class ScenarioCreateRouterError(YardstickException):
305 message = 'Create Neutron Router Scenario failed'
308 class ScenarioRemoveRouterIntError(YardstickException):
309 message = 'Remove Neutron Router Interface Scenario failed'
312 class ScenarioCreateFloatingIPError(YardstickException):
313 message = 'Create Neutron Floating IP Scenario failed'
316 class ScenarioDeleteFloatingIPError(YardstickException):
317 message = 'Delete Neutron Floating IP Scenario failed'
320 class ScenarioCreateSecurityGroupError(YardstickException):
321 message = 'Create Neutron Security Group Scenario failed'
324 class ScenarioDeleteNetworkError(YardstickException):
325 message = 'Delete Neutron Network Scenario failed'
328 class ScenarioCreateServerError(YardstickException):
329 message = 'Nova Create Server Scenario failed'
332 class ScenarioDeleteServerError(YardstickException):
333 message = 'Delete Server Scenario failed'
336 class ScenarioCreateKeypairError(YardstickException):
337 message = 'Nova Create Keypair Scenario failed'
340 class ScenarioDeleteKeypairError(YardstickException):
341 message = 'Nova Delete Keypair Scenario failed'
344 class ScenarioAttachVolumeError(YardstickException):
345 message = 'Nova Attach Volume Scenario failed'
348 class ScenarioGetServerError(YardstickException):
349 message = 'Nova Get Server Scenario failed'
352 class ScenarioGetFlavorError(YardstickException):
353 message = 'Nova Get Falvor Scenario failed'
356 class ScenarioCreateVolumeError(YardstickException):
357 message = 'Cinder Create Volume Scenario failed'
360 class ScenarioDeleteVolumeError(YardstickException):
361 message = 'Cinder Delete Volume Scenario failed'
364 class ScenarioDetachVolumeError(YardstickException):
365 message = 'Cinder Detach Volume Scenario failed'
368 class ApiServerError(YardstickException):
369 message = 'An unkown exception happened to Api Server!'
372 class UploadOpenrcError(ApiServerError):
373 message = 'Upload openrc ERROR!'
376 class UpdateOpenrcError(ApiServerError):
377 message = 'Update openrc ERROR!'
380 class ScenarioCreateImageError(YardstickException):
381 message = 'Glance Create Image Scenario failed'
384 class ScenarioDeleteImageError(YardstickException):
385 message = 'Glance Delete Image Scenario failed'
388 class IxNetworkClientNotConnected(YardstickException):
389 message = 'IxNetwork client not connected to a TCL server'
392 class IxNetworkFlowNotPresent(YardstickException):
393 message = 'Flow Group "%(flow_group)s" is not present'
396 class IxNetworkFieldNotPresentInStackItem(YardstickException):
397 message = 'Field "%(field_name)s" not present in stack item %(stack_item)s'
400 class SLAValidationError(YardstickException):
401 message = '%(case_name)s SLA validation failed. Error: %(error_msg)s'
404 class AclMissingActionArguments(YardstickException):
405 message = ('Missing ACL action parameter '
406 '[action=%(action_name)s parameter=%(action_param)s]')
409 class AclUnknownActionTemplate(YardstickException):
410 message = 'No ACL CLI template found for "%(action_name)s" action'
413 class InvalidMacAddress(YardstickException):
414 message = 'Mac address "%(mac_address)s" is invalid'