def search(self, *args, **kw): errors = [] if self.cli_opts.full_package: # FIX ME: This regex is weak sauce, needs improvement m = re.match('(^[a-zA-Z].*)-([\d].*)-(.*)-(.*)', self.cli_opts.full_package) if m: name = m.group(1) version = m.group(2) release = m.group(3) arch = m.group(4) else: errors.append(('SatCLIArgumentError', "invalid --pkg, need form 'name-version-release-arch'")) abort_on_error(errors) packages = g.proxy.query(model.Package, name=name, version=version, release=release, arch=arch) elif self.cli_opts.query: packages = g.proxy.query(model.Package, regex=self.cli_opts.query) else: # explicit search packages = g.proxy.query(model.Package, name=self.cli_opts.name, version=self.cli_opts.version, release=self.cli_opts.release, arch=self.cli_opts.arch, epoch=self.cli_opts.epoch, description=self.cli_opts.description, summary=self.cli_opts.summary) for p in packages: print "%s-%s-%s-%s" % (p.name, p.version, p.release, p.arch) return dict(packages=packages)
def _get_package(self, full_package): """ Get a package object based on a full package name. Required Arguments: full_package RPM package name in the format name-version-release-arch. """ errors = [] # FIX ME: This regex is weak sauce, needs improvement m = re.match('(^[a-zA-Z].*)-([\d].*)-(.*)-(.*)', full_package) if m: name = m.group(1) version = m.group(2) release = m.group(3) arch = m.group(4) else: errors.append(('SatCLIArgumentError', "invalid --pkg, need form 'name-version-release-arch'")) abort_on_error(errors) package = g.proxy.query(model.Package, just_one=True, all_data=True, name=name, version=version, release=release, arch=arch) return package
def publish(self, *args, **kw): errors = [] channels = [] if not self.cli_opts.advisory: if len(sys.argv) >= 4: self.cli_opts.advisory = sys.argv[3] else: errors.append(('SatCLIArgumentError', 'errata -a/--advisory required.')) if not self.cli_opts.channel and not self.cli_opts.channels_file: errors.append(('SatCLIArgumentError', 'errata -c/--channel or --channels-file required.')) if self.cli_opts.channel: _channels = self.cli_opts.channel.split(',') for _c in _channels: channels.append(_c) if self.cli_opts.channels_file: if os.path.exists(self.cli_opts.channels_file): f = open(self.cli_opts.channels_file, 'r') for line in f.readlines(): channels.append(line.strip('\n')) else: log.warn("channels file '%s' doesn't exist!" % \ self.cli_opts.channels_file) abort_on_error(errors) errata = g.proxy.call('errata.publish', self.cli_opts.advisory, channels) return dict()
def list(self, *args, **kw): errors = [] all_errata = [] # list of tuples, 0 is the errata data, 1 is the errata dict if self.cli_opts.channel: channels = [] labels = self.cli_opts.channel.split(',') for label in labels: channels.append(g.proxy.query(model.Channel, label=label, just_one=True)) else: channels = g.proxy.query(model.Channel) abort_on_error(errors) for c in channels: if self.cli_opts.all: errata = c.errata else: errata = c.recent_errata for e in errata: all_errata.append((e.issue_date, e)) all_errata.sort() all_errata.reverse() return dict(errata=all_errata)
def show(self, *args, **kw): errors = [] if not self.cli_opts.full_package: if len(sys.argv) >= 4: self.cli_opts.full_package = sys.argv[3] else: errors.append(('SatCLIArgumentError', 'package -p/--pkg required.')) abort_on_error(errors) package = self._get_package(self.cli_opts.full_package) return dict(package=package)
def show(self, *args, **kw): errors = [] if not self.cli_opts.label: if len(sys.argv) >= 4: self.cli_opts.label = sys.argv[3] else: errors.append(('SatCLIArgumentError', 'channel -l/--label required.')) abort_on_error(errors) channel = g.proxy.query(model.Channel, just_one=True, all_data=True, label=self.cli_opts.label) return dict(channel=channel)
def show(self, *args, **kw): errors = [] if not self.cli_opts.advisory: if len(sys.argv) >= 4: self.cli_opts.advisory = sys.argv[3] else: errors.append(('SatCLIArgumentError', 'errata -a/--advisory required.')) abort_on_error(errors) errata = g.proxy.query(model.Errata, just_one=True, advisory=self.cli_opts.advisory) return dict(errata=errata)
def search(self, *args, **kw): errors = [] if not self.cli_opts.regex: if len(sys.argv) >= 4: self.cli_opts.regex = sys.argv[3] else: errors.append(('SatCLIArgumentError', "A search string (-r/--regex) is required for query.")) abort_on_error(errors) channels = g.proxy.query(model.Channel, self.cli_opts.regex, all_data=False) for channel in channels: print channel.label return dict(channels=channels)
def get(self, *args, **kw): errors = [] if not self.cli_opts.full_package: if len(sys.argv) >= 4: self.cli_opts.full_package = sys.argv[3] else: errors.append(('SatCLIArgumentError', 'package -p/--pkg required.')) abort_on_error(errors) package = self._get_package(self.cli_opts.full_package) print 'downloading %s ... ' % package.file, f = open(package.file, 'w') data = urlopen(package.url).read() f.write(data) f.close() print 'ok' return dict()
def delete(self, *args, **kw): errors = [] if not self.cli_opts.label: if len(sys.argv) >= 4: self.cli_opts.label = sys.argv[3] else: errors.append(('SatCLIArgumentError', 'channel -l/--label required.')) abort_on_error(errors) res = raw_input("Permanantly delete channel '%s'? [y/N] " % \ self.cli_opts.label) if not res.lower() in ['y', 'yes']: sys.exit(1) channel = g.proxy.query(model.Channel, just_one=True, label=self.cli_opts.label) g.proxy.delete(channel) return dict()
def delete(self, *args, **kw): errors = [] if not self.cli_opts.advisory: if len(sys.argv) >= 4: self.cli_opts.advisory = sys.argv[3] else: errors.append(('SatCLIArgumentError', 'errata -a/--advisory required.')) abort_on_error(errors) res = raw_input("Permanantly delete advisory '%s'? [y/N] " % \ self.cli_opts.advisory) if not res.lower() in ['y', 'yes']: sys.exit(1) errata = g.proxy.query(model.Errata, just_one=True, all_data=True, advisory=self.cli_opts.advisory) g.proxy.delete(errata) return dict()
def create(self, *args, **kw): config = get_config() errors = [] channels = [] if not self.cli_opts.advisory: errors.append(('SatCLIArgumentError', 'errata -a/--advisory required.')) if not self.cli_opts.rpms: errors.append(('SatCLIArgumentError', 'errata --rpms required.')) if not self.cli_opts.channel and not self.cli_opts.channels_file: errors.append(('SatCLIArgumentError', 'errata -c/--channel or --channels-file required.')) if self.cli_opts.channel: _channels = self.cli_opts.channel.split(',') for _c in _channels: channels.append(_c) if self.cli_opts.channels_file: if os.path.exists(self.cli_opts.channels_file): f = open(self.cli_opts.channels_file, 'r') for line in f.readlines(): channels.append(line.strip('\n')) else: log.warn("channels file '%s' doesn't exist!" % \ self.cli_opts.channels_file) if not self.cli_opts.synopsis: errors.append(('SatCLIArgumentError', 'errata --synopsis required.')) if not self.cli_opts.product: errors.append(('SatCLIArgumentError', 'errata --product required.')) if not self.cli_opts.advisory_type: errors.append(('SatCLIArgumentError', 'errata --type required.')) if not self.cli_opts.advisory_type in ['bug', 'enhancement', 'security']: errors.append(('SatCLIArgumentError', 'errata --type must be one of bug, enhancement, security.')) if not self.cli_opts.description: errors.append(('SatCLIArgumentError', 'errata --description required.')) abort_on_error(errors) if not self.cli_opts.topic: self.cli_opts.topic = "%s update." % self.cli_opts.advisory_type.capitalize() if not self.cli_opts.solution: self.cli_opts.solution = config['errata']['solution'] if self.cli_opts.keywords: self.cli_opts.keywords = self.cli_opts.keywords.split(',') else: self.cli_opts.keywords = [] rpms = glob(str(self.cli_opts.rpms)) rpms_data = [] package_ids = [] for r in rpms: nosig_txt = '' if config['allow_nosig']: nosig_txt = '--nosig' cmd = "%s %s -u %s -p %s --server %s %s" % \ (config['cmd_rhnpush'], r, config['user'], config['password'], config['server'], nosig_txt) gso(cmd) rpm = RPM(file(r)) package = g.proxy.query(model.Package, just_one=True, name=rpm[rpmdefs.RPMTAG_NAME], version=rpm[rpmdefs.RPMTAG_VERSION], release=rpm[rpmdefs.RPMTAG_RELEASE], arch=rpm[rpmdefs.RPMTAG_ARCH]) rpms_data.append(package) if self.cli_opts.srpm: if os.path.exists(self.cli_opts.srpm): rpm = RPM(file(self.cli_opts.srpm)) nosig_txt = '' if config['allow_nosig']: nosig_txt = '--nosig' cmd = "%s %s --source -u %s -p %s --server %s %s" % \ (config['cmd_rhnpush'], self.cli_opts.srpm, config['user'], config['password'], config['server'], nosig_txt) gso(cmd) else: log.warn("SRPM '%s' doesn't exist!" % self.cli_opts.srpm) for p in rpms_data: package_ids.append(p.id) if self.cli_opts.advisory_type == 'bug': self.cli_opts.advisory_type = 'Bug Fix Advisory' elif self.cli_opts.advisory_type == 'enhancement': self.cli_opts.advisory_type = 'Product Enhancement Advisory' elif self.cli_opts.advisory_type == 'security': self.cli_opts.advisory_type = 'Security Advisory' e = model.Errata() e.synopsis = self.cli_opts.synopsis e.advisory_name = self.cli_opts.advisory e.advisory_release = 1 e.advisory_type = self.cli_opts.advisory_type e.product = self.cli_opts.product e.topic = self.cli_opts.topic e.description = self.cli_opts.description e.references = self.cli_opts.references or '' e.notes = self.cli_opts.notes or '' e.solution = self.cli_opts.solution e.bug_ids = [] e.keywords = self.cli_opts.keywords or [] e.package_ids = package_ids e.publish = self.cli_opts.publish e.channels = channels g.proxy.create(e) res = g.proxy.query(model.Errata, just_one=True, all_data=True, advisory=self.cli_opts.advisory) return dict(errata=res)