Merge branch 'LIBCLOUD-761_Network_and_monitoring_support' into trunk

Conflicts:
        libcloud/compute/drivers/dimensiondata.py
        libcloud/test/compute/test_dimensiondata.py


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/8abaf891
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/8abaf891
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/8abaf891

Branch: refs/heads/trunk
Commit: 8abaf891c17c984a6bda5d7cd7d785dc4545826d
Parents: 2a415a8 cd24ef2
Author: Anthony Shaw <anthony.p.s...@gmail.com>
Authored: Wed Nov 18 18:50:14 2015 +1100
Committer: Anthony Shaw <anthony.p.s...@gmail.com>
Committed: Wed Nov 18 18:50:14 2015 +1100

----------------------------------------------------------------------
 libcloud/common/dimensiondata.py                |   1 +
 libcloud/compute/drivers/dimensiondata.py       | 309 ++++++++++++++++++-
 ...9cbc_8dabe5a7d0e4_report_usageMonitoring.xml |   8 +
 ...a7d0e4_server_changeServerMonitoringPlan.xml |   8 +
 ...be5a7d0e4_server_disableServerMonitoring.xml |   8 +
 ...abe5a7d0e4_server_enableServerMonitoring.xml |   8 +
 ...8a_9cbc_8dabe5a7d0e4_networkWithLocation.xml |   2 +-
 ...ork_4bba37be_506f_11e3_b29c_001517c4643e.xml |  16 +
 libcloud/test/compute/test_dimensiondata.py     |  65 ++++
 9 files changed, 414 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/8abaf891/libcloud/common/dimensiondata.py
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/libcloud/blob/8abaf891/libcloud/compute/drivers/dimensiondata.py
----------------------------------------------------------------------
diff --cc libcloud/compute/drivers/dimensiondata.py
index 3ee8a11,270a7ca..72defdc
--- a/libcloud/compute/drivers/dimensiondata.py
+++ b/libcloud/compute/drivers/dimensiondata.py
@@@ -816,35 -1034,76 +1035,105 @@@ class DimensionDataNodeDriver(NodeDrive
                  filter(lambda x: x.id == id, self.list_locations()))[0]
          return location
  
 +    def ex_wait_for_state(self, state, func, poll_interval=2,
 +                          timeout=60, *args, **kwargs):
 +        """
 +        Wait for the function which returns a instance
 +        with field status to match
 +
 +        Keep polling func until one of the desired states is matched
 +
 +        :param state: Either the desired state (`str`) or a `list` of states
 +        :type  state: ``str`` or ``list``
 +
 +        :param  func: The function to call, e.g. ex_get_vlan
 +        :type   func: ``function``
 +
 +        :param  poll_interval: The number of seconds to wait between checks
 +        :type   poll_interval: `int`
 +
 +        :param  timeout: The total number of seconds to wait to reach a state
 +        :type   timeout: `int`
 +
 +        :param  args: The arguments for func
 +        :type   args: Positional arguments
 +
 +        :param  kwargs: The arguments for func
 +        :type   kwargs: Keyword arguments
 +        """
 +        return self.connection.wait_for_state(state, func, poll_interval,
 +                                              timeout, *args, **kwargs)
 +
