summaryrefslogtreecommitdiff
path: root/azurelinuxagent/protocol/common.py
diff options
context:
space:
mode:
Diffstat (limited to 'azurelinuxagent/protocol/common.py')
-rw-r--r--azurelinuxagent/protocol/common.py245
1 files changed, 245 insertions, 0 deletions
diff --git a/azurelinuxagent/protocol/common.py b/azurelinuxagent/protocol/common.py
new file mode 100644
index 0000000..77247ab
--- /dev/null
+++ b/azurelinuxagent/protocol/common.py
@@ -0,0 +1,245 @@
+# Windows Azure Linux Agent
+#
+# Copyright 2014 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.4+ and Openssl 1.0+
+#
+import os
+import copy
+import re
+import json
+import xml.dom.minidom
+import azurelinuxagent.logger as logger
+import azurelinuxagent.utils.fileutil as fileutil
+
+class ProtocolError(Exception):
+ pass
+
+class ProtocolNotFound(Exception):
+ pass
+
+def validata_param(name, val, expected_type):
+ if val is None:
+ raise ProtocolError("Param {0} is None".format(name))
+ if not isinstance(val, expected_type):
+ raise ProtocolError("Param {0} type should be {1}".format(name,
+ expected_type))
+
+def set_properties(obj, data):
+ validata_param("obj", obj, DataContract)
+ validata_param("data", data, dict)
+
+ props = vars(obj)
+ for name, val in list(props.items()):
+ try:
+ new_val = data[name]
+ except KeyError:
+ continue
+
+ if isinstance(new_val, dict):
+ set_properties(val, new_val)
+ elif isinstance(new_val, list):
+ validata_param("list", val, DataContractList)
+ for data_item in new_val:
+ item = val.item_cls()
+ set_properties(item, data_item)
+ val.append(item)
+ else:
+ setattr(obj, name, new_val)
+
+def get_properties(obj):
+ validata_param("obj", obj, DataContract)
+
+ data = {}
+ props = vars(obj)
+ for name, val in list(props.items()):
+ if isinstance(val, DataContract):
+ data[name] = get_properties(val)
+ elif isinstance(val, DataContractList):
+ if len(val) == 0:
+ continue
+ data[name] = []
+ for item in val:
+ date_item = get_properties(item)
+ data[name].append(date_item)
+ elif val is not None:
+ data[name] = val
+ return data
+
+class DataContract(object):
+ pass
+
+class DataContractList(list):
+ def __init__(self, item_cls):
+ self.item_cls = item_cls
+
+class VMInfo(DataContract):
+ def __init__(self, subscriptionId=None, vmName=None):
+ self.subscriptionId = subscriptionId
+ self.vmName = vmName
+
+class Cert(DataContract):
+ def __init__(self, name=None, thumbprint=None, certificateDataUri=None):
+ self.name = name
+ self.thumbprint = thumbprint
+ self.certificateDataUri = certificateDataUri
+
+class CertList(DataContract):
+ def __init__(self):
+ self.certificates = DataContractList(Cert)
+
+class ExtensionSettings(DataContract):
+ def __init__(self, name=None, sequenceNumber=None, publicSettings=None,
+ privateSettings=None, certificateThumbprint=None):
+ self.name = name
+ self.sequenceNumber = sequenceNumber
+ self.publicSettings = publicSettings
+ self.privateSettings = privateSettings
+ self.certificateThumbprint = certificateThumbprint
+
+class ExtensionProperties(DataContract):
+ def __init__(self):
+ self.version = None
+ self.upgradePolicy = None
+ self.state = None
+ self.extensions = DataContractList(ExtensionSettings)
+
+class ExtensionVersionUri(DataContract):
+ def __init__(self):
+ self.uri = None
+
+class Extension(DataContract):
+ def __init__(self, name=None):
+ self.name = name
+ self.properties = ExtensionProperties()
+ self.version_uris = DataContractList(ExtensionVersionUri)
+
+class ExtensionList(DataContract):
+ def __init__(self):
+ self.extensions = DataContractList(Extension)
+
+class ExtensionPackageUri(DataContract):
+ def __init__(self, uri=None):
+ self.uri = uri
+
+class ExtensionPackage(DataContract):
+ def __init__(self, version = None):
+ self.version = version
+ self.uris = DataContractList(ExtensionPackageUri)
+
+class ExtensionPackageList(DataContract):
+ def __init__(self):
+ self.versions = DataContractList(ExtensionPackage)
+
+class InstanceMetadata(DataContract):
+ def __init__(self, deploymentName=None, roleName=None, roleInstanceId=None,
+ containerId=None):
+ self.deploymentName = deploymentName
+ self.roleName = roleName
+ self.roleInstanceId = roleInstanceId
+ self.containerId = containerId
+
+class VMProperties(DataContract):
+ def __init__(self, certificateThumbprint=None):
+ #TODO need to confirm the property name
+ self.certificateThumbprint = certificateThumbprint
+
+class ProvisionStatus(DataContract):
+ def __init__(self, status=None, subStatus=None, description=None):
+ self.status = status
+ self.subStatus = subStatus
+ self.description = description
+ self.properties = VMProperties()
+
+class VMAgentStatus(DataContract):
+ def __init__(self, agentVersion=None, status=None, message=None):
+ self.agentVersion = agentVersion
+ self.status = status
+ self.message = message
+
+class ExtensionSubStatus(DataContract):
+ def __init__(self, name=None, status=None, code=None, message=None):
+ self.name = name
+ self.status = status
+ self.code = code
+ self.message = message
+
+class ExtensionStatus(DataContract):
+ def __init__(self, name=None, configurationAppliedTime=None, operation=None,
+ status=None, code=None, message=None, seq_no=None):
+ self.name = name
+ self.configurationAppliedTime = configurationAppliedTime
+ self.operation = operation
+ self.status = status
+ self.code = code
+ self.message = message
+ self.sequenceNumber = seq_no
+ self.substatusList = DataContractList(ExtensionSubStatus)
+
+class ExtensionHandlerStatus(DataContract):
+ def __init__(self, handlerName=None, handlerVersion=None, status=None,
+ message=None):
+ self.handlerName = handlerName
+ self.handlerVersion = handlerVersion
+ self.status = status
+ self.message = message
+ self.extensionStatusList = DataContractList(ExtensionStatus)
+
+class VMStatus(DataContract):
+ def __init__(self):
+ self.vmAgent = VMAgentStatus()
+ self.extensionHandlers = DataContractList(ExtensionHandlerStatus)
+
+class TelemetryEventParam(DataContract):
+ def __init__(self, name=None, value=None):
+ self.name = name
+ self.value = value
+
+class TelemetryEvent(DataContract):
+ def __init__(self, eventId=None, providerId=None):
+ self.eventId = eventId
+ self.providerId = providerId
+ self.parameters = DataContractList(TelemetryEventParam)
+
+class TelemetryEventList(DataContract):
+ def __init__(self):
+ self.events = DataContractList(TelemetryEvent)
+
+class Protocol(DataContract):
+
+ def initialize(self):
+ raise NotImplementedError()
+
+ def get_vminfo(self):
+ raise NotImplementedError()
+
+ def get_certs(self):
+ raise NotImplementedError()
+
+ def get_extensions(self):
+ raise NotImplementedError()
+
+ def get_extension_pkgs(self, extension):
+ raise NotImplementedError()
+
+ def report_provision_status(self, status):
+ raise NotImplementedError()
+
+ def report_status(self, status):
+ raise NotImplementedError()
+
+ def report_event(self, event):
+ raise NotImplementedError()
+