Ejemplo n.º 1
0
    def __init__(self, username=None, password=None, tenant_name=None,
                 api_server_host=None, api_server_port=None,
                 api_server_url=None, conf_file=None, user_info=None,
                 auth_token=None, auth_host=None, auth_port=None,
                 auth_protocol = None, auth_url=None, auth_type=None,
                 wait_for_connect=False, api_server_use_ssl=False,
                 domain_name=None):
        # TODO allow for username/password to be present in creds file

        self._obj_serializer = self._obj_serializer_diff
        for object_type, resource_type in all_resource_type_tuples:
            for oper_str in ('_create', '_read', '_update', '_delete',
                         's_list', '_get_default_id'):
                method = getattr(self, '_object%s' %(oper_str))
                bound_method = functools.partial(method, resource_type)
                functools.update_wrapper(bound_method, method)
                if oper_str == '_get_default_id':
                    setattr(self, 'get_default_%s_id' % (object_type),
                            bound_method)
                else:
                    setattr(self, '%s%s' %(object_type, oper_str),
                            bound_method)

        cfg_parser = ConfigParser.ConfigParser()
        try:
            cfg_parser.read(conf_file or
                            "/etc/contrail/vnc_api_lib.ini")
        except Exception as e:
            logger = logging.getLogger(__name__)
            logger.warn("Exception: %s", str(e))

        self._api_connect_protocol = VncApi._DEFAULT_API_SERVER_CONNECT
        # API server SSL Support
        use_ssl = api_server_use_ssl
        if isinstance(api_server_use_ssl, basestring):
           use_ssl = (api_server_use_ssl.lower() == 'true')
        if use_ssl:
             self._api_connect_protocol = VncApi._DEFAULT_API_SERVER_SSL_CONNECT

        # keystone
        self._authn_type = auth_type or \
            _read_cfg(cfg_parser, 'auth', 'AUTHN_TYPE',
                      self._DEFAULT_AUTHN_TYPE)

        if self._authn_type == 'keystone':
            self._authn_protocol = auth_protocol or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_PROTOCOL',
                                           self._DEFAULT_AUTHN_PROTOCOL)
            self._authn_server = auth_host or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_SERVER',
                                           self._DEFAULT_AUTHN_SERVER)
            self._authn_port = auth_port or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_PORT',
                                         self._DEFAULT_AUTHN_PORT)
            self._authn_url = auth_url or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_URL',
                                        self._DEFAULT_AUTHN_URL)
            self._username = username or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_USER',
                          self._DEFAULT_AUTHN_USER)
            self._password = password or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_PASSWORD',
                          self._DEFAULT_AUTHN_PASSWORD)
            self._tenant_name = tenant_name or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_TENANT',
                          self._DEFAULT_AUTHN_TENANT)
            self._domain_name = domain_name or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_DOMAIN',
                          self._DEFAULT_DOMAIN_ID)

            #contrail-api SSL support
            try:
               self._apiinsecure = cfg_parser.getboolean('global','insecure')
            except (AttributeError,
                    ConfigParser.NoOptionError,
                    ConfigParser.NoSectionError):
               self._apiinsecure = False
            apicertfile=_read_cfg(cfg_parser,'global','certfile','')
            apikeyfile=_read_cfg(cfg_parser,'global','keyfile','')
            apicafile=_read_cfg(cfg_parser,'global','cafile','')

            self._use_api_certs=False
            if apicertfile and apikeyfile \
               and apicafile and api_server_use_ssl:
                    certs=[apicertfile, apikeyfile, apicafile]
                    self._apicertbundle=utils.getCertKeyCaBundle(VncApi._DEFAULT_API_CERT_BUNDLE,certs)
                    self._use_api_certs=True

            # keystone SSL support
            try:
              self._ksinsecure = cfg_parser.getboolean('auth', 'insecure')
            except (AttributeError,
                    ConfigParser.NoOptionError,
                    ConfigParser.NoSectionError):
              self._ksinsecure = False
            kscertfile=_read_cfg(cfg_parser,'auth','certfile','')
            kskeyfile=_read_cfg(cfg_parser,'auth','keyfile','')
            kscafile=_read_cfg(cfg_parser,'auth','cafile','')

            self._use_ks_certs=False
            if kscertfile and kskeyfile and kscafile \
               and self._authn_protocol == 'https':
                   certs=[kscertfile, kskeyfile, kscafile]
                   self._kscertbundle=utils.getCertKeyCaBundle(VncApi._DEFAULT_KS_CERT_BUNDLE,certs)
                   self._use_ks_certs=True

            if 'v2' in self._authn_url:
                self._authn_body = \
                    '{"auth":{"passwordCredentials":{' + \
                    '"username": "******",' % (self._username) + \
                    ' "password": "******"},' % (self._password) + \
                    ' "tenantName":"%s"}}' % (self._tenant_name)
            else:
                self._authn_body = \
                     '{"auth":{"identity":{' + \
                        '"methods": ["password"],' + \
                          ' "password":{' + \
                            ' "user":{' + \
                               ' "name": "%s",' % (self._username) + \
                               ' "domain": { "id": "%s" },' % (self._domain_name) + \
                               ' "password": "******"' % (self._password) + \
                             '}' + \
                            '}' + \
                          '},' + \
                          ' "scope":{' + \
                            ' "project":{' + \
                              ' "domain": { "id": "%s" },' % (self._domain_name) + \
                              ' "name": "%s"' % (self._username) + \
                            '}' + \
                          '}' + \
                        '}' + \
                     '}'
            self._user_info = user_info

        if not api_server_host:
            self._web_host = _read_cfg(cfg_parser, 'global', 'WEB_SERVER',
                                       self._DEFAULT_WEB_SERVER)
        else:
            self._web_host = api_server_host

        if not api_server_port:
            self._web_port = _read_cfg(cfg_parser, 'global', 'WEB_PORT',
                                       self._DEFAULT_WEB_PORT)
        else:
            self._web_port = api_server_port

        self._max_pools = int(_read_cfg(
            cfg_parser, 'global', 'MAX_POOLS',
            self._DEFAULT_MAX_POOLS))
        self._max_conns_per_pool = int(_read_cfg(
            cfg_parser, 'global', 'MAX_CONNS_PER_POOL',
            self._DEFAULT_MAX_CONNS_PER_POOL))

        self._curl_logging = False
        if _read_cfg(cfg_parser, 'global', 'curl_log', False):
            self._curl_logging=True
            self._curl_logger=_cfg_curl_logging(_read_cfg(cfg_parser,'global','curl_log',False))

        # Where client's view of world begins
        if not api_server_url:
            self._base_url = _read_cfg(cfg_parser, 'global', 'BASE_URL',
                                       self._DEFAULT_BASE_URL)
        else:
            self._base_url = api_server_url

        # Where server says its root is when _base_url is fetched
        self._srv_root_url = None

        # Type-independent actions offered by server
        self._action_uri = ActionUriDict(self)

        self._headers = self._DEFAULT_HEADERS.copy()
        self._headers[rest.hdr_client_tenant()] = self._tenant_name

        self._auth_token_input = False
        self._auth_token = None

        if auth_token:
            self._auth_token = auth_token
            self._auth_token_input = True
            self._headers['X-AUTH-TOKEN'] = self._auth_token

        # user information for quantum
        if self._user_info:
            if 'user_id' in self._user_info:
                self._headers['X-API-USER-ID'] = self._user_info['user_id']
            if 'user' in self._user_info:
                self._headers['X-API-USER'] = self._user_info['user']
            if 'role' in self._user_info:
                self.set_user_roles([self._user_info['role']])

        #self._http = HTTPClient(self._web_host, self._web_port,
        #                        network_timeout = 300)

        self._create_api_server_session()

        retry_count = 6
        while retry_count:
            try:
                homepage = self._request(rest.OP_GET, self._base_url,
                                         retry_on_error=False)
                self._parse_homepage(homepage)
            except ServiceUnavailableError as e:
                logger = logging.getLogger(__name__)
                logger.warn("Exception: %s", str(e))
                if wait_for_connect:
                    # Retry connect infinitely when http retcode 503
                    continue
                elif retry_count:
                    # Retry connect 60 times when http retcode 503
                    retry_count -= 1
                    time.sleep(1)
            else:
                # connected succesfully
                break
