예제 #1
0
def opencenter_endpoint(chef, name='test', os='ubuntu'):
    validate_environment(chef, name=name, os=os)
    env = env_format % (name, os)
    query = "in_use:\"server\" AND chef_environment:%s" % env
    server = next(Node(node['name']) for node in Search('node').query(query))
    ep_url = "https://%s:8443" % server['ipaddress']
    return OpenCenterEndpoint(ep_url, user="******", password="******")
예제 #2
0
 def _update_task(self, result, input_data):
     task_id = input_data['id']
     endpoint_url = global_config['endpoints']['admin']
     ep = OpenCenterEndpoint(endpoint_url)
     task = ep.tasks[task_id]
     task._request_get()
     task.state = 'done'
     task.result = result
     task.save()
예제 #3
0
    def __init__(self,
                 endpoint='http://localhost:8080',
                 logger=None,
                 parent_task_id=None,
                 adventure_globals=None):
        self.endpoint = OpenCenterEndpoint(endpoint)
        self.logger = logger
        self.parent_task_id = parent_task_id

        self.api = db_api.api_from_endpoint(endpoint)

        self.adventure_globals = adventure_globals
        if not adventure_globals:
            self.adventure_globals = {}

        if not logger:
            self.logger = logging.getLogger()

        opencenter.backends.load()
예제 #4
0
    def _maybe_init(self):
        if self.endpoint:
            return True
        else:
            LOG.info('Connecting to endpoint')
            try:
                self.endpoint = OpenCenterEndpoint(self.endpoint_uri)
            except ConnectionError:
                return False
            except KeyboardInterrupt:
                raise

        if not self.host_id:
            # try to find our host ID from the endpoint
            LOG.info('Initial connection: fetching host ID')
            #TODO: Fix up client to support whoami in a more
            #reasonable manner and fix this code up
            root = self.endpoint.nodes.filter(
                'facts.parent_id = None and name = "workspace"').first()
            resp = root.whoami(hostname=self.name).json
            try:
                host_id = resp['node_id']
            except KeyError:
                LOG.error('Unable to get node ID: %s' % resp['message'])
                return False
            reg_file = '.'.join((self.hostidfile, 'registering'))
            dirs = reg_file.rpartition(os.sep)[0]
            try:
                os.makedirs(dirs)
            except OSError:
                pass

            with open(reg_file, 'wb') as f:
                f.write(str(host_id))
            resp = root.whoami(node_id=host_id).json
            try:
                node = resp['node']
            except KeyError:
                LOG.error('Unable to get node ID: %s' % resp['message'])
                return False
            if node['id'] == host_id:
                os.rename(reg_file, self.hostidfile)
                self.host_id = node['id']
            else:
                LOG.error('Node ID mismatch.')
                return False

        # update the module list
        self.producer_lock.acquire()
        task = {'action': 'modules.list',
                'payload': {},
                'id': -1}
        self.pending_tasks.append(task)
        self.producer_condition.notify()
        LOG.debug('added module_list task to work queue')
        self.producer_lock.release()
        self.producer_lock.acquire()
        task = {'action': 'modules.actions',
                'payload': {},
                'id': -1}
        self.pending_tasks.append(task)
        self.producer_condition.notify()
        LOG.debug('added module_list task to work queue')
        self.producer_lock.release()

        return True