예제 #1
0
    def _update_collector(self, collector, collector_obj):
        plugin_info = collector['plugin_info']
        if 'secret' in plugin_info:
            plugin_info['secret_id'] = self.secret_name2id[
                plugin_info['secret']]
            del plugin_info['secret']
        if 'secret_group' in plugin_info:
            plugin_info['secret_group_id'] = self.secret_group_name2id[
                plugin_info['secret_group']]
            del plugin_info['secret_group']

        params = {
            'name': collector['name'],
            'plugin_info': plugin_info,
            'priority': collector.get('priority', 1),
            'domain_id': collector_obj.domain_id,
            'collector_id': collector_obj.collector_id,
            'tags': collector.get('tags', {})
        }
        collector_obj = self.inventory.Collector.update(
            params, metadata=self.get_meta())
        print("########### Update Collector ###############")
        print_json(collector_obj)
        self.regist_collectors.append(collector_obj)
        return collector_obj
예제 #2
0
    def _find_domain(self, domain_info):
        param = {
            'query': {
                'filter': [{
                    'k': 'state',
                    'v': 'ENABLED',
                    'o': 'eq'
                }]
            }
        }
        domain_id = domain_info.get('domain_id', None)
        domain_name = domain_info.get('name', None)

        if domain_id:
            param['domain_id'] = domain_id
        elif domain_name:
            param['name'] = domain_name
        else:
            print(
                f'############ CANNOT FIND DOMAIN (domain_name: {domain_name}, domain_id: {domain_id}) ############'
            )
            return None

        print(f'############ FIND DOMAIN ({param}) ############')
        result = None
        result = self.identity.Domain.list(param)
        if len(result.results) == 1:
            domain = result.results[0]
            print_json(domain)
            print(f'############ FOUND - DOMAIN ({domain}) ############')
            return domain
        print(f'############ DOMAIN NOT FOUND ############')
        return None
예제 #3
0
    def _find_and_update_project(self, project_param, domain):
        print("########### FIND Project ###############")
        query = {
            'filter': [{
                'k': 'name',
                'v': project_param['name'],
                'o': 'eq'
            }]
        }
        projects = self.identity.Project.list(
            {
                'query': query,
                'domain_id': domain.domain_id
            },
            metadata=self.get_meta())
        if len(projects.results) == 0:
            print("########### NOT FOUND - project ###############")
            return None
        if len(projects.results) > 1:
            print(
                "########### Multiple projecs found - use one ###############")
        if len(projects.results) == 1:
            print("########### FOUND - project ###############")
        prj = projects.results[0]
        print_json(prj)

        project_param['project_id'] = prj.project_id
        project_param.update({'domain_id': domain.domain_id})
        prj = self.identity.Project.update(project_param,
                                           metadata=self.get_meta())
        print("########### UDATE PROJECT ###############")

        return prj.project_id
예제 #4
0
    def _find_project_group(self, project_group, domain):
        pg_name = project_group.get('name')
        if pg_name is None:
            print('##### CANNOT FIND PROJECT GROUP #####')
            return None

        query = {'filter': [{'k': 'name', 'v': pg_name, 'o': 'eq'}]}

        results = self.identity.ProjectGroup.list(
            {
                'query': query,
                'domain_id': domain.domain_id
            },
            metadata=self.get_meta())

        if len(results.results) == 1:
            # found
            pg = results.results[0]
            print('##### FOUDND PROJECT GROUP #####')
            print_json(pg)
            return pg.project_group_id

        if len(results.results) > 1:
            # Too many matched. Use one.
            print(
                '##### FOUDND MULTIPLE PROJECT GROUP - Use the first one.#####'
            )
            pg = results.results[0]
            print_json(pg)
            return pg.project_group_id
        else:
            print('##### PROJECT GROUP - NOT FOUDND #####')
            return None
예제 #5
0
 def register_local_repository(self, param):
     if param:
         repo = self.repository.Repository.register(param, metadata=self.get_meta())
         self.append_terminator(self.repository.Repository.deregister, {'repository_id': repo.repository_id})
         print_json(repo)
         return repo
     return None