Ejemplo n.º 2
0
    def __init__(self, username=None, password=None, tenant_name=None,
                 api_server_host='127.0.0.1', api_server_port='8082',
                 api_server_url=None, conf_file=None, user_info=None,
                 auth_token=None):
        # TODO allow for username/password to be present in creds file

        super(VncApi, self).__init__(self._obj_serializer_diff)

        cfg_parser = ConfigParser.ConfigParser()
        clen = len(cfg_parser.read(conf_file or
                                   "/etc/contrail/vnc_api_lib.ini"))

        # keystone
        self._authn_type = _read_cfg(cfg_parser, 'auth', 'AUTHN_TYPE',
                                     self._DEFAULT_AUTHN_TYPE)
        if self._authn_type == 'keystone':
            self._authn_protocol = _read_cfg(cfg_parser, 'auth', 'AUTHN_PROTOCOL',
                                           self._DEFAULT_AUTHN_PROTOCOL)
            self._authn_server = _read_cfg(cfg_parser, 'auth', 'AUTHN_SERVER',
                                           self._DEFAULT_AUTHN_SERVER)
            self._authn_port = _read_cfg(cfg_parser, 'auth', 'AUTHN_PORT',
                                         self._DEFAULT_AUTHN_PORT)
            self._authn_url = _read_cfg(cfg_parser, 'auth', 'AUTHN_URL',
                                        self._DEFAULT_AUTHN_URL)
            self._username = username or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_USER',
                          self._DEFAULT_AUTHN_USER)
            self._password = password or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_PASSWORD',
                          self._DEFAULT_AUTHN_PASSWORD)
            self._tenant_name = tenant_name or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_TENANT',
                          self._DEFAULT_AUTHN_TENANT)
            self._authn_body = \
                '{"auth":{"passwordCredentials":{' + \
                '"username": "******",' % (self._username) + \
                ' "password": "******"},' % (self._password) + \
                ' "tenantName":"%s"}}' % (self._tenant_name)
            self._user_info = user_info

        if not api_server_host:
            self._web_host = _read_cfg(cfg_parser, 'global', 'WEB_SERVER',
                                       self._DEFAULT_WEB_SERVER)
        else:
            self._web_host = api_server_host

        if not api_server_port:
            self._web_port = _read_cfg(cfg_parser, 'global', 'WEB_PORT',
                                       self._DEFAULT_WEB_PORT)
        else:
            self._web_port = api_server_port

        # Where client's view of world begins
        if not api_server_url:
            self._base_url = _read_cfg(cfg_parser, 'global', 'BASE_URL',
                                       self._DEFAULT_BASE_URL)
        else:
            self._base_url = api_server_url

        # Where server says its root is when _base_url is fetched
        self._srv_root_url = None

        # Type-independent actions offered by server
        self._action_uri = {}

        self._headers = self._DEFAULT_HEADERS.copy()
        self._headers[rest.hdr_client_tenant()] = self._tenant_name

        self._auth_token_input = False

        if auth_token:
            self._auth_token = auth_token
            self._auth_token_input = True
            self._headers['X-AUTH-TOKEN'] = self._auth_token

        # user information for quantum
        if self._user_info:
            if 'user_id' in self._user_info:
                self._headers['X-API-USER-ID'] = self._user_info['user_id']
            if 'user' in self._user_info:
                self._headers['X-API-USER'] = self._user_info['user']
            if 'role' in self._user_info:
                self._headers['X-API-ROLE'] = self._user_info['role']

        #self._http = HTTPClient(self._web_host, self._web_port,
        #                        network_timeout = 300)

        self._create_api_server_session()

        homepage = self._request_server(rest.OP_GET, self._base_url,
                                        retry_on_error=False)
        self._cfg_root_url = self._parse_homepage(homepage)
