예제 #1
0
    def _populate(self, json):
        """
        Map devices more nicely while populating.
        """
        # needed here to avoid circular imports
        from .volume import Volume  # pylint: disable=import-outside-toplevel

        DerivedBase._populate(self, json)

        devices = {}
        for device_index, device in json['devices'].items():
            if not device:
                devices[device_index] = None
                continue

            dev = None
            if 'disk_id' in device and device['disk_id']:  # this is a disk
                dev = Disk.make_instance(device['disk_id'],
                                         self._client,
                                         parent_id=self.linode_id)
            else:
                dev = Volume.make_instance(device['volume_id'],
                                           self._client,
                                           parent_id=self.linode_id)
            devices[device_index] = dev

        self._set('devices', MappedObject(**devices))
예제 #2
0
    def available_backups(self):
        """
        The backups response contains what backups are available to be restored.
        """
        if not hasattr(self, '_avail_backups'):
            result = self._client.get("{}/backups".format(Instance.api_endpoint), model=self)

            if not 'automatic' in result:
                raise UnexpectedResponseError('Unexpected response loading available backups!', json=result)

            automatic = []
            for a in result['automatic']:
                cur = Backup(self._client, a['id'], self.id, a)
                automatic.append(cur)

            snap = None
            if result['snapshot']['current']:
                snap = Backup(self._client, result['snapshot']['current']['id'], self.id,
                        result['snapshot']['current'])

            psnap = None
            if result['snapshot']['in_progress']:
                psnap = Backup(self._client, result['snapshot']['in_progress']['id'], self.id,
                        result['snapshot']['in_progress'])

            self._set('_avail_backups', MappedObject(**{
                "automatic": automatic,
                "snapshot": {
                    "current": snap,
                    "in_progress": psnap,
                }
            }))

        return self._avail_backups
예제 #3
0
    def ips(self):
        """
        The ips related collection is not normalized like the others, so we have to
        make an ad-hoc object to return for its response
        """
        if not hasattr(self, '_ips'):
            result = self._client.get("{}/ips".format(Instance.api_endpoint),
                                      model=self)

            if not "ipv4" in result:
                raise UnexpectedResponseError(
                    'Unexpected response loading IPs', json=result)

            v4pub = []
            for c in result['ipv4']['public']:
                i = IPAddress(self._client, c['address'], c)
                v4pub.append(i)

            v4pri = []
            for c in result['ipv4']['private']:
                i = IPAddress(self._client, c['address'], c)
                v4pri.append(i)

            shared_ips = []
            for c in result['ipv4']['shared']:
                i = IPAddress(self._client, c['address'], c)
                shared_ips.append(i)

            slaac = IPAddress(self._client, result['ipv6']['slaac']['address'],
                              result['ipv6']['slaac'])
            link_local = IPAddress(self._client,
                                   result['ipv6']['link_local']['address'],
                                   result['ipv6']['link_local'])

            pools = []
            for p in result['ipv6']['global']:
                pools.append(IPv6Pool(self._client, p['range']))

            ips = MappedObject(
                **{
                    "ipv4": {
                        "public": v4pub,
                        "private": v4pri,
                        "shared": shared_ips,
                    },
                    "ipv6": {
                        "slaac": slaac,
                        "link_local": link_local,
                        "pools": pools,
                    },
                })

            self._set('_ips', ips)

        return self._ips
예제 #4
0
    def transfer(self):
        """
        Get per-linode transfer
        """
        if not hasattr(self, '_transfer'):
            result = self._client.get("{}/transfer".format(Instance.api_endpoint), model=self)

            if not 'used' in result:
                raise UnexpectedResponseError('Unexpected response when getting Transfer Pool!')

            mapped = MappedObject(**result)

            setattr(self, '_transfer', mapped)

        return self._transfer
예제 #5
0
    def _populate(self, json):
        """
        Map devices more nicely while populating.
        """
        # needed here to avoid circular imports
        from .volume import Volume  # pylint: disable=import-outside-toplevel

        DerivedBase._populate(self, json)

        devices = {}
        for device_index, device in json['devices'].items():
            if not device:
                devices[device_index] = None
                continue

            dev = None
            if 'disk_id' in device and device['disk_id']:  # this is a disk
                dev = Disk.make_instance(device['disk_id'],
                                         self._client,
                                         parent_id=self.linode_id)
            else:
                dev = Volume.make_instance(device['volume_id'],
                                           self._client,
                                           parent_id=self.linode_id)
            devices[device_index] = dev

        self._set('devices', MappedObject(**devices))

        interfaces = []
        if "interfaces" in json:
            interfaces = [
                ConfigInterface(c["purpose"],
                                label=c["label"],
                                ipam_address=c["ipam_address"])
                for c in json["interfaces"]
            ]

        self._set("interfaces", interfaces)