예제 #1
0
 def __init__(self, username, password, project_id, project_name,
              auth_url, endpoint_type, region_name, scope, cert, key,
              cacert, domain_name, insecure, logger):
     self.logger = logger
     prj = project_id.replace('-', '')
     self._ks = KeystoneCommands(username=username,
                                 password=password,
                                 tenant=project_name,
                                 domain_name=domain_name,
                                 auth_url=auth_url,
                                 region_name=region_name,
                                 scope=scope,
                                 cert=cert,
                                 key=key,
                                 cacert=cacert,
                                 insecure=insecure,
                                 logger=logger)
     self._qh = neuc.Client(
         '2.0',
         session=self._ks.get_session(scope='project'),
         region_name=region_name)
     self._nh = novac.Client(
         '2',
         session=self._ks.get_session(scope='project'),
         region_name=region_name)
예제 #2
0
 def delete_user(self, user):
     kc = KeystoneCommands(username=self.inputs.stack_user,
                           password=self.inputs.stack_password,
                           tenant=self.inputs.project_name,
                           auth_url=self.auth_url,
                           insecure=self.insecure)
     kc.delete_user(user)
예제 #3
0
 def reauth(self):
     self.keystone = KeystoneCommands(username=self.user,
                                      password=self.passwd,
                                      tenant=self.project,
                                      auth_url=self.auth_url,
                                      insecure=self.insecure,
                                      region_name=self.region_name,
                                      logger=self.logger)
예제 #4
0
 def add_user_to_project(self, user, project):
     kc = KeystoneCommands(username=self.inputs.stack_user,
                           password=self.inputs.stack_password,
                           tenant=self.inputs.project_name,
                           auth_url=self.auth_url,
                           insecure=self.insecure)
     try:
         kc.add_user_to_tenant(project, user, 'admin')
     except Exception as e:
         self.logger.info("%s user already added to project" % (user))
예제 #5
0
 def reauth(self):
     self.keystone = KeystoneCommands(username=self.user,
                                      password=self.passwd,
                                      tenant=self.project,
                                      domain_name=self.domain_name,
                                      auth_url=self.auth_url,
                                      insecure=self.insecure,
                                      region_name=self.region_name,
                                      cert=self.keystone_certfile,
                                      key=self.keystone_keyfile,
                                      cacert=self.certbundle,
                                      logger=self.logger,
                                      scope=self.scope)
예제 #6
0
 def create_user(self, user, password):
     kc = KeystoneCommands(username=self.inputs.stack_user,
                           password=self.inputs.stack_password,
                           tenant=self.inputs.project_name,
                           auth_url=self.auth_url,
                           insecure=self.insecure)
     try:
         kc.create_user(user,
                        password,
                        email='',
                        tenant_name=self.inputs.stack_tenant,
                        enabled=True)
     except:
         self.logger.info("%s user already created" % (self.user))
예제 #7
0
 def setUpClass(cls):
     super(BaseMultitenancyTest, cls).setUpClass()
     cls.quantum_h= cls.connections.quantum_h
     cls.nova_h = cls.connections.nova_h
     cls.vnc_lib= cls.connections.vnc_lib
     cls.agent_inspect= cls.connections.agent_inspect
     cls.cn_inspect= cls.connections.cn_inspect
     auth_url = os.getenv('OS_AUTH_URL') or \
                    'http://' + cls.inputs.auth_ip + ':5000/v2.0'
     insecure = bool(os.getenv('OS_INSECURE',True))
     cls.key_stone_clients = KeystoneCommands(
         username=cls.inputs.admin_user,
         password = cls.inputs.admin_password,
         tenant = cls.inputs.admin_tenant,
         auth_url=auth_url,
         insecure=insecure)
예제 #8
0
 def __init__(self, username, password, project_name, inputs, openstack_ip):
     self.inputs = inputs
     self.logger = self.inputs.logger
     auth_url = os.getenv('OS_AUTH_URL') or \
                     'http://' + openstack_ip + ':5000/v2.0'
     insecure = bool(os.getenv('OS_INSECURE', True))
     kc = KeystoneCommands(username=username,
                           password=password,
                           tenant=project_name,
                           auth_url=auth_url,
                           insecure=insecure)
     self.project_id = kc.get_id().replace('-', '')
     self.obj = client.Client('2.0',
                              username=username,
                              password=password,
                              tenant_id=self.project_id,
                              auth_url=auth_url,
                              insecure=insecure)
    def _create_prov_file(self):
        ''' Creates json data for a single node only.
            Optional Env variables:
              openstack creds:
               * OS_USERNAME (default: admin)
               * OS_PASSWORD (default: contrail123)
               * OS_TENANT_NAME (default: admin)
               * OS_DOMAIN_NAME (default: default-domain)
               * OS_AUTH_URL (default: http://127.0.0.1:5000/v2.0)
               * OS_INSECURE (default: True)
              login creds:
               * USERNAME (default: root)
               * PASSWORD (default: c0ntrail123)
              contrail service:
               * DISCOVERY_IP (default: neutron-server ip fetched from keystone endpoint)
        '''
        pattern = 'http[s]?://(?P<ip>\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}):(?P<port>\d+)'
        if self.orchestrator.lower() != 'openstack':
            raise Exception('Please specify testbed info in $PARAMS_FILE '
                            'under "Basic" section, keyword "provFile"')
        if self.orchestrator.lower() == 'openstack':
            auth_url = os.getenv('OS_AUTH_URL', None) or \
                       'http://127.0.0.1:5000/v2.0'
            insecure = bool(os.getenv('OS_INSECURE', True))
            keystone = KeystoneCommands(self.stack_user,
                                        self.stack_password,
                                        self.stack_tenant,
                                        auth_url,
                                        region_name=self.region_name,
                                        insecure=insecure,
                                        logger=self.logger)
            match = re.match(pattern, keystone.get_endpoint('identity')[0])
            self.auth_ip = match.group('ip')
            self.auth_port = match.group('port')

        # Assume contrail-config runs in the same node as neutron-server
        discovery = os.getenv('DISCOVERY_IP', None) or \
                    (keystone and re.match(pattern,
                    keystone.get_endpoint('network')[0]).group('ip'))
        ds_client = VerificationDsSrv(discovery)
        services = ds_client.get_ds_services().info
        cfgm = database = services['config']
        collector = services['analytics']
        bgp = services['control-node']
        openstack = [self.auth_ip] if self.auth_ip else []
        computes = self.get_computes(cfgm[0])
        data = {'hosts': list()}
        hosts = cfgm + database + collector + bgp + computes + openstack
        username = os.getenv('USERNAME', 'root')
        password = os.getenv('PASSWORD', 'c0ntrail123')
        for host in set(hosts):
            with settings(host_string='%s@%s' % (username, host),
                          password=password,
                          warn_only=True):
                hname = run('hostname')
            hdict = {
                'ip': host,
                'data-ip': host,
                'control-ip': host,
                'username': username,
                'password': password,
                'name': hname,
                'roles': [],
            }
            if host in cfgm:
                hdict['roles'].append({'type': 'cfgm'})
            if host in collector:
                hdict['roles'].append({'type': 'collector'})
            if host in database:
                hdict['roles'].append({'type': 'database'})
            if host in bgp:
                hdict['roles'].append({'type': 'bgp'})
            if host in computes:
                hdict['roles'].append({'type': 'compute'})
            if host in openstack:
                hdict['roles'].append({'type': 'openstack'})
            data['hosts'].append(hdict)
        tempfile = NamedTemporaryFile(delete=False)
        with open(tempfile.name, 'w') as fd:
            json.dump(data, fd)
        return tempfile.name