Ejemplo n.º 3
0
    def __init__(self,
                 username=None,
                 password=None,
                 tenant_name=None,
                 api_server_host='127.0.0.1',
                 api_server_port='8082',
                 api_server_url=None,
                 conf_file=None,
                 user_info=None,
                 auth_token=None,
                 auth_host=None,
                 auth_port=None,
                 auth_protocol=None,
                 auth_url=None,
                 api_auth_protocol=_DEFAULT_CONTRAIL_API_PROTOCOL):
        # TODO allow for username/password to be present in creds file

        super(VncApi, self).__init__(self._obj_serializer_diff)

        cfg_parser = ConfigParser.ConfigParser()
        clen = len(
            cfg_parser.read(conf_file or "/etc/contrail/vnc_api_lib.ini"))

        self._api_auth_protocol = api_auth_protocol
        # keystone
        self._authn_type = _read_cfg(cfg_parser, 'auth', 'AUTHN_TYPE',
                                     self._DEFAULT_AUTHN_TYPE)
        if self._authn_type == 'keystone':
            self._authn_protocol = auth_protocol or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_PROTOCOL',
                                           self._DEFAULT_AUTHN_PROTOCOL)
            self._authn_server = auth_host or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_SERVER',
                                           self._DEFAULT_AUTHN_SERVER)
            self._authn_port = auth_port or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_PORT',
                                         self._DEFAULT_AUTHN_PORT)
            self._authn_url = auth_url or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_URL',
                                        self._DEFAULT_AUTHN_URL)
            self._username = username or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_USER',
                          self._DEFAULT_AUTHN_USER)
            self._password = password or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_PASSWORD',
                          self._DEFAULT_AUTHN_PASSWORD)
            self._tenant_name = tenant_name or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_TENANT',
                          self._DEFAULT_AUTHN_TENANT)
            self._authn_body = \
                '{"auth":{"passwordCredentials":{' + \
                '"username": "******",' % (self._username) + \
                ' "password": "******"},' % (self._password) + \
                ' "tenantName":"%s"}}' % (self._tenant_name)
            self._user_info = user_info

        if not api_server_host:
            self._web_host = _read_cfg(cfg_parser, 'global', 'WEB_SERVER',
                                       self._DEFAULT_WEB_SERVER)
        else:
            self._web_host = api_server_host

        if not api_server_port:
            self._web_port = _read_cfg(cfg_parser, 'global', 'WEB_PORT',
                                       self._DEFAULT_WEB_PORT)
        else:
            self._web_port = api_server_port

        # Where client's view of world begins
        if not api_server_url:
            self._base_url = _read_cfg(cfg_parser, 'global', 'BASE_URL',
                                       self._DEFAULT_BASE_URL)
        else:
            self._base_url = api_server_url

        # Where server says its root is when _base_url is fetched
        self._srv_root_url = None

        # Type-independent actions offered by server
        self._action_uri = {}

        self._headers = self._DEFAULT_HEADERS.copy()
        self._headers[rest.hdr_client_tenant()] = self._tenant_name

        self._auth_token_input = False

        if auth_token:
            self._auth_token = auth_token
            self._auth_token_input = True
            self._headers['X-AUTH-TOKEN'] = self._auth_token

        # user information for quantum
        if self._user_info:
            if 'user_id' in self._user_info:
                self._headers['X-API-USER-ID'] = self._user_info['user_id']
            if 'user' in self._user_info:
                self._headers['X-API-USER'] = self._user_info['user']
            if 'role' in self._user_info:
                self._headers['X-API-ROLE'] = self._user_info['role']

        #self._http = HTTPClient(self._web_host, self._web_port,
        #                        network_timeout = 300)

        self._create_api_server_session()

        homepage = self._request_server(rest.OP_GET,
                                        self._base_url,
                                        retry_on_error=False)
        self._cfg_root_url = self._parse_homepage(homepage)
