def tags_to_ids(self, tags, org_name, scope): tag_map = self.tag_name_to_id_map(org_name, scope) try: return [tag_map[t] for t in tags] except KeyError, e: system_exit(os.EX_DATAERR, _("Could not find tag [ %(e)s ] in scope of [ %(scope)s ]") \ % {'e':e[0], 'scope':scope})
def run(self): provName = self.get_option("name") orgName = self.get_option("org") manifestPath = self.get_option("file") force = self.get_option("force") try: f = open(get_abs_path(manifestPath)) except IOError: system_exit(os.EX_IOERR, _("File %s does not exist" % manifestPath)) prov = get_provider(orgName, provName) try: response = run_spinner_in_bg( self.api.import_manifest, (prov["id"], f, force), message=_("Importing manifest, please wait... ") ) except ServerRequestError, re: if ( re.args[0] == 400 and "displayMessage" in re.args[1] and re.args[1]["displayMessage"] == "Import is older than existing data" ): re.args[1]["displayMessage"] = ( "Import is older then existing data," + " please try with --force option to import manifest." ) raise re, None, sys.exc_info()[2]
def run(self): groupid = self.get_option('id') repoid = self.get_option('repo_id') group = self.api.packagegroup_by_id(repoid, groupid) if group == None: system_exit( os.EX_DATAERR, _("Package group [%s] not found in repo [%s]") % (groupid, repoid)) group['conditional_package_names'] = [ name + ": " + required_package for name, required_package in group['conditional_package_names'].items() ] self.printer.set_header(_("Package Group Information")) self.printer.add_column('id') self.printer.add_column('name') self.printer.add_column('description', multiline=True) self.printer.add_column('mandatory_package_names', multiline=True) self.printer.add_column('default_package_names', multiline=True) self.printer.add_column('optional_package_names', multiline=True) self.printer.add_column('conditional_package_names', multiline=True) self.printer.print_item(group)
def productNamesToIds(self, orgName, productNames): ids = [] for prodName in productNames: p = get_product(orgName, prodName) if p != None: ids.append(p['id']) else: system_exit(os.EX_DATAERR) return ids
def parse_datetime(self, date, time): date = date.strip() time = time.strip() formatter = DateTimeFormatter() try: return formatter.build_datetime(date, time) except DateTimeFormatException, e: system_exit(os.EX_DATAERR, e.args[0])
def repoNamesToIds(self, orgName, repos): ids = [] for rec in repos: repo = get_repo(orgName, rec['product'], rec['name']) if repo != None: ids.append(repo['id']) else: system_exit(os.EX_DATAERR) return ids
def tags_to_ids(self, tags, org_name, scope): tag_map = self.tag_name_to_id_map(org_name, scope) try: return [tag_map[t] for t in tags] except KeyError, e: system_exit( os.EX_DATAERR, _("Could not find tag [ %s ] in scope of [ %s ]") % (e[0], scope))
def tag_name_to_id_map(self, org_name, scope): permissions = self.getAvailablePermissions(org_name, scope) try: tag_map = {} for t in permissions[scope]['tags']: tag_map[t['display_name']] = t['name'] return tag_map except KeyError, e: system_exit(os.EX_DATAERR, _("Invalid scope [ %s ]") % e[0])
def product_id(self, options): if 'product' in options: prodName = options['product'] else: prodName = options['name'] prod = get_product(self.orgName, prodName) if prod == None: system_exit(os.EX_DATAERR) return prod['id']
def discover_repositories(self, org_name, url): print(_("Discovering repository urls, this could take some time...")) task = self.api.repo_discovery(org_name, url, 'yum') discoveryResult = run_spinner_in_bg(wait_for_async_task, [task]) repourls = discoveryResult[0]['result'] or [] if not len(repourls): system_exit(os.EX_OK, "No repositories discovered @ url location [%s]" % url) return repourls
def discover_repositories(self, provider_id, url): print(_("Discovering repository urls, this could take some time...")) task = self.provider_api.repo_discovery(provider_id, url) run_spinner_in_bg(wait_for_async_task, [task]) repourls = self.provider_api.provider(provider_id)['discovered_repos'] if not len(repourls): system_exit(os.EX_OK, "No repositories discovered @ url location [%s]" % url) return repourls
def run(self): categoryId = self.get_option('id') repoid = self.get_option('repo_id') category = self.api.packagegroupcategory_by_id(repoid, categoryId) if category == None: system_exit(os.EX_DATAERR, _("Package group category [%s] not found in repo [%s]") % (categoryId, repoid)) self.printer.set_header(_("Package Group Category Information")) batch_add_columns(self.printer, 'id', 'name', 'packagegroupids') self.printer.print_item(category)
def run(self): repoid = self.get_option('repo_id') groups = self.api.packagegroups(repoid) if not groups: system_exit(os.EX_DATAERR, _("No package groups found in repo [%s]") % (repoid)) self.printer.set_header(_("Package Group Information")) batch_add_columns(self.printer, {'id': _("ID")}, {'name': _("Name")}, {'description': _("Description")}) self.printer.print_items(groups) return os.EX_OK
def run(self): repoid = self.get_option('repo_id') groups = self.api.packagegroupcategories(repoid) if not groups: system_exit(os.EX_DATAERR, _("No package group categories found in repo [%s]") % (repoid)) self.printer.set_header(_("Package Group Cateogory Information")) self.printer.add_column('id') self.printer.add_column('name') self.printer.print_items(groups) return os.EX_OK
def run(self): categoryId = self.get_option('id') repoid = self.get_option('repo_id') category = self.api.packagegroupcategory_by_id(repoid, categoryId) if category == None: system_exit(os.EX_DATAERR, _("Package group category [%(categoryId)s] not found in repo [%(repoid)s]") \ % {'categoryId':categoryId, 'repoid':repoid}) self.printer.set_header(_("Package Group Category Information")) batch_add_columns(self.printer, {'id': _("ID")}, {'name': _("Name")}, \ {'packagegroupids': _("Package Group IDs")}) self.printer.print_item(category)
def run(self): repoid = self.get_option('repo_id') groups = self.api.packagegroups(repoid) if not groups: system_exit(os.EX_DATAERR, _("No package groups found in repo [%s]") % (repoid)) self.printer.set_header(_("Package Group Information")) self.printer.add_column('id') self.printer.add_column('name') self.printer.add_column('description') self.printer.print_items(groups) return os.EX_OK
def run(self): repoid = self.get_option('repo_id') groups = self.api.packagegroups(repoid) if not groups: system_exit(os.EX_DATAERR, _("No package groups found in repo [%s]") % (repoid)) self.printer.setHeader(_("Package Group Information")) self.printer.addColumn('id') self.printer.addColumn('name') self.printer.addColumn('description') self.printer.printItems(groups) return os.EX_OK
def run(self): categoryId = self.get_option('id') repoid = self.get_option('repo_id') category = self.api.packagegroupcategory_by_id(repoid, categoryId) if category == None: system_exit( os.EX_DATAERR, _("Package group category [%s] not found in repo [%s]") % (categoryId, repoid)) self.printer.set_header(_("Package Group Category Information")) self.printer.add_column('id') self.printer.add_column('name') self.printer.add_column('packagegroupids') self.printer.print_item(category)
def get_repo(self, includeDisabled=False): repoId = self.get_option('id') repoName = self.get_option('name') orgName = self.get_option('org') prodName = self.get_option('product') if self.select_by_env: envName = self.get_option('env') else: envName = None if repoId: repo = self.api.repo(repoId) else: repo = get_repo(orgName, prodName, repoName, envName, includeDisabled) if repo == None: system_exit(os.EX_DATAERR) return repo
def run(self): groupid = self.get_option('id') repoid = self.get_option('repo_id') group = self.api.packagegroup_by_id(repoid, groupid) if group == None: system_exit(os.EX_DATAERR, _("Package group [%(groupid)s] not found in repo [%(repoid)s]") \ % {'groupid':groupid, 'repoid':repoid}) self.printer.set_header(_("Package Group Information")) batch_add_columns(self.printer, {'id': _("ID")}, {'name': _("Name")}) batch_add_columns(self.printer, {'description': _("Description")}, \ {'mandatory_package_names': _("Mandatory Package Names")}, \ {'default_package_names': _("Default Package Names")}, \ {'optional_package_names': _("Optional Package Names")}, \ {'conditional_package_names': _("Conditional Package Names")}, multiline=True) self.printer.print_item(group)
def run(self): groupid = self.get_option('id') repoid = self.get_option('repo_id') group = self.api.packagegroup_by_id(repoid, groupid) if group == None: system_exit(os.EX_DATAERR, _("Package group [%s] not found in repo [%s]") % (groupid, repoid)) group['conditional_package_names'] = [name+": "+required_package for name, required_package in group['conditional_package_names'].items()] self.printer.set_header(_("Package Group Information")) self.printer.add_column('id') self.printer.add_column('name') self.printer.add_column('description', multiline=True) self.printer.add_column('mandatory_package_names', multiline=True) self.printer.add_column('default_package_names', multiline=True) self.printer.add_column('optional_package_names', multiline=True) self.printer.add_column('conditional_package_names', multiline=True) self.printer.print_item(group)
def select_repositories(self, repourls, assumeyes, our_raw_input = raw_input): selection = Selection() if not assumeyes: proceed = '' num_selects = [u_str(i+1) for i in range(len(repourls))] select_range_str = constants.SELECTION_QUERY % len(repourls) while proceed.strip().lower() not in ['q', 'y']: if not proceed.strip().lower() == 'h': self.__print_urls(repourls, selection) proceed = our_raw_input( _("\nSelect urls for which candidate repos should be created; use `y` to confirm (h for help):")) select_val = proceed.strip().lower() if select_val == 'h': print select_range_str elif select_val == 'a': selection.add_selection(repourls) elif select_val in num_selects: selection.add_selection([repourls[int(proceed.strip().lower())-1]]) elif select_val == 'q': selection = Selection() system_exit(os.EX_OK, _("Operation aborted upon user request.")) elif set(select_val.split(":")).issubset(num_selects): lower, upper = tuple(select_val.split(":")) selection.add_selection(repourls[int(lower)-1:int(upper)]) elif select_val == 'c': selection = Selection() elif select_val == 'y': if not len(selection): proceed = '' continue else: break else: continue else: #select all selection.add_selection(repourls) self.__print_urls(repourls, selection) return selection
def select_repositories(self, repourls, assumeyes, raw_input = raw_input): selection = Selection() if not assumeyes: proceed = '' num_selects = [u_str(i+1) for i in range(len(repourls))] select_range_str = constants.SELECTION_QUERY % len(repourls) while proceed.strip().lower() not in ['q', 'y']: if not proceed.strip().lower() == 'h': self.__print_urls(repourls, selection) proceed = raw_input(_("\nSelect urls for which candidate repos should be created; use `y` to confirm (h for help):")) select_val = proceed.strip().lower() if select_val == 'h': print select_range_str elif select_val == 'a': selection.add_selection(repourls) elif select_val in num_selects: selection.add_selection([repourls[int(proceed.strip().lower())-1]]) elif select_val == 'q': selection = Selection() system_exit(os.EX_OK, _("Operation aborted upon user request.")) elif set(select_val.split(":")).issubset(num_selects): lower, upper = tuple(select_val.split(":")) selection.add_selection(repourls[int(lower)-1:int(upper)]) elif select_val == 'c': selection = Selection() elif select_val == 'y': if not len(selection): proceed = '' continue else: break else: continue else: #select all selection.add_selection(repourls) self.__print_urls(repourls, selection) return selection
class Discovery(RepoAction): description = _('discovery repositories contained within a URL') def setup_parser(self, parser): parser.add_option('--org', dest='org', help=_("organization name eg: foo.example.com (required)")) parser.add_option('--name', dest='name', help=_("repository name prefix to add to all the discovered repositories (required)")) parser.add_option("--url", dest="url", type="url", help=_("root url to perform discovery of repositories eg: http://porkchop.devel.redhat.com/ (required)")) parser.add_option("--assumeyes", action="store_true", dest="assumeyes", help=_("assume yes; automatically create candidate repositories for discovered urls (optional)")) parser.add_option('--product', dest='prod', help=_("product name (required)")) def check_options(self, validator): validator.require(('name', 'org', 'prod', 'url')) def run(self): name = self.get_option('name') url = self.get_option('url') assumeyes = self.get_option('assumeyes') prodName = self.get_option('prod') orgName = self.get_option('org') repourls = self.discover_repositories(orgName, url) self.printer.set_header(_("Repository Urls discovered @ [%s]" % url)) selectedurls = self.select_repositories(repourls, assumeyes) prod = get_product(orgName, prodName) self.create_repositories(orgName, prod["id"], name, selectedurls) return os.EX_OK def discover_repositories(self, org_name, url): print(_("Discovering repository urls, this could take some time...")) try: task = self.api.repo_discovery(org_name, url, 'yum') except Exception,e: system_exit(os.EX_DATAERR, _("Error: %s" % e)) discoveryResult = run_spinner_in_bg(wait_for_async_task, [task]) repourls = discoveryResult[0]['result'] or [] if not len(repourls): system_exit(os.EX_OK, "No repositories discovered @ url location [%s]" % url) return repourls
def run(self): provName = self.get_option('name') orgName = self.get_option('org') manifestPath = self.get_option('file') force = self.get_option('force') try: f = open(get_abs_path(manifestPath)) except: system_exit(os.EX_IOERR, _("File %s does not exist" % manifestPath)) prov = get_provider(orgName, provName) try: response = run_spinner_in_bg( self.api.import_manifest, (prov["id"], f, force), message=_("Importing manifest, please wait... ")) except ServerRequestError, re: if re.args[0] == 400 and "displayMessage" in re.args[1] and re.args[ 1]["displayMessage"] == "Import is older than existing data": re.args[1][ "displayMessage"] = "Import is older then existing data, please try with --force option to import manifest." raise re
def get_parent_id(self, orgName, envName, parentName): parent = get_template(orgName, envName, parentName) if parent != None: return parent["id"] system_exit(os.EX_DATAERR)
def get_role(self, name): role = self.api.role_by_name(name) if role == None: system_exit(os.EX_DATAERR, _("Cannot find user role '%s'") % name ) return role
def template_id(self, options): tpl = get_template(self.orgName, self.priorEnvName, options['name']) if tpl == None: system_exit(os.EX_DATAERR) return tpl['id']
def repo_id(self, options): repo = get_repo(self.orgName, options['product'], options['name'], self.priorEnvName) if repo == None: system_exit(os.EX_DATAERR) return repo['id']
def discover_repositories(self, org_name, url): print(_("Discovering repository urls, this could take some time...")) try: task = self.api.repo_discovery(org_name, url, 'yum') except Exception,e: system_exit(os.EX_DATAERR, _("Error: %s" % e))
def check_options(self, validator): validator.require(('user_role', 'name', 'scope')) if (self.get_option('all_tags')) and (len(self.get_option('tags')) > 0): system_exit(os.EX_DATAERR, _("Can not specify a set of tags and use --all_tags"))
def get_role(self, name): role = self.api.role_by_name(name) if role == None: system_exit(os.EX_DATAERR, _("Cannot find user role [ %s ]") % name) return role
def update(self, name, orgName, newName, description, url): prov = get_provider(orgName, name) prov = self.api.update(prov["id"], newName, description, url) system_exit(os.EX_OK, _("Successfully updated provider [ %s ]") % prov['name'])