Exemple #1
0
    def update_server(self,
                      server_id,
                      name=None,
                      meta=None,
                      accessIPv4=None,
                      accessIPv6=None):
        doc = Document()
        server = Element("server")
        doc.append(server)

        if name:
            server.add_attr("name", name)
        if accessIPv4:
            server.add_attr("accessIPv4", accessIPv4)
        if accessIPv6:
            server.add_attr("accessIPv6", accessIPv6)
        if meta:
            metadata = Element("metadata")
            server.append(metadata)
            for k, v in meta:
                meta = Element("meta", key=k)
                meta.append(Text(v))
                metadata.append(meta)

        resp, body = self.put('servers/%s' % str(server_id), str(doc),
                              self.headers)
        return resp, xml_to_json(etree.fromstring(body))
 def set_image_metadata(self, image_id, meta):
     """Sets the metadata for an image"""
     post_body = json.dumps({'metadata': meta})
     resp, body = self.put('images/%s/metadata' % str(image_id),
                           post_body, self.headers)
     body = xml_to_json(etree.fromstring(body))
     return resp, body['metadata']
 def set_image_metadata_item(self, image_id, key, meta):
     """Sets the value for a specific image metadata key"""
     post_body = json.dumps({'meta': meta})
     resp, body = self.put('images/%s/metadata/%s' % (str(image_id), key),
                           post_body, self.headers)
     body = xml_to_json(etree.fromstring(body))
     return resp, body['meta']
    def create_volume(self, size, display_name=None, metadata=None):
        """Creates a new Volume.

        :param size: Size of volume in GB. (Required)
        :param display_name: Optional Volume Name.
        :param metadata: An optional dictionary of values for metadata.
        """
        volume = Element("volume",
                         xmlns=XMLNS_11,
                         size=size)
        if display_name:
            volume.add_attr('display_name', display_name)

        if metadata:
            _metadata = Element('metadata')
            volume.append(_metadata)
            for key, value in metadata.items():
                meta = Element('meta')
                meta.add_attr('key', key)
                meta.append(Text(value))
                _metadata.append(meta)

        resp, body = self.post('os-volumes', str(Document(volume)),
                               self.headers)
        body = xml_to_json(etree.fromstring(body))
        return resp, body
 def _parse_links(self, node, json):
     """Append multiple links under a list"""
     # look for links
     if 'link' in json:
         # remove single link element
         del json['link']
         json['links'] = [xml_to_json(x) for x in
                          node.findall('{http://www.w3.org/2005/Atom}link')]
     return json
    def list_images(self, params=None):
        """Returns a list of all images filtered by any parameters"""
        url = 'images'
        if params:
            param_list = urllib.urlencode(params)
            url += "?" + param_list

        resp, body = self.get(url, self.headers)
        body = xml_to_json(etree.fromstring(body))
        return resp, body['images']
    def list_images_with_detail(self, params=None):
        """Returns a detailed list of images filtered by any parameters"""
        url = 'images/detail'
        if params:
            param_list = urllib.urlencode(params)

            url = "images/detail?" + param_list

        resp, body = self.get(url, self.headers)
        body = xml_to_json(etree.fromstring(body))
        return resp, body['images']
    def _parse_volume(self, body):
        vol = dict((attr, body.get(attr)) for attr in body.keys())

        for child in body.getchildren():
            tag = child.tag
            if tag.startswith("{"):
                ns, tag = tag.split("}", 1)
            if tag == 'metadata':
                vol['metadata'] = dict((meta.get('key'),
                                        meta.text) for meta in list(child))
            else:
                vol[tag] = xml_to_json(child)
            return vol
    def update_image_metadata(self, image_id, meta):
        """Updates the metadata for an image"""
        post_body = Element('metadata', meta)
        for k, v in meta:
            metadata = Element('meta', key=k)
            text = Text(v)
            metadata.append(text)
            post_body.append(metadata)

        resp, body = self.post('images/%s/metadata' % str(image_id),
                               post_body, self.headers)
        body = xml_to_json(etree.fromstring(body))
        return resp, body['metadata']
    def _parse_volume(self, body):
        vol = dict((attr, body.get(attr)) for attr in body.keys())

        for child in body.getchildren():
            tag = child.tag
            if tag.startswith("{"):
                ns, tag = tag.split("}", 1)
            if tag == 'metadata':
                vol['metadata'] = dict(
                    (meta.get('key'), meta.text) for meta in list(child))
            else:
                vol[tag] = xml_to_json(child)
        return vol
