コード例 #1
0
 def api_get(self):
     """ Ask Joyent for all servers in a data center"""
     sdc = DataCenter(location=self.joyent_uri,
                      key_id=self.joyent_key_id,
                      secret=self.joyent_secret,
                      allow_agent=True,
                      verbose=self.debug)
     servers = sdc.machines()
     return servers
コード例 #2
0
    def created_key(self, pub_key_path):
        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(key_id=key_id, allow_agent=allow_agent)

        with tempfile.TemporaryFile() as f:
            get(pub_key_path, f)
            f.seek(0)
            data = f.read()

        sdc.add_key(env.host_string, data)
コード例 #3
0
ファイル: api.py プロジェクト: markmiscavage/red-fab-deploy2
    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])
コード例 #4
0
    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 = 'setup.%s' % kwargs.get('type')

        task = functions.get_task_instance(setup_name)

        default_dataset = DEFAULT_DATASET
        default_package = DEFAULT_PACKAGE

        if task:
            if hasattr(task, 'dataset'):
                default_dataset = task.dataset
            if hasattr(task, 'server_size'):
                default_package = task.server_size
        else:
            print "I don't know how to add a %s server" % kwargs.get('type')
            sys.exit(1)

        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)

        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,
                                         task.config_section,
                                         name=kwargs.get('name'))
        new_args = {
            'name': name,
            'dataset': kwargs.get('data_set', default_dataset),
            'metadata': kwargs.get('metadata', {}),
            'tags': kwargs.get('tags', {}),
            'package': kwargs.get('package', default_package)
        }

        machine = sdc.create_machine(**new_args)

        public_ip = machine.public_ips[0]
        print "added machine %s" % public_ip
        host_string = 'admin@%s' % public_ip

        print "waiting for machine to be ready"
        while machine.status() != 'running':
            print '.'
            time.sleep(5)
        print 'done'

        execute(setup_name, name=name, hosts=[host_string])