def disassociate_floating_ip_from_server(self, floating_ip, server_id):
     """Disassociate the provided floating IP from a specific server"""
     url = "servers/%s/action" % str(server_id)
     doc = Document()
     server = Element("removeFloatingIp")
     doc.append(server)
     server.add_attr("address", floating_ip)
     resp, body = self.post(url, str(doc), self.headers)
     return resp, body
Example #2
0
    def resize(self, server_id, flavor_ref, disk_config=None):
        resize = Element("resize", xmlns=XMLNS_11, flavorRef=flavor_ref)

        if disk_config is not None:
            raise Exception("Sorry, disk_config not supported via XML yet")

        return self.post('servers/%s/action' % server_id,
                         str(Document(resize)), self.headers)
    def create_image(self, server_id, name, meta=None):
        """Creates an image of the original server"""
        post_body = Element('createImage', name=name)

        if meta:
            metadata = Element('metadata')
            post_body.append(metadata)
            for k, v in meta.items():
                data = Element('meta', key=k)
                data.append(Text(v))
                metadata.append(data)
        resp, body = self.post('servers/%s/action' % str(server_id),
                               str(Document(post_body)), self.headers)
        return resp, body
    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 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 create_security_group(self, name, description):
     """
     Creates a new security group.
     name (Required): Name of security group.
     description (Required): Description of security group.
     """
     security_group = Element("security_group", name=name)
     des = Element("description")
     des.append(Text(content=description))
     security_group.append(des)
     resp, body = self.post('os-security-groups',
                            str(Document(security_group)),
                            self.headers)
     body = self._parse_body(etree.fromstring(body))
     return resp, body
Example #7
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
Example #8
0
 def confirm_resize(self, server_id):
     conf = Element('confirmResize')
     return self.post('servers/%s/action' % server_id, str(Document(conf)),
                      self.headers)
Example #9
0
    def rebuild(self,
                server_id,
                image_ref,
                name=None,
                meta=None,
                personality=None,
                adminPass=None,
                disk_config=None):
        rebuild = Element("rebuild", xmlns=XMLNS_11, imageRef=image_ref)

        if name:
            rebuild.add_attr("name", name)
        if adminPass:
            rebuild.add_attr("adminPass", adminPass)
        if meta:
            metadata = Element("metadata")
            rebuild.append(metadata)
            for k, v in meta.items():
                meta = Element("meta", key=k)
                meta.append(Text(v))
                metadata.append(meta)

        resp, body = self.post('servers/%s/action' % server_id,
                               str(Document(rebuild)), self.headers)
        server = self._parse_server(etree.fromstring(body))
        return resp, server
    def create_server(self, name, image_ref, flavor_ref, **kwargs):
        """
        Creates an instance of a server.
        name (Required): The name of the server.
        image_ref (Required): Reference to the image used to build the server.
        flavor_ref (Required): The flavor used to build the server.
        Following optional keyword arguments are accepted:
        adminPass: Sets the initial root password.
        key_name: Key name of keypair that was created earlier.
        meta: A dictionary of values to be used as metadata.
        personality: A list of dictionaries for files to be injected into
        the server.
        security_groups: A list of security group dicts.
        networks: A list of network dicts with UUID and fixed_ip.
        user_data: User data for instance.
        availability_zone: Availability zone in which to launch instance.
        accessIPv4: The IPv4 access address for the server.
        accessIPv6: The IPv6 access address for the server.
        min_count: Count of minimum number of instances to launch.
        max_count: Count of maximum number of instances to launch.
        disk_config: Determines if user or admin controls disk configuration.
        """
        server = Element("server",
                         xmlns=XMLNS_11,
                         imageRef=image_ref,
                         flavorRef=flavor_ref,
                         name=name)

        for attr in ["adminPass", "accessIPv4", "accessIPv6", "key_name"]:
            if attr in kwargs:
                server.add_attr(attr, kwargs[attr])

        if 'meta' in kwargs:
            metadata = Element("metadata")
            server.append(metadata)
            for k, v in kwargs['meta'].items():
                meta = Element("meta", key=k)
                meta.append(Text(v))
                metadata.append(meta)

        if 'personality' in kwargs:
            personality = Element('personality')
            server.append(personality)
            for k in kwargs['personality']:
                temp = Element('file', path=k['path'])
                temp.append(Text(k['contents']))
                personality.append(temp)

        resp, body = self.post('servers', str(Document(server)), self.headers)
        server = self._parse_server(etree.fromstring(body))
        return resp, server
    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 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