예제 #6
0
    def _create_secret_group(self, name, secret_name_list, domain):
        default_param = {'name': name, 'domain_id': domain.domain_id}
        # Create Secret Group
        secret_group_obj = self.secret.SecretGroup.create(
            default_param, metadata=self.get_meta())

        sec_id_list = []
        for name in secret_name_list:
            sec_id = self.secret_name2id[name]
            sec_id_list.append(sec_id)

        for sec_id in sec_id_list:
            sec_param = {
                'secret_id': sec_id,
                'secret_group_id': secret_group_obj.secret_group_id,
                'domain_id': domain.domain_id
            }
            self.secret.SecretGroup.add_secret(sec_param,
                                               metadata=self.get_meta())

        self.secret_group_name2id[
            secret_group_obj.name] = secret_group_obj.secret_group_id
        self.append_terminator(
            self.secret.SecretGroup.delete, {
                'domain_id': domain.domain_id,
                'secret_group_id': secret_group_obj.secret_group_id
            })
        print("########### Create SECRET GROUP ###############")
        print_json(secret_group_obj)
예제 #7
0
 def collect(self, domain):
     for collect in self.regist_collectors:
         collector_id = collect.collector_id
         params2 = {
             'collector_id': collector_id,
             'collect_mode': 'ALL',
             'domain_id': domain.domain_id
         }
         job = self.inventory.Collector.collect(params2,
                                                metadata=self.get_meta())
         print("########### Do Collect!! ###############")
         print_json(job)
예제 #8
0
 def _create_user(self, user_data, domain_id):
     print("########### Create User ###############")
     user_data.update({'domain_id': domain_id})
     #print(f"meta: {self.get_meta()}")
     print(f"user_data: {user_data}")
     user = self.identity.User.create(user_data, metadata=self.get_meta())
     self.append_terminator(self.identity.User.delete, {
         'domain_id': domain_id,
         'user_id': user.user_id
     })
     print_json(user)
     return user
예제 #9
0
 def _add_schedule(self, schedule, domain):
     schedule['domain_id'] = domain.domain_id
     schedule_obj = self.statistics.Schedule.add(schedule,
                                                 metadata=self.get_meta())
     self.schedule_name2id[schedule_obj.topic] = schedule_obj.schedule_id
     self.append_terminator(self.statistics.Schedule.delete, {
         'schedule_id': schedule_obj.schedule_id,
         'domain_id': domain.domain_id
     })
     print("########### add schedule #############")
     print_json(schedule_obj)
     return schedule_obj
예제 #10
0
    def _update_user(self, user_data, domain_id):
        user = None
        try:
            # update_user
            user_data.update({'domain_id': domain_id})

            user = self.identity.User.update(user_data,
                                             metadata=self.get_meta())
            print("########### Update User - update-mode ###############")
            print_json(user)
        except Exception as e:
            print(f'Cannot update user. (user={user}')
        return user
예제 #11
0
    def _update_region(self, region_param, region_obj):
        region_default_params = {
            'name': region_param['name'],
            'region_id': region_obj.region_id,
            'domain_id': region_obj.domain_id
        }
        region_default_params.update(region_param)

        region_obj = self.inventory.Region.update(region_default_params,
                                                  metadata=self.get_meta())
        print("########### Update Region ###############")
        print_json(region_obj)
        return region_obj
예제 #12
0
    def _create_project_group(self, project_group, domain):
        pg_name = project_group.get('name', random_string()[0:10])
        param = {'name': pg_name, 'domain_id': domain.domain_id}
        # Overwrite param, if needed
        param.update(project_group)

        pg = self.identity.ProjectGroup.create(param, metadata=self.get_meta())
        print("########### Create Project-Group ###############")
        print_json(pg)
        self.append_terminator(self.identity.ProjectGroup.delete, {
            'project_group_id': pg.project_group_id,
            'domain_id': domain.domain_id
        })
        return pg.project_group_id