Exemple #11
0
    def _parse_server(self, body):
        json = xml_to_json(body)
        if 'metadata' in json and json['metadata']:
            # NOTE(danms): if there was metadata, we need to re-parse
            # that as a special type
            metadata_tag = body.find('{%s}metadata' % XMLNS_11)
            json["metadata"] = self._parse_key_value(metadata_tag)
        if 'link' in json:
            self._parse_links(body, json)
        for sub in ['image', 'flavor']:
            if sub in json and 'link' in json[sub]:
                self._parse_links(body, json[sub])

        return json
    def _parse_server(self, body):
        json = xml_to_json(body)
        if 'metadata' in json and json['metadata']:
            # NOTE(danms): if there was metadata, we need to re-parse
            # that as a special type
            metadata_tag = body.find('{%s}metadata' % XMLNS_11)
            json["metadata"] = self._parse_key_value(metadata_tag)
        if 'link' in json:
            self._parse_links(body, json)
        for sub in ['image', 'flavor']:
            if sub in json and 'link' in json[sub]:
                self._parse_links(body, json[sub])

        return json
    def _parse_image(self, node):
        """Parses detailed XML image information into dictionary"""
        json = xml_to_json(node)

        self._parse_links(node, json)

        # parse all metadata
        if 'metadata' in json:
            tag = node.find('{%s}metadata' % XMLNS_11)
            json['metadata'] = dict((x.get('key'), x.text)
                                    for x in tag.getchildren())

        # parse server information
        if 'server' in json:
            tag = node.find('{%s}server' % XMLNS_11)
            json['server'] = self._parse_server(tag)
        return json
Exemple #14
0
    def create_flavor(self, name, ram, vcpus, disk, ephemeral, flavor_id, swap,
                      rxtx):
        """Creates a new flavor or instance type"""
        flavor = Element("flavor",
                         xmlns=XMLNS_11,
                         ram=ram,
                         vcpus=vcpus,
                         disk=disk,
                         id=flavor_id,
                         swap=swap,
                         rxtx_factor=rxtx,
                         name=name)
        flavor.add_attr('xmlns:OS-FLV-EXT-DATA', XMLNS_OS_FLV_EXT_DATA)
        flavor.add_attr('OS-FLV-EXT-DATA:ephemeral', ephemeral)

        resp, body = self.post('flavors', str(Document(flavor)), self.headers)
        body = xml_to_json(etree.fromstring(body))
        flavor = self._format_flavor(body)
        return resp, flavor
    def create_flavor(self, name, ram, vcpus, disk, ephemeral, flavor_id,
                      swap, rxtx):
        """Creates a new flavor or instance type"""
        flavor = Element("flavor",
                         xmlns=XMLNS_11,
                         ram=ram,
                         vcpus=vcpus,
                         disk=disk,
                         id=flavor_id,
                         swap=swap,
                         rxtx_factor=rxtx,
                         name=name)
        flavor.add_attr('xmlns:OS-FLV-EXT-DATA', XMLNS_OS_FLV_EXT_DATA)
        flavor.add_attr('OS-FLV-EXT-DATA:ephemeral', ephemeral)

        resp, body = self.post('flavors', str(Document(flavor)), self.headers)
        body = xml_to_json(etree.fromstring(body))
        flavor = self._format_flavor(body)
        return resp, flavor
    def create_keypair(self, name, pub_key=None):
        doc = Document()

        keypair_element = Element("keypair")

        if pub_key:
            public_key_element = Element("public_key")
            public_key_text = Text(pub_key)
            public_key_element.append(public_key_text)
            keypair_element.append(public_key_element)

        name_element = Element("name")
        name_text = Text(name)
        name_element.append(name_text)
        keypair_element.append(name_element)

        doc.append(keypair_element)

        resp, body = self.post("os-keypairs", headers=self.headers, body=str(doc))
        body = xml_to_json(etree.fromstring(body))
        return resp, body