Ejemplo n.º 4
0
    def __init__(self, username=None, password=None, tenant_name=None,
                 api_server_host='127.0.0.1', api_server_port='8082',
                 api_server_url=None, conf_file=None, user_info=None,
                 auth_token=None, auth_host=None, auth_port=None,
                 auth_protocol = None, auth_url=None, auth_type=None,
                 wait_for_connect=False, api_server_use_ssl=False,
                 domain_name=None):
        # TODO allow for username/password to be present in creds file

        self._obj_serializer = self._obj_serializer_diff
        for object_type, resource_type in all_resource_type_tuples:
            for oper_str in ('_create', '_read', '_update', '_delete',
                         's_list', '_get_default_id'):
                method = getattr(self, '_object%s' %(oper_str))
                bound_method = functools.partial(method, resource_type)
                functools.update_wrapper(bound_method, method)
                if oper_str == '_get_default_id':
                    setattr(self, 'get_default_%s_id' % (object_type),
                            bound_method)
                else:
                    setattr(self, '%s%s' %(object_type, oper_str),
                            bound_method)

        cfg_parser = ConfigParser.ConfigParser()
        try:
            cfg_parser.read(conf_file or
                            "/etc/contrail/vnc_api_lib.ini")
        except Exception as e:
            logger = logging.getLogger(__name__)
            logger.warn("Exception: %s", str(e))

        self._api_connect_protocol = VncApi._DEFAULT_API_SERVER_CONNECT
        # API server SSL Support
        use_ssl = api_server_use_ssl
        if isinstance(api_server_use_ssl, basestring):
           use_ssl = (api_server_use_ssl.lower() == 'true')
        if use_ssl:
             self._api_connect_protocol = VncApi._DEFAULT_API_SERVER_SSL_CONNECT

        # keystone
        self._authn_type = auth_type or \
            _read_cfg(cfg_parser, 'auth', 'AUTHN_TYPE',
                      self._DEFAULT_AUTHN_TYPE)

        if self._authn_type == 'keystone':
            self._authn_protocol = auth_protocol or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_PROTOCOL',
                                           self._DEFAULT_AUTHN_PROTOCOL)
            self._authn_server = auth_host or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_SERVER',
                                           self._DEFAULT_AUTHN_SERVER)
            self._authn_port = auth_port or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_PORT',
                                         self._DEFAULT_AUTHN_PORT)
            self._authn_url = auth_url or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_URL',
                                        self._DEFAULT_AUTHN_URL)
            self._username = username or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_USER',
                          self._DEFAULT_AUTHN_USER)
            self._password = password or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_PASSWORD',
                          self._DEFAULT_AUTHN_PASSWORD)
            self._tenant_name = tenant_name or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_TENANT',
                          self._DEFAULT_AUTHN_TENANT)
            self._domain_name = domain_name or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_DOMAIN',
                          self._DEFAULT_DOMAIN_ID)

            #contrail-api SSL support
            try:
               self._apiinsecure = cfg_parser.getboolean('global','insecure')
            except (AttributeError,
                    ConfigParser.NoOptionError,
                    ConfigParser.NoSectionError):
               self._apiinsecure = False
            apicertfile=_read_cfg(cfg_parser,'global','certfile','')
            apikeyfile=_read_cfg(cfg_parser,'global','keyfile','')
            apicafile=_read_cfg(cfg_parser,'global','cafile','')

            self._use_api_certs=False
            if apicertfile and apikeyfile \
               and apicafile and api_server_use_ssl:
                    certs=[apicertfile, apikeyfile, apicafile]
                    self._apicertbundle=utils.getCertKeyCaBundle(VncApi._DEFAULT_API_CERT_BUNDLE,certs)
                    self._use_api_certs=True

            # keystone SSL support
            try:
              self._ksinsecure = cfg_parser.getboolean('auth', 'insecure')
            except (AttributeError,
                    ConfigParser.NoOptionError,
                    ConfigParser.NoSectionError):
              self._ksinsecure = False
            kscertfile=_read_cfg(cfg_parser,'auth','certfile','')
            kskeyfile=_read_cfg(cfg_parser,'auth','keyfile','')
            kscafile=_read_cfg(cfg_parser,'auth','cafile','')

            self._use_ks_certs=False
            if kscertfile and kskeyfile and kscafile \
               and self._authn_protocol == 'https':
                   certs=[kscertfile, kskeyfile, kscafile]
                   self._kscertbundle=utils.getCertKeyCaBundle(VncApi._DEFAULT_KS_CERT_BUNDLE,certs)
                   self._use_ks_certs=True

            if 'v2' in self._authn_url:
                self._authn_body = \
                    '{"auth":{"passwordCredentials":{' + \
                    '"username": "******",' % (self._username) + \
                    ' "password": "******"},' % (self._password) + \
                    ' "tenantName":"%s"}}' % (self._tenant_name)
            else:
                self._authn_body = \
                     '{"auth":{"identity":{' + \
                        '"methods": ["password"],' + \
                          ' "password":{' + \
                            ' "user":{' + \
                               ' "name": "%s",' % (self._username) + \
                               ' "domain": { "name": "%s" },' % (self._domain_name) + \
                               ' "password": "******"' % (self._password) + \
                             '}' + \
                            '}' + \
                          '},' + \
                          ' "scope":{' + \
                            ' "project":{' + \
                              ' "domain": { "name": "%s" },' % (self._domain_name) + \
                              ' "name": "%s"' % (self._tenant_name) + \
                            '}' + \
                          '}' + \
                        '}' + \
                     '}'
            self._user_info = user_info

        if not api_server_host:
            self._web_host = _read_cfg(cfg_parser, 'global', 'WEB_SERVER',
                                       self._DEFAULT_WEB_SERVER)
        else:
            self._web_host = api_server_host

        if not api_server_port:
            self._web_port = _read_cfg(cfg_parser, 'global', 'WEB_PORT',
                                       self._DEFAULT_WEB_PORT)
        else:
            self._web_port = api_server_port

        self._max_pools = int(_read_cfg(
            cfg_parser, 'global', 'MAX_POOLS',
            self._DEFAULT_MAX_POOLS))
        self._max_conns_per_pool = int(_read_cfg(
            cfg_parser, 'global', 'MAX_CONNS_PER_POOL',
            self._DEFAULT_MAX_CONNS_PER_POOL))

	self._curl_logging = False
        if _read_cfg(cfg_parser, 'global', 'curl_log', False):
            self._curl_logging = True
            self._curl_logger=_cfg_curl_logging(_read_cfg(cfg_parser,'global','curl_log',False))

        # Where client's view of world begins
        if not api_server_url:
            self._base_url = _read_cfg(cfg_parser, 'global', 'BASE_URL',
                                       self._DEFAULT_BASE_URL)
        else:
            self._base_url = api_server_url

        # Where server says its root is when _base_url is fetched
        self._srv_root_url = None

        # Type-independent actions offered by server
        self._action_uri = ActionUriDict(self)

        self._headers = self._DEFAULT_HEADERS.copy()
        self._headers[rest.hdr_client_tenant()] = self._tenant_name

        self._auth_token_input = False
        self._auth_token = None

        if auth_token:
            self._auth_token = auth_token
            self._auth_token_input = True
            self._headers['X-AUTH-TOKEN'] = self._auth_token

        # user information for quantum
        if self._user_info:
            if 'user_id' in self._user_info:
                self._headers['X-API-USER-ID'] = self._user_info['user_id']
            if 'user' in self._user_info:
                self._headers['X-API-USER'] = self._user_info['user']
            if 'role' in self._user_info:
                self.set_user_roles([self._user_info['role']])

        #self._http = HTTPClient(self._web_host, self._web_port,
        #                        network_timeout = 300)

        self._create_api_server_session()

        retry_count = 6
        while retry_count:
            try:
                homepage = self._request(rest.OP_GET, self._base_url,
                                         retry_on_error=False)
                self._parse_homepage(homepage)
            except ServiceUnavailableError as e:
                logger = logging.getLogger(__name__)
                logger.warn("Exception: %s", str(e))
                if wait_for_connect:
                    # Retry connect infinitely when http retcode 503
                    continue
                elif retry_count:
                    # Retry connect 60 times when http retcode 503
                    retry_count -= 1
                    time.sleep(1)
            else:
                # connected succesfully
                break
    def __init__(self, username=None, password=None, tenant_name=None,
                 api_server_host='127.0.0.1', api_server_port='8082',
                 api_server_url=None, conf_file=None, user_info=None,
                 auth_token=None, auth_host=None, auth_port=None,
                 auth_protocol = None, auth_url=None, auth_type=None,
                 wait_for_connect=False):
        # TODO allow for username/password to be present in creds file

        self._obj_serializer = self._obj_serializer_diff
        for resource_type in vnc_api.gen.vnc_api_client_gen.all_resource_types:
            obj_type = resource_type.replace('-', '_')
            for oper_str in ('_create', '_read', '_update', '_delete',
                         's_list', '_get_default_id'):
                method = getattr(self, '_object%s' %(oper_str))
                bound_method = functools.partial(method, resource_type)
                functools.update_wrapper(bound_method, method)
                setattr(self, '%s%s' %(obj_type, oper_str),
                    bound_method)

        cfg_parser = ConfigParser.ConfigParser()
        try:
            cfg_parser.read(conf_file or
                            "/etc/contrail/vnc_api_lib.ini")
        except Exception as e:
            logger = logging.getLogger(__name__)
            logger.warn("Exception: %s", str(e))
            
        # keystone
        self._authn_type = auth_type or \
            _read_cfg(cfg_parser, 'auth', 'AUTHN_TYPE',
                      self._DEFAULT_AUTHN_TYPE)

        if self._authn_type == 'keystone':
            self._authn_protocol = auth_protocol or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_PROTOCOL',
                                           self._DEFAULT_AUTHN_PROTOCOL)
            self._authn_server = auth_host or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_SERVER',
                                           self._DEFAULT_AUTHN_SERVER)
            self._authn_port = auth_port or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_PORT',
                                         self._DEFAULT_AUTHN_PORT)
            self._authn_url = auth_url or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_URL',
                                        self._DEFAULT_AUTHN_URL)
            self._username = username or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_USER',
                          self._DEFAULT_AUTHN_USER)
            self._password = password or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_PASSWORD',
                          self._DEFAULT_AUTHN_PASSWORD)
            self._tenant_name = tenant_name or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_TENANT',
                          self._DEFAULT_AUTHN_TENANT)
            if 'v2' in self._authn_url:
                self._authn_body = \
                    '{"auth":{"passwordCredentials":{' + \
                    '"username": "******",' % (self._username) + \
                    ' "password": "******"},' % (self._password) + \
                    ' "tenantName":"%s"}}' % (self._tenant_name)
            else:
                self._authn_body = \
                     '{"auth":{"identity":{' + \
                        '"methods": ["password"],' + \
                          ' "password":{' + \
                            ' "user":{' + \
                               ' "name": "%s",' % (self._username) + \
                               ' "domain": { "id": "%s" },' % (self._DEFAULT_DOMAIN_ID) + \
                               ' "password": "******"' % (self._password) + \
                             '}' + \
                            '}' + \
                          '},' + \
                          ' "scope":{' + \
                            ' "project":{' + \
                              ' "domain": { "id": "%s" },' % (self._DEFAULT_DOMAIN_ID) + \
                              ' "name": "%s"' % (self._username) + \
                            '}' + \
                          '}' + \
                        '}' + \
                     '}'
            self._user_info = user_info

        if not api_server_host:
            self._web_host = _read_cfg(cfg_parser, 'global', 'WEB_SERVER',
                                       self._DEFAULT_WEB_SERVER)
        else:
            self._web_host = api_server_host

        if not api_server_port:
            self._web_port = _read_cfg(cfg_parser, 'global', 'WEB_PORT',
                                       self._DEFAULT_WEB_PORT)
        else:
            self._web_port = api_server_port

        # Where client's view of world begins
        if not api_server_url:
            self._base_url = _read_cfg(cfg_parser, 'global', 'BASE_URL',
                                       self._DEFAULT_BASE_URL)
        else:
            self._base_url = api_server_url

        # Where server says its root is when _base_url is fetched
        self._srv_root_url = None

        # Type-independent actions offered by server
        self._action_uri = ActionUriDict(self)

        self._headers = self._DEFAULT_HEADERS.copy()
        self._headers[rest.hdr_client_tenant()] = self._tenant_name

        self._auth_token_input = False
        self._auth_token = None

        if auth_token:
            self._auth_token = auth_token
            self._auth_token_input = True
            self._headers['X-AUTH-TOKEN'] = self._auth_token

        # user information for quantum
        if self._user_info:
            if 'user_id' in self._user_info:
                self._headers['X-API-USER-ID'] = self._user_info['user_id']
            if 'user' in self._user_info:
                self._headers['X-API-USER'] = self._user_info['user']
            if 'role' in self._user_info:
                self._headers['X-API-ROLE'] = self._user_info['role']

        #self._http = HTTPClient(self._web_host, self._web_port,
        #                        network_timeout = 300)

        self._create_api_server_session()

        retry_count = 6
        while retry_count:
            try:
                homepage = self._request(rest.OP_GET, self._base_url,
                                         retry_on_error=False)
                self._cfg_root_url = self._parse_homepage(homepage)
            except ServiceUnavailableError as e:
                logger = logging.getLogger(__name__)
                logger.warn("Exception: %s", str(e))
                if wait_for_connect:
                    # Retry connect infinitely when http retcode 503
                    continue
                elif retry_count:
                    # Retry connect 60 times when http retcode 503
                    retry_count -= 1
                    time.sleep(1)
            else:
                # connected succesfully
                break
