Exemple #1
0
    def modify(self, ttl=None, email_address=None, comment=None):
        """Modify this Domain's properties.

        :param ttl: Time-To-Live (TTL0 in seconds
        :type ttl: int
        :param email_address: E-mail address associated with Domain
        :type email_address: str
        :param comment: A comment or note about this Domain
        :type comment: str
        :returns: A :class:`Domain`

        .. versionadded:: 0.1
        """
        assert 'id' in self
        data = {}
        if ttl is not None:
            data['ttl'] = int(ttl)
        if email_address is not None:
            data['emailAddress'] = email_address
        if comment is not None:
            data['comment'] = comment
        data = json.dumps(data)
        url = '/'.join([get_url('clouddns'), 'domains', str(self['id'])])
        handle_request('put', url, data)
        if ttl is not None:
            self['ttl'] = int(ttl)
        if email_address is not None:
            self['email_address'] = email_address
        if comment is not None:
            self['comment'] = comment
        return self
Exemple #2
0
    def modify(self, name=None, password=None):
        """Modify this Server's name or root password.

        :param name: Change the Server's name
        :type name: str
        :param password: Change the Server's root password
        :type password: str
        :returns: A modified CloudServers Server.
        :rtype: :class:`Server`

        .. versionadded:: 0.1
        """
        assert 'id' in self
        data = {'server': {}}
        if name is not None:
            data['server']['name'] = name
        if password is not None:
            data['server']['adminPass'] = password
        data = json.dumps(data)
        url = '/'.join([get_url('cloudservers'), 'servers', str(self['id'])])
        response = handle_request('put', url, data=data)
        if response:
            if name is not None:
                self['name'] = name
        return self
Exemple #3
0
    def create(cls, size, name=None, description=None, snapshot=None,
               volume_type=None):
        """Create a CloudBlockStorage Volume.

        :param size: Volume size in GB (min. 100GB max. 1TB).
        :type size: int
        :param name: Name of Volume.
        :type name: str
        :param description: Description of Volume.
        :type description: str
        :param snapshot: Snapshot_ID or :class:`Snapshot` of the volume restore.
        :type snapshot: int or :class:`Snapshot`
        :param volume_type: Volume Type, either ``SATA`` or ``SSD``.
        :type volume_type: str or :class:`VolumeType`
        """
        assert 100  <= int(size) <= 1000
        data = {'volume': {'size': int(size)}}
        if name:
            data['volume']['display_name'] = str(display_name)
        if description:
            data['volume']['display_descrition'] = str(description)
        if snapshot:
            if isinstance(snapshot, Snapshot):
                snapshot = snapshot.id
            data['volume']['snapshot_id'] = int(snapshot)
        if volume_type:
            if isinstance(volume_type, VolumeType):
                volume_type = volume_type.name
            data['volume']['volume_type'] = str(volume_type)
        data = json.dumps(data)
        url = '/'.join([get_url('cloudblockstorage'), 'volumes'])
        return handle_request('post', url, data, cls, 'volume')
Exemple #4
0
    def list(cls):
        """Returns a list of Volumes.

        """
        url = [get_url('cloudblockstorage'), 'volumes']
        url = '/'.join(url)
        return handle_request('get', url, wrapper=cls, container='volumes')
Exemple #5
0
    def create(cls, name, image, flavor, metadata=None, files=None):
        """Create a CloudServers Server

        :param name: A Server's name
        :type name: str
        :param image: An Image or ``id``
        :type image: int or :class:`Image`
        :param flavor: A Flavor or ``id``
        :type flavor: int or :class:`Flavor`
        :param metadata: Optional meta data to include with Server
        :type metadata: dict
        :param files: A list of files to load on Server
        :type files: dict
        :returns: A shiny new CloudServers Server.
        :rtype: :class:`Server`

        .. versionadded:: 0.1
        """
        if isinstance(image, Image):
            image = image.id
        image = int(image)
        if isinstance(flavor, Flavor):
            flavor = flavor.id
        flavor = int(flavor)
        data = {'server': {'name': name,
                           'imageId': image,
                           'flavorId': flavor,
                           'metadata': metadata or {},
                           'personality': []}}
        if isinstance(files, dict):
            for path, contents in list(files.items()):
                data['personality'].append({'path': path, 'contents': contents})
        data = json.dumps(data)
        url = '/'.join([get_url('cloudservers'), 'servers'])
        return handle_request('post', url, data, cls, 'server')
