Example #1
0
class CloudStackPlatform(Platform):
    name = 'cloudstack'

    features = [PlatformFeatures.SNAPSHOTS, PlatformFeatures.VOLUMES]
    _dhcp_leases_mtime = None
    _dhcp_leases_path = None
    _router_addr = None

    def __init__(self):
        Platform.__init__(self)
        self._metadata = {}
        self._conn_pool = LocalPool(_create_connection)
        self.refresh_virtual_router_addr()

    def refresh_virtual_router_addr(self):
        leases_pattern = '/var/lib/dhc*/dhclient*.lease*'
        if not self._dhcp_leases_path:
            LOG.debug('Lookuping DHCP leases file')
            try:
                self._dhcp_leases_path = glob.glob(leases_pattern)[0]
            except IndexError:
                raise PlatformError("Can't find virtual router. No file matching pattern: %s", leases_pattern)
        if os.stat(self._dhcp_leases_path).st_mtime == self._dhcp_leases_mtime:
            return

        LOG.debug('Lookuping meta-data server address')
        for line in open(self._dhcp_leases_path):
            if 'dhcp-server-identifier' in line:
                self._router_addr = filter(None, line.split(';')[0].split(' '))[2]
        LOG.debug('Meta-data server: %s', self._router_addr)
        self._dhcp_leases_mtime = os.stat(self._dhcp_leases_path).st_mtime

    def get_private_ip(self):
        return self.get_meta_data('local-ipv4')

    def get_public_ip(self):
        return self.get_meta_data('public-ipv4')

    def get_user_data(self, key=None):
        if self._userdata is None:
            try:
                self._userdata = self._parse_user_data(self.get_meta_data('user-data'))
            except PlatformError, e:
                if 'HTTP Error 404' in e:
                    self._userdata = {}
                else:
                    raise
        return Platform.get_user_data(self, key)
Example #2
0
class CloudStackPlatform(Platform):
    name = 'cloudstack'

    features = [PlatformFeatures.SNAPSHOTS, PlatformFeatures.VOLUMES]

    def __init__(self):
        Platform.__init__(self)

        # Find the virtual router.
        eth0leases = util.firstmatched(lambda x: os.path.exists(x),
                                                                ['/var/lib/dhcp/dhclient.eth0.leases',
                                                                '/var/lib/dhcp3/dhclient.eth0.leases',
                                                                '/var/lib/dhclient/dhclient-eth0.leases'],
                                                                '/var/lib/dhclient/dhclient-eth0.leases')
        if not os.path.exists(eth0leases):
            raise PlatformError("Can't find virtual router. file %s not exists" % eth0leases)

        router = None
        for line in open(eth0leases):
            if 'dhcp-server-identifier' in line:
                router = filter(None, line.split(';')[0].split(' '))[2]
        LOG.debug('Meta-data server: %s', router)
        self._router = router

        self._metadata = {}


    def get_private_ip(self):
        return self.get_meta_data('local-ipv4')


    def get_public_ip(self):
        return self.get_meta_data('public-ipv4')


    def get_user_data(self, key=None):
        if self._userdata is None:
            try:
                self._userdata = self._parse_user_data(self.get_meta_data('user-data'))
            except PlatformError, e:
                if 'HTTP Error 404' in e:
                    self._userdata = {}
                else:
                    raise
        return Platform.get_user_data(self, key)