azurelinuxagent/common/exception.py (107 lines of code) (raw):
# Microsoft Azure Linux Agent
#
# Copyright 2018 Microsoft Corporation
#
# 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.
#
# Requires Python 2.6+ and Openssl 1.0+
#
"""
Defines all exceptions
"""
class ExitException(BaseException):
"""
Used to exit the agent's process
"""
def __init__(self, reason):
super(ExitException, self).__init__()
self.reason = reason
class AgentUpgradeExitException(ExitException):
"""
Used to exit the agent's process due to Agent Upgrade
"""
class AgentError(Exception):
"""
Base class of agent error.
"""
def __init__(self, msg, inner=None):
msg = u"[{0}] {1}".format(type(self).__name__, msg)
if inner is not None:
msg = u"{0}\nInner error: {1}".format(msg, inner)
super(AgentError, self).__init__(msg)
class AgentConfigError(AgentError):
"""
When configure file is not found or malformed.
"""
def __init__(self, msg=None, inner=None):
super(AgentConfigError, self).__init__(msg, inner)
class AgentMemoryExceededException(AgentError):
"""
When Agent memory limit reached.
"""
def __init__(self, msg=None, inner=None):
super(AgentMemoryExceededException, self).__init__(msg, inner)
class AgentNetworkError(AgentError):
"""
When network is not available.
"""
def __init__(self, msg=None, inner=None):
super(AgentNetworkError, self).__init__(msg, inner)
class AgentUpdateError(AgentError):
"""
When agent failed to update.
"""
def __init__(self, msg=None, inner=None):
super(AgentUpdateError, self).__init__(msg, inner)
class AgentFamilyMissingError(AgentError):
"""
When agent family is missing.
"""
def __init__(self, msg=None, inner=None):
super(AgentFamilyMissingError, self).__init__(msg, inner)
class CGroupsException(AgentError):
"""
Exception to classify any cgroups related issue.
"""
def __init__(self, msg=None, inner=None):
super(CGroupsException, self).__init__(msg, inner)
class ExtensionError(AgentError):
"""
When failed to execute an extension
"""
def __init__(self, msg=None, inner=None, code=-1):
super(ExtensionError, self).__init__(msg, inner)
self.code = code
class ExtensionOperationError(ExtensionError):
"""
When the command times out or returns with a non-zero exit_code
"""
def __init__(self, msg=None, inner=None, code=-1, exit_code=-1):
super(ExtensionOperationError, self).__init__(msg, inner)
self.code = code
self.exit_code = exit_code
class ExtensionUpdateError(ExtensionError):
"""
Error raised when failed to update an extension
"""
class ExtensionDownloadError(ExtensionError):
"""
Error raised when failed to download and setup an extension
"""
class ExtensionsGoalStateError(ExtensionError):
"""
Error raised when the ExtensionsGoalState is malformed
"""
class ExtensionsConfigError(ExtensionsGoalStateError):
"""
Error raised when the ExtensionsConfig is malformed
"""
class MultiConfigExtensionEnableError(ExtensionError):
"""
Error raised when enable for a Multi-Config extension is failing.
"""
class ProvisionError(AgentError):
"""
When provision failed
"""
def __init__(self, msg=None, inner=None):
super(ProvisionError, self).__init__(msg, inner)
class ResourceDiskError(AgentError):
"""
Mount resource disk failed
"""
def __init__(self, msg=None, inner=None):
super(ResourceDiskError, self).__init__(msg, inner)
class DhcpError(AgentError):
"""
Failed to handle dhcp response
"""
def __init__(self, msg=None, inner=None):
super(DhcpError, self).__init__(msg, inner)
class OSUtilError(AgentError):
"""
Failed to perform operation to OS configuration
"""
def __init__(self, msg=None, inner=None):
super(OSUtilError, self).__init__(msg, inner)
class ProtocolError(AgentError):
"""
Azure protocol error
"""
def __init__(self, msg=None, inner=None):
super(ProtocolError, self).__init__(msg, inner)
class ProtocolNotFoundError(ProtocolError):
"""
Error raised when Azure protocol endpoint not found
"""
class HttpError(AgentError):
"""
Http request failure
"""
def __init__(self, msg=None, inner=None):
super(HttpError, self).__init__(msg, inner)
class InvalidContainerError(HttpError):
"""
Error raised when Container id sent in the header is invalid
"""
class EventError(AgentError):
"""
Event reporting error
"""
def __init__(self, msg=None, inner=None):
super(EventError, self).__init__(msg, inner)
class CryptError(AgentError):
"""
Encrypt/Decrypt error
"""
def __init__(self, msg=None, inner=None):
super(CryptError, self).__init__(msg, inner)
class UpdateError(AgentError):
"""
Update Guest Agent error
"""
def __init__(self, msg=None, inner=None):
super(UpdateError, self).__init__(msg, inner)
class ResourceGoneError(HttpError):
"""
The requested resource no longer exists (i.e., status code 410)
"""
def __init__(self, msg=None, inner=None):
if msg is None:
msg = "Resource is gone"
super(ResourceGoneError, self).__init__(msg, inner)
class InvalidExtensionEventError(AgentError):
"""
Error thrown when the extension telemetry event is invalid as defined per the contract with extensions.
"""
# Types of InvalidExtensionEventError
MissingKeyError = "MissingKeyError"
EmptyMessageError = "EmptyMessageError"
OversizeEventError = "OversizeEventError"
def __init__(self, msg=None, inner=None):
super(InvalidExtensionEventError, self).__init__(msg, inner)
class ServiceStoppedError(AgentError):
"""
Error thrown when trying to access a Service which is stopped
"""
def __init__(self, msg=None, inner=None):
super(ServiceStoppedError, self).__init__(msg, inner)
class ExtensionErrorCodes(object):
"""
Common Error codes used across by Compute RP for better understanding
the cause and clarify common occurring errors
"""
# Unknown Failures
PluginUnknownFailure = -1
# Success
PluginSuccess = 0
# Catch all error code.
PluginProcessingError = 1000
# Plugin failed to download
PluginManifestDownloadError = 1001
# Cannot find or load successfully the HandlerManifest.json
PluginHandlerManifestNotFound = 1002
# Cannot successfully serialize the HandlerManifest.json
PluginHandlerManifestDeserializationError = 1003
# Cannot download the plugin package
PluginPackageDownloadFailed = 1004
# Cannot extract the plugin form package
PluginPackageExtractionFailed = 1005
# Install failed
PluginInstallProcessingFailed = 1007
# Update failed
PluginUpdateProcessingFailed = 1008
# Enable failed
PluginEnableProcessingFailed = 1009
# Disable failed
PluginDisableProcessingFailed = 1010
# Extension script timed out
PluginHandlerScriptTimedout = 1011
# Invalid status file of the extension.
PluginSettingsStatusInvalid = 1012
def __init__(self):
pass
class GoalStateAggregateStatusCodes(object):
# Success
Success = 0
# Unknown failure
GoalStateUnknownFailure = -1
# The goal state requires features that are not supported by this version of the VM agent
GoalStateUnsupportedRequiredFeatures = 2001