def deployServer(self, auth, zone_id, req): """ @param : auth {"auth":{ "key_id":"Key ID", "secret":"Secret Key", } } @param: zone_id @param: req (Dic) {"name":"test-machine", "package":"g4-general-4G", "image":'a601aa10-100a-11e6-9eb1-2bbb19e1e3e6', ... """ # 1. Get Endpoint of Zone cloudMgr = self.locator.getManager('CloudManager') (r_name, z_name) = cloudMgr._getRegionZone(zone_id) auth_data = auth['auth'] a_key = auth_data['key_id'] s_key = auth_data['secret'] # 2. Create DataCenter object sdc = DataCenter(location=z_name, key_id=a_key, secret=s_key) # 3. Create Server self.logger.debug(req) instance = sdc.create_machine(**req) instance.poll_until('running') server = {} server['status'] = instance.status() server['server_id'] = instance.id server['private_ip_address'] = instance.private_ips[0] self.logger.debug("Create Server => Private IP:%s" % instance.private_ips[0]) server['floating_ip'] = instance.public_ips[0] self.logger.debug("Create Server => Public IP:%s" % instance.public_ips[0]) # CPU, Memory, Disk if req.has_key('package'): packages = sdc.packages(req['package']) if len(packages) == 1: package = packages[0] server['cpus'] = package['vcpus'] server['memory'] = package['memory'] server['disk'] = package['disk'] self.logger.debug("status:%s" % instance.status()) return server
def run(self, **kwargs): """ """ assert not env.hosts if not env.get('joyent_account'): print "To use the joyent api you must add a joyent_account value to your env" sys.exit(1) setup_name = 'servers.%s.setup' % kwargs.get('type') config_name = 'servers.%s.api_config' % kwargs.get('type') user = kwargs.get('user', 'admin') task = functions.get_task_instance(setup_name) default_dataset = DEFAULT_DATASET default_package = DEFAULT_PACKAGE networks = None if task: results = execute(config_name, hosts=['fake'])['fake'] config_section = results['config_section'] if 'dataset' in results: default_dataset = results['dataset'] if 'server_size' in results: default_package = results['server_size'] if 'networks' in results: networks = results['networks'] else: print "I don't know how to add a %s server" % kwargs.get('type') sys.exit(1) assert config_section location = kwargs.get('data_center') if not location and env.get('joyent_default_data_center'): location = env.joyent_default_data_center elif not location: print "You must supply an data_center argument or add a joyent_default_data_center attribute to your env" sys.exit(1) if not networks and env.get('joyent_default_networks'): networks = env.joyent_default_networks key_name = raw_input('Enter your ssh key name: ') key_id = '/%s/keys/%s' % ( env.joyent_account, key_name) allow_agent = env.get('allow_agent', False) sdc = DataCenter(location=location, key_id=key_id, allow_agent=allow_agent) name = functions.get_remote_name(None, config_section, name=kwargs.get('name')) dataset = kwargs.get('data_set', default_dataset) datasets = sdc.datasets(search=dataset) datasets = sorted(datasets, key=lambda k: k['urn']) if datasets: dataset_id = datasets[-1]['id'] else: print "couldn't find a dataset %s. Here is what we found." % dataset print datasets sys.exit(1) package = kwargs.get('package', default_package) packages = sdc.packages(name=package) if len(packages) != 1: print "couldn't find a package %s. Here is what we found." % package print packages sys.exit(1) else: package_id = packages[0]['id'] new_args = { 'name' : name, 'dataset' : dataset_id, 'metadata' : kwargs.get('metadata', {}), 'tags' : kwargs.get('tags', {}), 'package' : package_id, 'networks' : networks } machine = sdc.create_machine(**new_args) print 'waiting for machine to come up' machine.poll_until('running') public_ip = machine.public_ips[0] print "added machine %s" % public_ip host_string = '%s@%s' % (user, public_ip) print 'done' execute(setup_name, hosts=[host_string])
def discoverServer(self, auth, zone_id, req): """ @param : auth {"auth":{ "key_id":"Key ID", "secret":"Secret Key", } } @param: zone_id @param: req (Dic) {"server_id":"xxx-xxxx-xxx"} {"name":"server_name"} """ # 1. Get Endpoint of Zone cloudMgr = self.locator.getManager('CloudManager') (r_name, z_name) = cloudMgr._getRegionZone(zone_id) auth_data = auth['auth'] a_key = auth_data['key_id'] s_key = auth_data['secret'] # 2. Create DataCenter object sdc = DataCenter(location=z_name, key_id=a_key, secret=s_key) if req.has_key('server_id'): mid = req['server_id'] machine = sdc.machine(machine_id=mid) dic = {} dic['server_id'] = machine.id dic['private_ip_address'] = machine.private_ips[0] if len(machine.public_ips) >= 1: dic['floating_ip'] = machine.public_ips[0] dic['status'] = machine.status() # CPU, Memory, Disk if machine.has_key('package'): packages = sdc.packages(machine['package']) if len(packages) == 1: package = packages[0] dic['cpus'] = package['vcpus'] dic['memory'] = package['memory'] dic['disk'] = package['disk'] return dic elif req.has_key('name'): my_name = req['name'] machines = sdc.machines(name=my_name) self.logger.debug("Detected machine is %s" % len(machines)) dic = {} if len(machines) != 1: # Error or ? return dic machine = machines[0] dic['server_id'] = machine.id dic['private_ip_address'] = machine.private_ips[0] if len(machine.public_ips) >= 1: dic['floating_ip'] = machine.public_ips[0] dic['status'] = machine.status() # CPU, Memory, Disk #if machine.has_key('package'): # packages = sdc.packages(machine['package']) # if len(packages) == 1: # package = packages[0] # dic['cpus'] = package['vcpus'] # dic['memory'] = package['memory'] # dic['disk'] = package['disk'] return dic self.logger.error("No Server founded:%s" % z_name)
def run(self, **kwargs): """ """ assert not env.hosts if not env.get('joyent_account'): print "To use the joyent api you must add a joyent_account value to your env" sys.exit(1) setup_name = 'servers.%s.setup' % kwargs.get('type') config_name = 'servers.%s.api_config' % kwargs.get('type') user = kwargs.get('user', 'admin') task = functions.get_task_instance(setup_name) default_dataset = DEFAULT_DATASET default_package = DEFAULT_PACKAGE networks = None if task: results = execute(config_name, hosts=['fake'])['fake'] config_section = results['config_section'] if 'dataset' in results: default_dataset = results['dataset'] if 'server_size' in results: default_package = results['server_size'] if 'networks' in results: networks = results['networks'] else: print "I don't know how to add a %s server" % kwargs.get('type') sys.exit(1) assert config_section location = kwargs.get('data_center') if not location and env.get('joyent_default_data_center'): location = env.joyent_default_data_center elif not location: print "You must supply an data_center argument or add a joyent_default_data_center attribute to your env" sys.exit(1) if not networks and env.get('joyent_default_networks'): networks = env.joyent_default_networks key_name = raw_input('Enter your ssh key name: ') key_id = '/%s/keys/%s' % (env.joyent_account, key_name) allow_agent = env.get('allow_agent', False) sdc = DataCenter(location=location, key_id=key_id, allow_agent=allow_agent) name = functions.get_remote_name(None, config_section, name=kwargs.get('name')) dataset = kwargs.get('data_set', default_dataset) datasets = sdc.datasets(search=dataset) datasets = sorted(datasets, key=lambda k: k['urn']) if datasets: dataset_id = datasets[-1]['id'] else: print "couldn't find a dataset %s. Here is what we found." % dataset print datasets sys.exit(1) package = kwargs.get('package', default_package) packages = sdc.packages(name=package) if len(packages) != 1: print "couldn't find a package %s. Here is what we found." % package print packages sys.exit(1) else: package_id = packages[0]['id'] new_args = { 'name': name, 'dataset': dataset_id, 'metadata': kwargs.get('metadata', {}), 'tags': kwargs.get('tags', {}), 'package': package_id, 'networks': networks } machine = sdc.create_machine(**new_args) print 'waiting for machine to come up' machine.poll_until('running') public_ip = machine.public_ips[0] print "added machine %s" % public_ip host_string = '%s@%s' % (user, public_ip) print 'done' execute(setup_name, hosts=[host_string])