Exemple #6
0
    def update_server(self, name=None, accessIPv4=None, accessIPv6=None):
        """Update this NextGenServer's name or ip addresses.

        :param name: Change the NextGenServer's name
        :type name: str
        :param accessIPv4: IPv4 access address
        :type name: str
        :param accessIPv6: IPv6 access address
        :type name: str
        :returns: A modified CloudNextGenServers NextGenServer.
        :rtype: :class:`NextGenServer`

        .. versionadded:: 0.3
        """
        assert 'id' in self
        data = {'server': {}}
        if name is not None:
            data['server']['name'] = name
        if addressIPv4 is not None:
            data['server']['addressIPv4'] = addressIPv4
        if addressIPv6 is not None:
            data['server']['addressIPv6'] = addressIPv6
        data = json.dumps(data)
        url = '/'.join([get_url('cloudserversopenstack'), 'servers', str(self['id'])])
        response = handle_request('put', url, data=data)
        if response:
            if name is not None:
                self['name'] = name
        return self
Exemple #7
0
    def modify(self, name=None, data=None, ttl=None):
        """Modify this Record's properties.

        :param name: Modify the Record's name.
        :type ttl: str
        :param data: Modify the Record's data.
        :type data: str
        :param ttl: Modify the Record's time-to-live (TTL).
        :type ttl: int
        :returns: A list of Records.
        :rtype: A list of :class:`Record`

        .. versionadded:: 0.1
        """
        assert 'id' in self
        assert 'domain_id' in self
        data = {}
        if name is not None:
            data['name'] = name
        if data is not None:
            data['data'] = data
        if ttl is not None:
            data['ttl'] = int(ttl)
        data = json.dumps(data)
        url = '/'.join([get_url('clouddns'), 'domains', str(self['domain_id']),
                        'records', str(self['id'])])
        handle_request('put', url, data)
        if name is not None:
            self['name'] = name
        if data is not None:
            self['data'] = data
        if ttl is not None:
            self['ttl'] = int(ttl)
        return self
Exemple #8
0
    def add_records(self, *records):
        """Add Records to a Domain.

            >>> domain = vaporize.domains.create(...)
            >>> record1 = vaporize.domains.Record.create(....)
            >>> record2 = vaporize.domains.Record.create(...)
            >>> domain.add_recrods(record1, record2)

        :param records: Records you wish to add to this Domain.
        :type records: :class:`Record`
        :returns: A list of Records
        :rtype: :class:`Record`

        .. versionadded:: 0.1
        """
        assert 'id' in self
        data = {'records': []}
        for record in records:
            if isinstance(record, Record):
                data['records'].append({
                    'name': record.name,
                    'type': record.type,
                    'data': record.data,
                    'ttl': record.ttl,
                    'priority': record.priority,
                    'comment': record.comment
                    })
        data = json.dumps(data)
        url = '/'.join([get_url('clouddns'), 'domains', str(self['id']),
                        'records'])
        self['records'] = handle_request('post', url, data, Record, 'records',
                                          domain_id=self['id'])
        return self['records']
Exemple #9
0
    def create(cls, size, display_description='', display_name='',
            snapshot_id='', volume_type=''):
        """Returns info about :param volume_type_id.

        :param size: volume size in GB (min. 100GB max. 1TB).
        :type : str
        :param display_description: display description.
        :type : str
        :param display_name: display name.
        :type : str
        :param snapshot_id: snapshot_id of the volume to be restored.
        :type : str
        :param volume_type: volume type.
        :type : str
        """
        assert 100  <= int(size) <= 1000
        data = { 'volume': { 'size': int(size)}}
        if display_description:
            data['volume']['display_descrition'] = str(display_description)
        if display_name:
            data['volume']['display_name'] = str(display_name)
        if snapshot_id:
            data['volume']['snapshot_id'] = str(snapshot_id)
        if volume_type:
            data['volume']['volume_type'] = str(volume_type)
        data = json.dumps(data)
        url = '/'.join([get_url('cloudblockstorage'), 'volumes'])
        return handle_request('post', url, data, cls, 'volume')
Exemple #10
0
    def resize(self, flavor=None, size=None):
        """Resize the memory and/or volume of the instance.

        This operation changes the memory and/or volume size of the instance,
        assuming a valid Flavor is provided. Restarts MySQL in the process.

        :param flavor: New Flavor (memory size) ofr the Instance.
        :type flavor: :class:`Flavor`
        :param size: New volume size Iin GBs) for Instance, 1 to 25.
        :type size: int

        .. versionadded:: 0.2
        """
        assert 'id' in self, "Missing Instance ID"
        if isinstance(flavor, Flavor):
            flavor = flavor.ref
        data = {'resize': {}}
        if flavor is not None:
            data['resize']['flavorRef'] = flavor
        if size is not None:
            data['resize']['volume'] = {'size': int(size)}
        data = json.dumps(data)
        url = '/'.join([get_url('clouddatabases'), 'instances',
                        str(self['id']), 'action'])
        handle_request('post', url, data)
