コード例 #1
0
ファイル: JoyentDriver.py プロジェクト: bocabaton/orchestra
    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
コード例 #2
0
ファイル: api.py プロジェクト: ff0000/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])
コード例 #3
0
ファイル: JoyentDriver.py プロジェクト: bocabaton/orchestra
    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)
コード例 #4
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])