Ejemplo n.º 6
0
    def __init__(
        self,
        username=None,
        password=None,
        tenant_name=None,
        api_server_host=None,
        api_server_port=None,
        api_server_url=None,
        conf_file=None,
        user_info=None,
        auth_token=None,
        auth_host=None,
        auth_port=None,
        auth_protocol=None,
        auth_url=None,
        auth_type=None,
        wait_for_connect=False,
        api_server_use_ssl=False,
        domain_name=None,
        exclude_hrefs=None,
    ):
        # TODO allow for username/password to be present in creds file

        self._obj_serializer = self._obj_serializer_diff
        for object_type, resource_type in all_resource_type_tuples:
            for oper_str in ("_create", "_read", "_update", "_delete", "s_list", "_get_default_id"):
                method = getattr(self, "_object%s" % (oper_str))
                bound_method = functools.partial(method, resource_type)
                functools.update_wrapper(bound_method, method)
                if oper_str == "_get_default_id":
                    setattr(self, "get_default_%s_id" % (object_type), bound_method)
                else:
                    setattr(self, "%s%s" % (object_type, oper_str), bound_method)

        cfg_parser = ConfigParser.ConfigParser()
        try:
            cfg_parser.read(conf_file or "/etc/contrail/vnc_api_lib.ini")
        except Exception as e:
            logger = logging.getLogger(__name__)
            logger.warn("Exception: %s", str(e))

        self._api_connect_protocol = VncApi._DEFAULT_API_SERVER_CONNECT
        # API server SSL Support
        use_ssl = api_server_use_ssl
        if isinstance(api_server_use_ssl, basestring):
            use_ssl = api_server_use_ssl.lower() == "true"
        if use_ssl:
            self._api_connect_protocol = VncApi._DEFAULT_API_SERVER_SSL_CONNECT

        # keystone
        self._authn_type = auth_type or _read_cfg(cfg_parser, "auth", "AUTHN_TYPE", self._DEFAULT_AUTHN_TYPE)

        if self._authn_type == "keystone":
            self._authn_protocol = auth_protocol or _read_cfg(
                cfg_parser, "auth", "AUTHN_PROTOCOL", self._DEFAULT_AUTHN_PROTOCOL
            )
            self._authn_server = auth_host or _read_cfg(cfg_parser, "auth", "AUTHN_SERVER", self._DEFAULT_AUTHN_SERVER)
            self._authn_port = auth_port or _read_cfg(cfg_parser, "auth", "AUTHN_PORT", self._DEFAULT_AUTHN_PORT)
            self._authn_url = auth_url or _read_cfg(cfg_parser, "auth", "AUTHN_URL", self._DEFAULT_AUTHN_URL)
            self._username = username or _read_cfg(cfg_parser, "auth", "AUTHN_USER", self._DEFAULT_AUTHN_USER)
            self._password = password or _read_cfg(cfg_parser, "auth", "AUTHN_PASSWORD", self._DEFAULT_AUTHN_PASSWORD)
            self._tenant_name = tenant_name or _read_cfg(cfg_parser, "auth", "AUTHN_TENANT", self._DEFAULT_AUTHN_TENANT)
            self._domain_name = domain_name or _read_cfg(cfg_parser, "auth", "AUTHN_DOMAIN", self._DEFAULT_DOMAIN_ID)

            # contrail-api SSL support
            try:
                self._apiinsecure = cfg_parser.getboolean("global", "insecure")
            except (AttributeError, ConfigParser.NoOptionError, ConfigParser.NoSectionError):
                self._apiinsecure = False
            apicertfile = _read_cfg(cfg_parser, "global", "certfile", "")
            apikeyfile = _read_cfg(cfg_parser, "global", "keyfile", "")
            apicafile = _read_cfg(cfg_parser, "global", "cafile", "")

            self._use_api_certs = False
            if api_server_use_ssl:
                certs = []
                if apicafile:
                    certs.append(apicafile)
                if apicertfile:
                    certs.append(apicertfile)
                if apikeyfile:
                    certs.append(apikeyfile)
                if certs:
                    self._apicertbundle = utils.getCertKeyCaBundle(VncApi._DEFAULT_API_CERT_BUNDLE, certs)
                    self._use_api_certs = True

            # keystone SSL support
            try:
                self._ksinsecure = cfg_parser.getboolean("auth", "insecure")
            except (AttributeError, ConfigParser.NoOptionError, ConfigParser.NoSectionError):
                self._ksinsecure = False
            kscertfile = _read_cfg(cfg_parser, "auth", "certfile", "")
            kskeyfile = _read_cfg(cfg_parser, "auth", "keyfile", "")
            kscafile = _read_cfg(cfg_parser, "auth", "cafile", "")

            self._use_ks_certs = False
            if self._authn_protocol == "https":
                certs = []
                if kscafile:
                    certs.append(kscafile)
                if kscertfile:
                    certs.append(kscertfile)
                if kskeyfile:
                    certs.append(kskeyfile)
                if certs:
                    self._kscertbundle = utils.getCertKeyCaBundle(VncApi._DEFAULT_KS_CERT_BUNDLE, certs)
                    self._use_ks_certs = True

            if "v2" in self._authn_url:
                self._authn_body = (
                    '{"auth":{"passwordCredentials":{'
                    + '"username": "******",' % (self._username)
                    + ' "password": "******"},' % (self._password)
                    + ' "tenantName":"%s"}}' % (self._tenant_name)
                )
            else:
                self._authn_body = (
                    '{"auth":{"identity":{'
                    + '"methods": ["password"],'
                    + ' "password":{'
                    + ' "user":{'
                    + ' "name": "%s",' % (self._username)
                    + ' "domain": { "name": "%s" },' % (self._domain_name)
                    + ' "password": "******"' % (self._password)
                    + "}"
                    + "}"
                    + "},"
                    + ' "scope":{'
                    + ' "project":{'
                    + ' "domain": { "name": "%s" },' % (self._domain_name)
                    + ' "name": "%s"' % (self._tenant_name)
                    + "}"
                    + "}"
                    + "}"
                    + "}"
                )
            self._user_info = user_info

        if not api_server_host:
            self._web_host = _read_cfg(cfg_parser, "global", "WEB_SERVER", self._DEFAULT_WEB_SERVER)
        else:
            self._web_host = api_server_host

        if not api_server_port:
            self._web_port = _read_cfg(cfg_parser, "global", "WEB_PORT", self._DEFAULT_WEB_PORT)
        else:
            self._web_port = api_server_port

        self._max_pools = int(_read_cfg(cfg_parser, "global", "MAX_POOLS", self._DEFAULT_MAX_POOLS))
        self._max_conns_per_pool = int(
            _read_cfg(cfg_parser, "global", "MAX_CONNS_PER_POOL", self._DEFAULT_MAX_CONNS_PER_POOL)
        )

        self._curl_logging = False
        if _read_cfg(cfg_parser, "global", "curl_log", False):
            self._curl_logging = True
            self._curl_logger = _cfg_curl_logging(_read_cfg(cfg_parser, "global", "curl_log", False))

        # Where client's view of world begins
        if not api_server_url:
            self._base_url = _read_cfg(cfg_parser, "global", "BASE_URL", self._DEFAULT_BASE_URL)
        else:
            self._base_url = api_server_url

        # Where server says its root is when _base_url is fetched
        self._srv_root_url = None

        # Type-independent actions offered by server
        self._action_uri = ActionUriDict(self)

        self._headers = self._DEFAULT_HEADERS.copy()
        self._headers[rest.hdr_client_tenant()] = self._tenant_name

        self._auth_token_input = False
        self._auth_token = None

        if auth_token:
            self._auth_token = auth_token
            self._auth_token_input = True
            self._headers["X-AUTH-TOKEN"] = self._auth_token

        # user information for quantum
        if self._user_info:
            if "user_id" in self._user_info:
                self._headers["X-API-USER-ID"] = self._user_info["user_id"]
            if "user" in self._user_info:
                self._headers["X-API-USER"] = self._user_info["user"]
            if "role" in self._user_info:
                self.set_user_roles([self._user_info["role"]])

        self._exclude_hrefs = exclude_hrefs

        self._create_api_server_session()

        retry_count = 6
        while retry_count:
            try:
                homepage = self._request(rest.OP_GET, self._base_url, retry_on_error=False)
                self._parse_homepage(homepage)
            except ServiceUnavailableError as e:
                logger = logging.getLogger(__name__)
                logger.warn("Exception: %s", str(e))
                if wait_for_connect:
                    # Retry connect infinitely when http retcode 503
                    continue
                elif retry_count:
                    # Retry connect 60 times when http retcode 503
                    retry_count -= 1
                    time.sleep(1)
            else:
                # connected succesfully
                break