Exemple #11
0
    def create(cls, volume, force=False, name=None, description=None):
        """Create a CloudBlockStorage Snapshot.

        :param volume: Volume_ID or :class:`Volume` to snapshot.
        :type volume: int or :class:`Volume`
        :param force: Force volume snapshot.
        :type force: bool
        :param name: Display name of volume.
        :type name: str
        :param description: Display description of volume.
        :type description: str
        """
        assert volume
        if isinstance(volume, Volume):
            volume = volume.id
        data = {'snapshot': {'volume_id': str(volume)}}
        if force:
            data['snapshot']['force'] = bool(force)
        if name:
            data['snapshot']['display_name'] = str(name)
        if description:
            data['snapshot']['display_descrition'] = str(description)
        data = json.dumps(data)
        url = '/'.join([get_url('cloudblockstorage'), 'snapshots'])
        return handle_request('post', url, data, cls, 'snapshot')
Exemple #12
0
    def list(cls):
        """Returns a list of Snapshots.

        :returns: A list of :class:`Snapshot`
        """
        url = [get_url('cloudblockstorage'), 'snapshots']
        url = '/'.join(url)
        return handle_request('get', url, wrapper=cls, container='snapshots')
Exemple #13
0
    def find(cls, id):
        """Returns a CloudBlockStorage Volume Type.

        :param id: One of the IDs returned by the types() call.
        :type volume_type_id: int
        """
        url = '/'.join([get_url('cloudblockstorage'), 'types', str(id)])
        return handle_request('get', url, wrapper=cls, container='volume_type')
Exemple #14
0
    def ips(self):
        """Returns a list of ip addresses attached to the NextGenServer instance.

        """
        assert 'id' in self
        url = '/'.join([get_url('cloudserversopenstack'), 'servers',
                str(self['id']), 'ips'])
        return  handle_request('get', url, container='addresses')
Exemple #15
0
    def volume_detach(self, volumeId):
        """Detach the volume specified by volume_id from this NextGenServer.

        """
        assert 'id' in self
        url = '/'.join([get_url('cloudserversopenstack'), 'servers',
            str(self['id']), 'os-volume_attachments', str(volumeId)])
        handle_request('delete', url)
Exemple #16
0
    def delete(self):
        """Delete this Shared IP Group.

        .. versionadded:: 0.1
        """
        assert 'id' in self
        url = '/'.join([get_url('cloudservers'), 'shared_ip_groups',
                        str(self['id'])])
        handle_request('delete', url)
Exemple #17
0
    def unshare_ip(self, address):
        """Unshare this Server's IP

        .. versionadded:: 0.1
        """
        assert 'id' in self
        url = '/'.join([get_url('cloudservers'), 'servers', str(self['id']),
                        'ips', 'public', address])
        handle_request('delete', url)
Exemple #18
0
    def describe_type(cls, volume_type_id):
        """Returns info about :param volume_type_id.

        :param volume_type_id: One of the ids returned by the types() call.
        :type volume_type_id: int
        """
        url = '/'.join((get_url('cloudblockstorage'), 'types',
            str(volume_type_id)))
        return handle_request('get', url, container='volume_type')
Exemple #19
0
    def find(cls, id):
        """Returns a Snapshot by ID

        :param id: The ``id`` of the snapshot to be retrieved
        :type volume_id: str
        :returns: A :class:`Snapshot`
        """
        url = '/'.join([get_url('cloudblockstorage'), 'snapshots', str(id)])
        return handle_request('get', url, wrapper=cls, container='snapshot')
Exemple #20
0
    def find(cls, id):
        """Returns a Volume by ID.

        :param id: The ``id`` of the Volume to be retrieved
        :type id: str
        :returns: A :class:`Volume`
        """
        url = '/'.join([get_url('cloudblockstorage'), 'volumes', str(id)])
        return handle_request('get', url, wrapper=cls, container='volume')
Exemple #21
0
    def list(cls):
        """Returns a list of networks.

        :param detail: Provides more details about the network
        :type: A list of :class:`Network`
        """
        url = [get_url('cloudserversopenstack'), 'os-networksv2']
        url = '/'.join(url)
        return handle_request('get', url, wrapper=cls, container='networks')
Exemple #22
0
    def find(cls, network_id):
        """Returns a Network by id

        :param network_id: The ``network_id`` of the Network to be retrieved
        :type id: str
        :returns: A :class:`Network`
        """
        assert len(network_id) > 0
        url = '/'.join([get_url('cloudserversopenstack'), 'os-networksv2', str(network_id)])
        return handle_request('get', url, wrapper=cls, container='network')