Example #13
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 create_security_group_rule(self, parent_group_id, ip_proto, from_port,
                                   to_port, **kwargs):
        """
        Creating a new security group rules.
        parent_group_id :ID of Security group
        ip_protocol : ip_proto (icmp, tcp, udp).
        from_port: Port at start of range.
        to_port  : Port at end of range.
        Following optional keyword arguments are accepted:
        cidr     : CIDR for address range.
        group_id : ID of the Source group
        """
        group_rule = Element("security_group_rule")
        parent_group = Element("parent_group_id")
        parent_group.append(Text(content=parent_group_id))
        ip_protocol = Element("ip_protocol")
        ip_protocol.append(Text(content=ip_proto))
        from_port_num = Element("from_port")
        from_port_num.append(Text(content=str(from_port)))
        to_port_num = Element("to_port")
        to_port_num.append(Text(content=str(to_port)))

        cidr = kwargs.get('cidr')
        if cidr is not None:
            cidr_num = Element("cidr")
            cidr_num.append(Text(content=cidr))

        group_id = kwargs.get('group_id')
        if group_id is not None:
            group_id_num = Element("group_id")
            group_id_num.append(Text(content=group_id))

        group_rule.append(parent_group)
        group_rule.append(ip_protocol)
        group_rule.append(from_port_num)
        group_rule.append(to_port_num)

        url = 'os-security-group-rules'
        resp, body = self.post(url, str(Document(group_rule)), self.headers)
        body = self._parse_body(etree.fromstring(body))
        return resp, body
Example #15
0
 def revert_resize(self, server_id):
     revert = Element('revertResize')
     return self.post('servers/%s/action' % server_id,
                      str(Document(revert)), self.headers)
Example #16
0
 def remove_security_group(self, server_id, security_group_name):
     secgrp = Element('removeSecurityGroup', name=security_group_name)
     return self.post('servers/%s/action' % server_id,
                      str(Document(secgrp)), self.headers)
Example #17
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))
Example #18
0
    def create_server(self, name, image_ref, flavor_ref, **kwargs):
        """
        Creates an instance of a server.
        name (Required): The name of the server.
        image_ref (Required): Reference to the image used to build the server.
        flavor_ref (Required): The flavor used to build the server.
        Following optional keyword arguments are accepted:
        adminPass: Sets the initial root password.
        key_name: Key name of keypair that was created earlier.
        meta: A dictionary of values to be used as metadata.
        personality: A list of dictionaries for files to be injected into
        the server.
        security_groups: A list of security group dicts.
        networks: A list of network dicts with UUID and fixed_ip.
        user_data: User data for instance.
        availability_zone: Availability zone in which to launch instance.
        accessIPv4: The IPv4 access address for the server.
        accessIPv6: The IPv6 access address for the server.
        min_count: Count of minimum number of instances to launch.
        max_count: Count of maximum number of instances to launch.
        disk_config: Determines if user or admin controls disk configuration.
        """
        server = Element("server",
                         xmlns=XMLNS_11,
                         imageRef=image_ref,
                         flavorRef=flavor_ref,
                         name=name)

        for attr in ["adminPass", "accessIPv4", "accessIPv6", "key_name"]:
            if attr in kwargs:
                server.add_attr(attr, kwargs[attr])

        if 'meta' in kwargs:
            metadata = Element("metadata")
            server.append(metadata)
            for k, v in kwargs['meta'].items():
                meta = Element("meta", key=k)
                meta.append(Text(v))
                metadata.append(meta)

        if 'personality' in kwargs:
            personality = Element('personality')
            server.append(personality)
            for k in kwargs['personality']:
                temp = Element('file', path=k['path'])
                temp.append(Text(k['contents']))
                personality.append(temp)

        resp, body = self.post('servers', str(Document(server)), self.headers)
        server = self._parse_server(etree.fromstring(body))
        return resp, server
Example #19
0
 def change_password(self, server_id, password):
     cpw = Element("changePassword", xmlns=XMLNS_11, adminPass=password)
     return self.post("servers/%s/action" % server_id, str(Document(cpw)),
                      self.headers)
    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))
Example #21
0
 def reboot(self, server_id, reboot_type):
     reboot = Element("reboot", xmlns=XMLNS_11, type=reboot_type)
     return self.post("servers/%s/action" % server_id,
                      str(Document(reboot)), self.headers)
    def rebuild(self, server_id, image_ref, name=None, meta=None,
                personality=None, adminPass=None, disk_config=None):
        rebuild = Element("rebuild",
                          xmlns=XMLNS_11,
                          imageRef=image_ref)

        if name:
            rebuild.add_attr("name", name)
        if adminPass:
            rebuild.add_attr("adminPass", adminPass)
        if meta:
            metadata = Element("metadata")
            rebuild.append(metadata)
            for k, v in meta.items():
                meta = Element("meta", key=k)
                meta.append(Text(v))
                metadata.append(meta)

        resp, body = self.post('servers/%s/action' % server_id,
                               str(Document(rebuild)), self.headers)
        server = self._parse_server(etree.fromstring(body))
        return resp, server
    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('volumes', str(Document(volume)),
                               self.headers)
        body = xml_to_json(etree.fromstring(body))
        return resp, body