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