예제 #13
0
    def _register_datasource(self, param, domain):
        param['domain_id'] = domain.domain_id

        ds_obj = self.monitoring.DataSource.register(param, metadata=self.get_meta())
        self.datasource_name2id[ds_obj.name] = ds_obj.data_source_id
        self.append_terminator(
            self.monitoring.DataSource.deregister,
            {
                'data_source_id': ds_obj.data_source_id,
                'domain_id': domain.domain_id
            }
        )
        print("########### Create DataSource #############")
        print_json(ds_obj)
        return ds_obj
예제 #14
0
    def _create_project(self, param2, domain):
        print("########### Create Project ###############")

        name = random_string()[0:10]
        param = {'name': name, 'domain_id': domain.domain_id}
        # Overwrite param, if needed
        param.update(param2)

        project = self.identity.Project.create(param, metadata=self.get_meta())
        print_json(project)
        self.append_terminator(self.identity.Project.delete, {
            'project_id': project.project_id,
            'domain_id': domain.domain_id
        })
        return project.project_id
예제 #15
0
    def _create_collector(self, collector, domain):
        plugin_info = collector['plugin_info']
        print("XXXXXXXXXXXXXXXXXXXX secret name 2 id XXXXXXXXXXXXXXXXX")
        print(self.secret_name2id)

        # is_public
        is_public = collector.get('is_public', True)

        # secret
        secret = plugin_info.get('secret', None)
        if secret:
            plugin_info['secret_id'] = self.secret_name2id[secret]
            del plugin_info['secret']
        # secret Group
        secret_group = plugin_info.get('secret_group', None)
        if secret_group:
            plugin_info['secret_group_id'] = self.secret_group_name2id[
                secret_group]
            del plugin_info['secret_group']

        params = {
            'name': collector['name'],
            'is_public': is_public,
            'plugin_info': plugin_info,
            'priority': collector.get('priority', 1),
            'domain_id': domain.domain_id,
            'tags': collector.get('tags', {})
        }

        # project_id
        project_name = collector.get('project_name', None)
        if project_name:
            # Map to project_name to project_id
            project_id = self.project_name2id[project_name]
            params.update({'project_id': project_id})

        print(params)
        collector_obj = self.inventory.Collector.create(
            params, metadata=self.get_meta())
        print("########### Create Collector ###############")
        print_json(collector_obj)
        self.regist_collectors.append(collector_obj)
        self.append_terminator(
            self.inventory.Collector.delete, {
                'domain_id': domain.domain_id,
                'collector_id': collector_obj.collector_id
            })
예제 #16
0
    def _create_region(self, region, domain):
        region_default_params = {
            'name': region.get('name', f'region-{random_string()[0:4]}'),
            'domain_id': domain.domain_id
        }
        region_default_params.update(region)

        region_obj = self.inventory.Region.create(region_default_params,
                                                  metadata=self.get_meta())
        print("########### Create Region ###############")
        print_json(region_obj)
        self.region_name2id[region_obj.name] = region_obj.region_id
        self.append_terminator(self.inventory.Region.delete, {
            'domain_id': domain.domain_id,
            'region_id': region_obj.region_id
        })
        return region_obj
예제 #17
0
    def _update_zone(self, zone, zone_obj):
        region_name = zone['region']
        if self.zone_name2id.get(region_name) is None:
            self.zone_name2id[region_name] = {}
        # region_id = self.region_name2id[region_name]
        zone_default_params = {
            'name': zone.get('name', f'zone-{random_string()[0:4]}'),
            'zone_id': zone_obj.zone_id,
            'domain_id': zone_obj.domain_id
        }
        zone_default_params.update(zone)
        del zone_default_params['region']
        zone_obj = self.inventory.Zone.update(zone_default_params,
                                              metadata=self.get_meta())

        print("########### Update Zone ###############")
        print_json(zone_obj)
        return zone_obj
예제 #18
0
 def create_user_api_keys(self, api_key_users, domain):
     result = {}
     for api_key_user in api_key_users:
         api_default_param = {
             'user_id': api_key_user['user_id'],
             'domain_id': domain.domain_id
         }
         api_key_obj = self.identity.APIKey.create(
             api_default_param,
             metadata=self.get_meta()
         )
         result[api_key_user['user_id']] = api_key_obj.api_key
         print("########### Create a new user API KEY ###############")
         print_json(api_key_obj)
         self.append_terminator(
             self.identity.APIKey.delete,
             {'domain_id': domain.domain_id, 'api_key_id': api_key_obj.api_key_id}
         )
     return result