+     def ex_enable_monitoring(self, node, service_plan="ESSENTIALS"):
+         """
+         Enables cloud monitoring on a node
+ 
+         :param   node: The node to monitor
+         :type    node: :class:`Node`
+ 
+         :param   service_plan: The service plan, one of ESSENTIALS or
+                                ADVANCED
+         :type    service_plan: ``str``
+ 
+         :rtype: ``bool``
+         """
+         update_node = ET.Element('enableServerMonitoring',
+                                  {'xmlns': TYPES_URN})
+         update_node.set('id', node.id)
+         ET.SubElement(update_node, 'servicePlan').text = service_plan
+         result = self.connection.request_with_orgId_api_2(
+             'server/enableServerMonitoring',
+             method='POST',
+             data=ET.tostring(update_node)).object
+ 
+         response_code = findtext(result, 'responseCode', TYPES_URN)
+         return response_code in ['IN_PROGRESS', 'OK']
+ 
+     def ex_update_monitoring_plan(self, node, service_plan="ESSENTIALS"):
+         """
+         Updates the service plan on a node with monitoring
+ 
+         :param   node: The node to monitor
+         :type    node: :class:`Node`
+ 
+         :param   service_plan: The service plan, one of ESSENTIALS or
+                                ADVANCED
+         :type    service_plan: ``str``
+ 
+         :rtype: ``bool``
+         """
+         update_node = ET.Element('changeServerMonitoringPlan',
+                                  {'xmlns': TYPES_URN})
+         update_node.set('id', node.id)
+         ET.SubElement(update_node, 'servicePlan').text = service_plan
+         result = self.connection.request_with_orgId_api_2(
+             'server/changeServerMonitoringPlan',
+             method='POST',
+             data=ET.tostring(update_node)).object
+ 
+         response_code = findtext(result, 'responseCode', TYPES_URN)
+         return response_code in ['IN_PROGRESS', 'OK']
+ 
+     def ex_disable_monitoring(self, node):
+         """
+         Disables cloud monitoring for a node
+ 
+         :param   node: The node to stop monitoring
+         :type    node: :class:`Node`
+ 
+         :rtype: ``bool``
+         """
+         update_node = ET.Element('disableServerMonitoring',
+                                  {'xmlns': TYPES_URN})
+         update_node.set('id', node.id)
+         result = self.connection.request_with_orgId_api_2(
+             'server/disableServerMonitoring',
+             method='POST',
+             data=ET.tostring(update_node)).object
+ 
+         response_code = findtext(result, 'responseCode', TYPES_URN)
+         return response_code in ['IN_PROGRESS', 'OK']
+ 
      def _to_nat_rules(self, object, network_domain):
          rules = []
          for element in findall(object, 'natRule', TYPES_URN):

http://git-wip-us.apache.org/repos/asf/libcloud/blob/8abaf891/libcloud/test/compute/test_dimensiondata.py
----------------------------------------------------------------------
diff --cc libcloud/test/compute/test_dimensiondata.py
index 8841c7a,14be92c..8fbe89c
--- a/libcloud/test/compute/test_dimensiondata.py
+++ b/libcloud/test/compute/test_dimensiondata.py
@@@ -783,5 -818,30 +824,29 @@@ class DimensionDataMockHttp(MockHttp)
              
'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_removeNic.xml')
          return (httplib.OK, body, {}, httplib.responses[httplib.OK])
  
+     def 
_caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_disableServerMonitoring(self,
 method, url, body, headers):
+         request = ET.fromstring(body)
+         if request.tag != 
"{urn:didata.com:api:cloud:types}disableServerMonitoring":
+             raise InvalidRequestError(request.tag)
+         body = self.fixtures.load(
+             
'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_disableServerMonitoring.xml')
+         return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+ 
+     def 
_caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_enableServerMonitoring(self,
 method, url, body, headers):
+         request = ET.fromstring(body)
+         if request.tag != 
"{urn:didata.com:api:cloud:types}enableServerMonitoring":
+             raise InvalidRequestError(request.tag)
+         body = self.fixtures.load(
+             
'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_enableServerMonitoring.xml')
+         return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+ 
+     def 
_caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_changeServerMonitoringPlan(self,
 method, url, body, headers):
+         request = ET.fromstring(body)
+         if request.tag != 
"{urn:didata.com:api:cloud:types}changeServerMonitoringPlan":
+             raise InvalidRequestError(request.tag)
+         body = self.fixtures.load(
+             
'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_changeServerMonitoringPlan.xml')
+         return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+ 
 -
  if __name__ == '__main__':
      sys.exit(unittest.main())

Reply via email to