Exemple #17
0
    def create_keypair(self, name, pub_key=None):
        doc = Document()

        keypair_element = Element("keypair")

        if pub_key:
            public_key_element = Element("public_key")
            public_key_text = Text(pub_key)
            public_key_element.append(public_key_text)
            keypair_element.append(public_key_element)

        name_element = Element("name")
        name_text = Text(name)
        name_element.append(name_text)
        keypair_element.append(name_element)

        doc.append(keypair_element)

        resp, body = self.post("os-keypairs",
                               headers=self.headers, body=str(doc))
        body = xml_to_json(etree.fromstring(body))
        return resp, body
    def update_server(self, server_id, name=None, meta=None, accessIPv4=None,
                      accessIPv6=None):
        doc = Document()
        server = Element("server")
        doc.append(server)

        if name:
            server.add_attr("name", name)
        if accessIPv4:
            server.add_attr("accessIPv4", accessIPv4)
        if accessIPv6:
            server.add_attr("accessIPv6", accessIPv6)
        if meta:
            metadata = Element("metadata")
            server.append(metadata)
            for k, v in meta:
                meta = Element("meta", key=k)
                meta.append(Text(v))
                metadata.append(meta)

        resp, body = self.put('servers/%s' % str(server_id),
                              str(doc), self.headers)
        return resp, xml_to_json(etree.fromstring(body))
    def create_volume(self, size, display_name=None, metadata=None):
        """Creates a new Volume.

        :param size: Size of volume in GB. (Required)
        :param display_name: Optional Volume Name.
        :param metadata: An optional dictionary of values for metadata.
        """
        volume = Element("volume", xmlns=XMLNS_11, size=size)
        if display_name:
            volume.add_attr('display_name', display_name)

        if metadata:
            _metadata = Element('metadata')
            volume.append(_metadata)
            for key, value in metadata.items():
                meta = Element('meta')
                meta.add_attr('key', key)
                meta.append(Text(value))
                _metadata.append(meta)

        resp, body = self.post('os-volumes', str(Document(volume)),
                               self.headers)
        body = xml_to_json(etree.fromstring(body))
        return resp, body
 def list_image_metadata(self, image_id):
     """Lists all metadata items for an image"""
     resp, body = self.get("images/%s/metadata" % str(image_id),
                           self.headers)
     body = xml_to_json(etree.fromstring(body))
     return resp, body['metadata']
Exemple #21
0
 def _parse_array(self, node):
     array = []
     for child in node.getchildren():
         array.append(xml_to_json(child))
     return array
 def get_image_metadata_item(self, image_id, key):
     """Returns the value for a specific image metadata key"""
     resp, body = self.get("images/%s/metadata/%s.xml" %
                           (str(image_id), key), self.headers)
     body = xml_to_json(etree.fromstring(body))
     return resp, body['meta']
Exemple #23
0
 def _parse_links(self, node, json):
     del json['link']
     json['links'] = []
     for linknode in node.findall('{http://www.w3.org/2005/Atom}link'):
         json['links'].append(xml_to_json(linknode))
 def get_flavor_details(self, flavor_id):
     resp, body = self.get("flavors/%s" % str(flavor_id), self.headers)
     body = xml_to_json(etree.fromstring(body))
     flavor = self._format_flavor(body)
     return resp, flavor
Exemple #25
0
 def get_flavor_details(self, flavor_id):
     resp, body = self.get("flavors/%s" % str(flavor_id), self.headers)
     body = xml_to_json(etree.fromstring(body))
     flavor = self._format_flavor(body)
     return resp, flavor
 def get_keypair(self, key_name):
     resp, body = self.get("os-keypairs/%s" % str(key_name), self.headers)
     body = xml_to_json(etree.fromstring(body))
     return resp, body
 def list_keypairs(self):
     resp, body = self.get("os-keypairs", self.headers)
     node = etree.fromstring(body)
     body = [{"keypair": xml_to_json(x)} for x in node.getchildren()]
     return resp, body
 def _parse_body(self, body):
     json = xml_to_json(body)
     return json
Exemple #29
0
 def _parse_resp(self, body):
     return xml_to_json(etree.fromstring(body))
 def _parse_floating_ip(self, body):
     json = xml_to_json(body)
     return json
Exemple #31
0
 def _parse_array(self, node):
     return [self._format_flavor(xml_to_json(x)) for x in node]
 def _parse_server(self, node):
     json = xml_to_json(node)
     return self._parse_links(node, json)
 def _parse_resp(self, body):
     return xml_to_json(etree.fromstring(body))
 def _parse_array(self, node):
     return [self._format_flavor(xml_to_json(x)) for x in node]
 def _parse_links(self, node, json):
     del json['link']
     json['links'] = []
     for linknode in node.findall('{http://www.w3.org/2005/Atom}link'):
         json['links'].append(xml_to_json(linknode))
Exemple #36
0
 def list_keypairs(self):
     resp, body = self.get("os-keypairs", self.headers)
     node = etree.fromstring(body)
     body = [{'keypair': xml_to_json(x)} for x in node.getchildren()]
     return resp, body
 def _parse_array(self, node):
     array = []
     for child in node.getchildren():
         array.append(xml_to_json(child))
     return array
Exemple #38
0
 def get_keypair(self, key_name):
     resp, body = self.get("os-keypairs/%s" % str(key_name), self.headers)
     body = xml_to_json(etree.fromstring(body))
     return resp, body