예제 #19
0
    def _update_pool(self, pool, pool_obj):
        region_name = pool['region']
        # region_id = self.region_name2id[region_name]
        zone_name = pool['zone']
        zone_id = self.zone_name2id[region_name][zone_name]
        default_pool_params = {
            'name': pool['name'],
            'pool_id': pool_obj.pool_id,
            'domain_id': pool_obj.domain_id
        }
        default_pool_params.update(pool)
        del default_pool_params['region']
        del default_pool_params['zone']
        pool_obj = self.inventory.Pool.update(default_pool_params,
                                              metadata=self.get_meta())
        print("########### Update Pool ###############")
        print_json(pool_obj)

        return pool_obj
예제 #20
0
    def _create_secret(self, secret, domain):
        data = secret['data']

        default_param = secret
        # Project
        project_name = secret.get('project_name', None)
        if project_name:
            project_id = self.project_name2id[project_name]
            default_param['project_id'] = project_id
            del default_param['project_name']

        # ServiceAccount
        service_account_name = secret.get('service_account', None)
        if service_account_name:
            service_account_id = self.service_account_name2id[service_account_name]
            default_param['service_account_id'] = service_account_id
            del default_param['service_account']

        default_param.update({
            'domain_id': domain.domain_id
        })
        print(f"Create Secret: {default_param}")
        secret_obj = self.secret.Secret.create(default_param, metadata=self.get_meta())
        self.secret_name2id[secret_obj.name] = secret_obj.secret_id
        self.append_terminator(
            self.secret.Secret.delete,
            {
                'domain_id': domain.domain_id,
                'secret_id': secret_obj.secret_id
            }
        )
        print("########### Create SECRET ###############")
        print_json(secret_obj)
        issue = self.secret.Secret.get_data(
            {'secret_id': secret_obj.secret_id, 'domain_id': domain.domain_id},
            metadata=self.get_meta()
        )
        print("######### ISSUE SECRET #########")
        print_json(issue)
예제 #21
0
 def _create_pool(self, pool, domain):
     region_name = pool['region']
     # region_id = self.region_name2id[region_name]
     zone_name = pool['zone']
     zone_id = self.zone_name2id[region_name][zone_name]
     default_pool_params = {
         'name': pool['name'],
         'zone_id': zone_id,
         'domain_id': domain.domain_id
     }
     del pool['region']
     del pool['zone']
     default_pool_params.update(pool)
     pool_obj = self.inventory.Pool.create(default_pool_params,
                                           metadata=self.get_meta())
     print("########### Create Pool ###############")
     print_json(pool_obj)
     self.append_terminator(self.inventory.Pool.delete, {
         'domain_id': domain.domain_id,
         'pool_id': pool_obj.pool_id
     })
     return pool_obj
예제 #22
0
    def _find_and_update_service_account(self, service_account_param, domain):
        print("########### FIND ServiceAccount ###############")
        query = {
            'filter': [{
                'k': 'name',
                'v': service_account_param['name'],
                'o': 'eq'
            }]
        }
        service_accounts = self.identity.ServiceAccount.list(
            {
                'query': query,
                'domain_id': domain.domain_id
            },
            metadata=self.get_meta())
        if len(service_accounts.results) == 0:
            print("########### NOT FOUND - service accounts ###############")
            return None
        if len(service_accounts.results) > 1:
            print(
                "########### Multiple service accounts found - use one ###############"
            )
        if len(service_accounts.results) == 1:
            print("########### FOUND - ServiceAccount ###############")
        service_account = service_accounts.results[0]
        print_json(service_account)

        service_account_param[
            'service_account_id'] = service_account.service_account_id
        service_account_param.update({'domain_id': domain.domain_id})
        # provider can not be updated
        if 'provider' in service_account_param:
            del service_account_param['provider']
        service_account = self.identity.ServiceAccount.update(
            service_account_param, metadata=self.get_meta())
        print("########### UDATE ServiceAccount ###############")

        return service_account.service_account_id