Ejemplo n.º 7
0
    def __init__(self,
                 username=None,
                 password=None,
                 tenant_name=None,
                 api_server_host='127.0.0.1',
                 api_server_port='8082',
                 api_server_url=None,
                 conf_file=None,
                 user_info=None,
                 auth_token=None,
                 auth_host=None,
                 auth_port=None,
                 auth_protocol=None,
                 auth_url=None,
                 auth_type=None,
                 wait_for_connect=False):
        # TODO allow for username/password to be present in creds file

        self._obj_serializer = self._obj_serializer_diff
        for resource_type in vnc_api.gen.vnc_api_client_gen.all_resource_types:
            obj_type = resource_type.replace('-', '_')
            for oper_str in ('_create', '_read', '_update', '_delete',
                             's_list', '_get_default_id'):
                method = getattr(self, '_object%s' % (oper_str))
                bound_method = functools.partial(method, resource_type)
                functools.update_wrapper(bound_method, method)
                setattr(self, '%s%s' % (obj_type, oper_str), bound_method)

        cfg_parser = ConfigParser.ConfigParser()
        try:
            cfg_parser.read(conf_file or "/etc/contrail/vnc_api_lib.ini")
        except Exception as e:
            logger = logging.getLogger(__name__)
            logger.warn("Exception: %s", str(e))

        # keystone
        self._authn_type = auth_type or \
            _read_cfg(cfg_parser, 'auth', 'AUTHN_TYPE',
                      self._DEFAULT_AUTHN_TYPE)

        if self._authn_type == 'keystone':
            self._authn_protocol = auth_protocol or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_PROTOCOL',
                                           self._DEFAULT_AUTHN_PROTOCOL)
            self._authn_server = auth_host or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_SERVER',
                                           self._DEFAULT_AUTHN_SERVER)
            self._authn_port = auth_port or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_PORT',
                                         self._DEFAULT_AUTHN_PORT)
            self._authn_url = auth_url or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_URL',
                                        self._DEFAULT_AUTHN_URL)
            self._username = username or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_USER',
                          self._DEFAULT_AUTHN_USER)
            self._password = password or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_PASSWORD',
                          self._DEFAULT_AUTHN_PASSWORD)
            self._tenant_name = tenant_name or \
                _read_cfg(cfg_parser, 'auth', 'AUTHN_TENANT',
                          self._DEFAULT_AUTHN_TENANT)
            if 'v2' in self._authn_url:
                self._authn_body = \
                    '{"auth":{"passwordCredentials":{' + \
                    '"username": "******",' % (self._username) + \
                    ' "password": "******"},' % (self._password) + \
                    ' "tenantName":"%s"}}' % (self._tenant_name)
            else:
                self._authn_body = \
                     '{"auth":{"identity":{' + \
                        '"methods": ["password"],' + \
                          ' "password":{' + \
                            ' "user":{' + \
                               ' "name": "%s",' % (self._username) + \
                               ' "domain": { "id": "%s" },' % (self._DEFAULT_DOMAIN_ID) + \
                               ' "password": "******"' % (self._password) + \
                             '}' + \
                            '}' + \
                          '},' + \
                          ' "scope":{' + \
                            ' "project":{' + \
                              ' "domain": { "id": "%s" },' % (self._DEFAULT_DOMAIN_ID) + \
                              ' "name": "%s"' % (self._username) + \
                            '}' + \
                          '}' + \
                        '}' + \
                     '}'
            self._user_info = user_info

        if not api_server_host:
            self._web_host = _read_cfg(cfg_parser, 'global', 'WEB_SERVER',
                                       self._DEFAULT_WEB_SERVER)
        else:
            self._web_host = api_server_host

        if not api_server_port:
            self._web_port = _read_cfg(cfg_parser, 'global', 'WEB_PORT',
                                       self._DEFAULT_WEB_PORT)
        else:
            self._web_port = api_server_port

        # Where client's view of world begins
        if not api_server_url:
            self._base_url = _read_cfg(cfg_parser, 'global', 'BASE_URL',
                                       self._DEFAULT_BASE_URL)
        else:
            self._base_url = api_server_url

        # Where server says its root is when _base_url is fetched
        self._srv_root_url = None

        # Type-independent actions offered by server
        self._action_uri = ActionUriDict(self)

        self._headers = self._DEFAULT_HEADERS.copy()
        self._headers[rest.hdr_client_tenant()] = self._tenant_name

        self._auth_token_input = False
        self._auth_token = None

        if auth_token:
            self._auth_token = auth_token
            self._auth_token_input = True
            self._headers['X-AUTH-TOKEN'] = self._auth_token

        # user information for quantum
        if self._user_info:
            if 'user_id' in self._user_info:
                self._headers['X-API-USER-ID'] = self._user_info['user_id']
            if 'user' in self._user_info:
                self._headers['X-API-USER'] = self._user_info['user']
            if 'role' in self._user_info:
                self._headers['X-API-ROLE'] = self._user_info['role']

        #self._http = HTTPClient(self._web_host, self._web_port,
        #                        network_timeout = 300)

        self._create_api_server_session()

        retry_count = 6
        while retry_count:
            try:
                homepage = self._request(rest.OP_GET,
                                         self._base_url,
                                         retry_on_error=False)
                self._cfg_root_url = self._parse_homepage(homepage)
            except ServiceUnavailableError as e:
                logger = logging.getLogger(__name__)
                logger.warn("Exception: %s", str(e))
                if wait_for_connect:
                    # Retry connect infinitely when http retcode 503
                    continue
                elif retry_count:
                    # Retry connect 60 times when http retcode 503
                    retry_count -= 1
                    time.sleep(1)
            else:
                # connected succesfully
                break
