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)
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)