def __init__(self, process_filename, node=None, previous_clustering_results=None): self.previous_clustering_results = previous_clustering_results if not node: node = fetch_node(marshall=json) with open(process_filename) as f: strategy = replace_variables(f.read()) self.process_dict = json.loads(strategy) driver_cls = node.value['driver'] if '_' not in node.value['driver'] \ else node.value['driver'][:node.value['driver'].find('_') ] + node.value['driver'][node.value['driver'].rfind('_') + 1:] self.driver_name = next(driver_name for driver_name, driver_tuple in DRIVERS.iteritems() if driver_tuple[1] == driver_cls) self.config_provider = next(provider for provider in self.process_dict['provider']['options'] if provider['provider']['name'] == ( self.driver_name.upper() if hasattr(Provider, self.driver_name.upper()) else next( ifilter(lambda prov_name: getattr(Provider, prov_name) == self.driver_name, dir(Provider))) )) self.driver_name = self.driver_name.lower() driver = (lambda driver: driver( region=self.config_provider['provider']['region'], **self.config_provider['auth'] ))(get_driver(self.driver_name)) self.node_name = node.key[node.key.find('/', 1) + 1:].encode('utf8') if self.driver_name == 'azure': if 'create_with' not in self.config_provider or \ 'ex_cloud_service_name' not in self.config_provider['create_with']: raise KeyError('`ex_cloud_service_name` must be defined. ' 'See: http://libcloud.readthedocs.org/en/latest/compute/drivers/azure.html' '#libcloud.compute.drivers.azure.AzureNodeDriver.create_node') nodes = driver.list_nodes(self.config_provider['create_with']['ex_cloud_service_name']) else: nodes = driver.list_nodes() self.node = next(ifilter(lambda _node: _node.uuid == node.value['uuid'], nodes), None) if not self.node: raise EnvironmentError('node not found. Maybe the cloud provider is still provisioning?') if 'password' in self.node.extra: print 'password ='******'password'] # pp(node_to_dict(self.node)) self.dns_name = self.node.extra.get('dns_name')
args_to_defaults = zip(reversed(argspec.args), argspec.defaults) for docstring_line in list_docs: if docstring_line.startswith("@type"): list_of_arguments.append(get_argument_dict(docstring_line, argspec, args_to_defaults)) elif docstring_line.startswith("@return"): list_of_return_values.append(get_return(docstring_line)) func_detail["argument_list"] = list_of_arguments func_detail["return_list"] = list_of_return_values func_list.append(func_detail) # get the list of drivers that libcloud supports, # and list of functions that each driver has PROVIDERS_TO_FUNCTIONS = {} for driver_id, driver_tuple in DRIVERS.items(): driver_name = driver_tuple[1] driver_id_and_name = driver_id, driver_name PROVIDERS_TO_FUNCTIONS[driver_id_and_name] = func_list if __name__ == "__main__": for driver_id_and_name, func_list in PROVIDERS_TO_FUNCTIONS.items(): driver_name = driver_id_and_name[1] print driver_name for func in func_list: print "Function name: %s, Argument list: %s, Return list: %s" % ( func["function_name"], func["argument_list"], func["return_list"], ) print "=" * 80