Ejemplo n.º 8
0
    def __init__(
        self,
        username=None,
        password=None,
        tenant_name=None,
        api_server_host="127.0.0.1",
        api_server_port="8082",
        api_server_url=None,
        conf_file=None,
        user_info=None,
        auth_token=None,
    ):
        # TODO allow for username/password to be present in creds file

        super(VncApi, self).__init__(self._obj_serializer_diff)

        cfg_parser = ConfigParser.ConfigParser()
        clen = len(cfg_parser.read(conf_file or "/etc/contrail/vnc_api_lib.ini"))

        # keystone
        self._authn_type = _read_cfg(cfg_parser, "auth", "AUTHN_TYPE", self._DEFAULT_AUTHN_TYPE)
        if self._authn_type == "keystone":
            self._authn_protocol = _read_cfg(cfg_parser, "auth", "AUTHN_PROTOCOL", self._DEFAULT_AUTHN_PROTOCOL)
            self._authn_server = _read_cfg(cfg_parser, "auth", "AUTHN_SERVER", self._DEFAULT_AUTHN_SERVER)
            self._authn_port = _read_cfg(cfg_parser, "auth", "AUTHN_PORT", self._DEFAULT_AUTHN_PORT)
            self._authn_url = _read_cfg(cfg_parser, "auth", "AUTHN_URL", self._DEFAULT_AUTHN_URL)
            self._username = username or _read_cfg(cfg_parser, "auth", "AUTHN_USER", self._DEFAULT_AUTHN_USER)
            self._password = password or _read_cfg(cfg_parser, "auth", "AUTHN_PASSWORD", self._DEFAULT_AUTHN_PASSWORD)
            self._tenant_name = tenant_name or _read_cfg(cfg_parser, "auth", "AUTHN_TENANT", self._DEFAULT_AUTHN_TENANT)
            self._authn_body = (
                '{"auth":{"passwordCredentials":{'
                + '"username": "******",' % (self._username)
                + ' "password": "******"},' % (self._password)
                + ' "tenantName":"%s"}}' % (self._tenant_name)
            )
            self._user_info = user_info

        if not api_server_host:
            self._web_host = _read_cfg(cfg_parser, "global", "WEB_SERVER", self._DEFAULT_WEB_SERVER)
        else:
            self._web_host = api_server_host

        if not api_server_port:
            self._web_port = _read_cfg(cfg_parser, "global", "WEB_PORT", self._DEFAULT_WEB_PORT)
        else:
            self._web_port = api_server_port

        # Where client's view of world begins
        if not api_server_url:
            self._base_url = _read_cfg(cfg_parser, "global", "BASE_URL", self._DEFAULT_BASE_URL)
        else:
            self._base_url = api_server_url

        # Where server says its root is when _base_url is fetched
        self._srv_root_url = None

        # Type-independent actions offered by server
        self._action_uri = {}

        self._headers = self._DEFAULT_HEADERS.copy()
        self._headers[rest.hdr_client_tenant()] = self._tenant_name

        self._auth_token = auth_token
        if self._auth_token:
            self._headers["X-AUTH-TOKEN"] = self._auth_token

        # user information for quantum
        if self._user_info:
            if "user_id" in self._user_info:
                self._headers["X-API-USER-ID"] = self._user_info["user_id"]
            if "user" in self._user_info:
                self._headers["X-API-USER"] = self._user_info["user"]
            if "role" in self._user_info:
                self._headers["X-API-ROLE"] = self._user_info["role"]

        # self._http = HTTPClient(self._web_host, self._web_port,
        #                        network_timeout = 300)

        # set when a request is retried after fetching new token, to
        # prevent infinite retries
        self._retry_after_authn = False

        self._create_api_server_session()

        homepage = self._request_server(rest.OP_GET, self._base_url, retry_on_error=False)
        self._cfg_root_url = self._parse_homepage(homepage)