Exemple #23
0
    def revert_resize(self):
        """Revert an unsuccessful resize operation

        .. versionadded:: 0.3
        """
        assert 'id' in self
        data = json.dumps({'revertResize': None})
        url = '/'.join([get_url('cloudserversopenstack'), 'servers',
                        str(self['id']), 'action'])
        handle_request('post', url, data)
Exemple #24
0
    def unrescue(self):
        """Take server out of rescue mode

        .. versionadded:: 0.3
        """
        assert 'id' in self
        data = json.dumps({'unrescue': None})
        url = '/'.join([get_url('cloudserversopenstack'), 'servers',
                        str(self['id']), 'action'])
        return handle_request('post', url, data)
Exemple #25
0
    def confirm_resize(self):
        """Confirm a successful resize operation

        .. versionadded:: 0.1
        """
        assert 'id' in self
        data = json.dumps({'confirmResize': None})
        url = '/'.join([get_url('cloudservers'), 'servers',
                        str(self['id']), 'action'])
        handle_request('post', url, data)
Exemple #26
0
    def volumes_list(self):
        """Return the list of volumes attached to this NextGenServer.

        """
        assert 'id' in self
        url = '/'.join([get_url('cloudserversopenstack'), 'servers',
                str(self['id']), 'os-volume_attachments'])
        self['volumes'] = handle_request('get', url, wrapper=VolumeAttachment,
                container='volumeAttachments', server_id=str(self['id']))
        return self['volumes']
Exemple #27
0
    def export_zone(self):
        """Export the raw BIND zone for this Domain.

        :returns: An :class:`Export` containing the raw BIND zone

        .. versionadded:: 0.1
        """
        url = '/'.join([get_url('clouddns'), 'domains', str(self['id']),
                        'export'])
        return handle_request('get', url, wrapper=Export)
Exemple #28
0
    def ips_by_networkid(self, network_id=None):
        """Returns the list of ip addresses attached to the NextGenServer by the
        specified network_id.

        """
        assert 'id' in self
        assert network_id is not None
        url = '/'.join([get_url('cloudserversopenstack'), 'servers',
                str(self['id']), 'ips', str(network_id)])
        return  handle_request('get', url, container='network')
Exemple #29
0
    def get(cls, volume_id):
        """Returns a Volume by id

        :param volume_id: The ``volume_id`` of the Volume to be retrieved
        :type volume_id: str
        :returns: A :class:`Volume`
        """
        url = '/'.join((get_url('cloudblockstorage'), 'volumes',
            str(volume_id)))
        return handle_request('get', url, wrapper=cls, container='volume')
Exemple #30
0
    def create(cls, name, image, flavor, adminpass=None, diskConfig='AUTO',
            metadata={}, files={}, networksUUIDs=[], accessIPv4=None,
            accessIPv6=None):
        """Create a CloudNextGenServers NextGenServer

        :param image: The NextGenImage or ``id``
        :type image: int or :class:`NextGenImage`
        :param flavor: The NextGenFlavor or  ``id``
        :type image: int or :class:`NextGenFlavor`
        :param adminpass: Admin Password.
        :type type: str
        :param diskConfig: OS-DCF:diskConfig AUTO or MANUAL
        :type type: str
        :param metadata: key/value pairs
        :type type: dict
        :param files: path,contents dict
        :type type: dict
        :param networksUUIDs: list of network uuids
        :type type: list
        :param accessIPv4: IPv4 access address
        :type type: str
        :param accessIPv6: IPv6 access address
        :type type: str
        .. versionadded:: 0.3
        """
        assert diskConfig in ['AUTO', 'MANUAL'], ("diskConfig must be "
        "'AUTO' or 'MANUAL'")
        if isinstance(image, NextGenImage):
            image = image.id
        if isinstance(flavor, NextGenFlavor):
            flavor = flavor.id
        data = {'server': {'name': name,
                           'imageRef': image,
                           'flavorRef': flavor,
                           'metadata': metadata or {},
                           'personality': []
                            }}
        if isinstance(files, dict):
            for path, contents in list(files.items()):
                data['server']['personality'].append({'path': path, 'contents': contents})
        if adminpass:
            assert len(adminpass) >= 8, ("Admin password must be at least 8"
            "chars long")
            data['server']['adminPass'] = str(adminpass)
        if len(networksUUIDs) > 0:
            data['server']['networks'] = [ {'uuuid': v} for v in networksUUIDs ]
        if diskConfig:
            data['server']['OS-DCF:diskConfig'] = diskConfig
        if accessIPv4:
            data['server']['accessIPv4'] = accessIPv4
        if accessIPv6:
            data['server']['accessIPv6'] = accessIPv6
        data = json.dumps(data)
        url = '/'.join([get_url('cloudserversopenstack'), 'servers'])
        return handle_request('post', url, data, cls, 'server')