예제 #23
0
    def _create_zone(self, zone, domain):
        region_name = zone['region']
        if self.zone_name2id.get(region_name) is None:
            self.zone_name2id[region_name] = {}
        region_id = self.region_name2id[region_name]
        zone_default_params = {
            'name': zone.get('name', f'zone-{random_string()[0:4]}'),
            'region_id': region_id,
            'domain_id': domain.domain_id
        }
        # del zone['region']
        zone_default_params.update(zone)
        del zone_default_params['region']
        zone_obj = self.inventory.Zone.create(zone_default_params,
                                              metadata=self.get_meta())

        print("########### Create Zone ###############")
        print_json(zone_obj)
        self.append_terminator(self.inventory.Zone.delete, {
            'domain_id': domain.domain_id,
            'zone_id': zone_obj.zone_id
        })
        return zone_obj
예제 #24
0
    def _create_service_account(self, param2, domain):
        print("########### Create Service Account ###############")

        name = random_string()[0:10]
        param = {'name': name, 'domain_id': domain.domain_id}
        # Overwrite param, if needed
        param.update(param2)

        # project_id
        project_name = param.get('project_name', None)
        if project_name:
            project_id = self.project_name2id[project_name]
            param['project_id'] = project_id
            del param['project_name']

        service_account = self.identity.ServiceAccount.create(
            param, metadata=self.get_meta())
        print_json(service_account)
        self.append_terminator(
            self.identity.ServiceAccount.delete, {
                'service_account_id': service_account.service_account_id,
                'domain_id': domain.domain_id
            })
        return service_account.service_account_id
예제 #25
0
    def _create_domain(self,
                       param2={},
                       domainOwner={
                           'owner_id': 'admin',
                           'password': '******'
                       }):
        """ Create Domain
        1) Create Domain
        2) Create Domain Owner
        3) Create Token

        Args: json data
        param = {
            'name': 'root',
            'config': {
                'aaa': 'bbbb'
                },
            }
        }
        """
        param = {
            'name': random_string(),
            'tags': {
                'company': 'MEGAZONE CLOUD'
            },
            'config': {
                'icon':
                'https://assets-console-spaceone-stg.s3.ap-northeast-2.amazonaws.com/mzc.jpg'
            }
        }
        param.update(param2)
        print("########## Create Domain ################")
        domain = self.identity.Domain.create(param)
        print_json(domain)
        self.append_terminator(self.identity.Domain.delete,
                               {'domain_id': domain.domain_id})

        if param2.get('plugin_info'):
            print("########## Update Domain Plugin ##########")
            update_param = {
                'domain_id': domain.domain_id,
                'plugin_info': param2.get('plugin_info')
            }
            print(update_param)
            domain = self.identity.Domain.update(update_param)
            print_json(domain)

        print("########## Create Domain Owner ##########")
        owner_id = domainOwner['owner_id']
        owner_pw = domainOwner['password']

        param = {
            'owner_id': owner_id,
            'password': owner_pw,
            'name': 'Domain Admin',
            'timezone': 'utc+9',
            'email': 'admin' + random_string()[0:5] + '@mz.co.kr',
            'mobile': '+821012341234',
            'domain_id': domain.domain_id
        }
        param.update(domainOwner)

        # Create Domain Owner
        owner = self.identity.DomainOwner.create(param)
        print("########## Create Domain Owner ###############")
        print_json(owner)
        self.append_terminator(self.identity.DomainOwner.delete, {
            'domain_id': domain.domain_id,
            'owner_id': owner.owner_id
        })

        # Create Token
        token = self._get_domain_owner_token(domain, owner_id, owner_pw)

        return domain, token
예제 #26
0
 def register_remote_repositories(self, remote_repos, domain):
     for remote_repo in remote_repos:
         remote_repo['domain_id'] = domain.domain_id
         repo = self._register_remote_repository(remote_repo, domain)
         print_json(repo)
예제 #27
0
 def _list_provider(self, domain):
     params = {'domain_id': domain.domain_id}
     print("######### List Provider ###########")
     providers = self.identity.Provider.list(params,
                                             metadata=self.get_meta())
     print_json(providers)