Changes to 'refs/tags/spacewalk-java-1.6.41-1'
by Martin Minar
Tag 'spacewalk-java-1.6.41-1' created by Martin Minar <mminar(a)redhat.com> at 2011-09-09 08:50 +0000
Tagging package [spacewalk-java] version [1.6.41-1] in directory [java/].
Changes since spacewalk-koan-1.6.2-1:
Martin Minar (1):
Automatic commit of package [spacewalk-java] release [1.6.41-1].
Milan Zazrivec (1):
736381 - New API: system.deleteGuestProfiles()
---
java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java | 45 ++++++++++
java/spacewalk-java.spec | 5 -
rel-eng/packages/spacewalk-java | 2
3 files changed, 50 insertions(+), 2 deletions(-)
---
12 years, 8 months
java/spacewalk-java.spec rel-eng/packages
by Martin Minar
java/spacewalk-java.spec | 5 ++++-
rel-eng/packages/spacewalk-java | 2 +-
2 files changed, 5 insertions(+), 2 deletions(-)
New commits:
commit 94331ba82c314e153bc30f6715adc83db14adb09
Author: Martin Minar <mminar(a)redhat.com>
Date: Fri Sep 9 10:50:30 2011 +0200
Automatic commit of package [spacewalk-java] release [1.6.41-1].
diff --git a/java/spacewalk-java.spec b/java/spacewalk-java.spec
index e673573..a5446a9 100644
--- a/java/spacewalk-java.spec
+++ b/java/spacewalk-java.spec
@@ -17,7 +17,7 @@ Name: spacewalk-java
Summary: Spacewalk Java site packages
Group: Applications/Internet
License: GPLv2
-Version: 1.6.40
+Version: 1.6.41
Release: 1%{?dist}
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
@@ -557,6 +557,9 @@ fi
%{jardir}/postgresql-jdbc.jar
%changelog
+* Fri Sep 09 2011 Martin Minar <mminar(a)redhat.com> 1.6.41-1
+- 736381 - New API: system.deleteGuestProfiles() (mzazrivec(a)redhat.com)
+
* Wed Sep 07 2011 Jan Pazdziora 1.6.40-1
- Do not send error message in case of success (jrenner(a)suse.de)
diff --git a/rel-eng/packages/spacewalk-java b/rel-eng/packages/spacewalk-java
index 1b14824..e97e1f1 100644
--- a/rel-eng/packages/spacewalk-java
+++ b/rel-eng/packages/spacewalk-java
@@ -1 +1 @@
-1.6.40-1 java/
+1.6.41-1 java/
12 years, 8 months
java/code
by Milan Zazrivec
java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java | 45 ++++++++++
1 file changed, 45 insertions(+)
New commits:
commit 385c61bfcd80b4bee37196f6ba0106f9928b034e
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Wed Sep 7 16:45:24 2011 +0200
736381 - New API: system.deleteGuestProfiles()
New API call to delete virt. guest profiles for a given host
The call accepts following arguments:
* hostId: ID of the host system (integer)
* guestNames: list of guest profile names (list of strings)
In case of success, the call returns 1, traceback otherwise.
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java
index f941310..9239b56 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java
@@ -1211,6 +1211,51 @@ public class SystemHandler extends BaseHandler {
}
/**
+ * Delete the specified list of guest profiles for a given host.
+ * @param sessionKey The sessionKey containing the logged in user.
+ * @param hostId The id of the host system.
+ * @param guestNames List of guest names to delete.
+ * @return 1 in case of success, traceback otherwise.
+ */
+ public Integer deleteGuestProfiles(String sessionKey, Integer hostId,
+ List<String> guestNames) {
+ User loggedInUser = getLoggedInUser(sessionKey);
+ Server server = lookupServer(loggedInUser, hostId);
+
+ if (server != null && !server.isVirtualHost()) {
+ throw new FaultException(1005, "notAHostSystem",
+ "The system ID specified (" + hostId +
+ ") does not represent a host system");
+ }
+
+ List<String> availableGuests = new ArrayList();
+
+ for (VirtualInstance vi : server.getGuests()) {
+ availableGuests.add(vi.getName());
+ }
+
+ for (String gn : guestNames) {
+ if (!availableGuests.contains(gn)) {
+ throw new InvalidSystemException();
+ }
+ }
+
+ for (VirtualInstance vi : server.getGuests()) {
+ if (!guestNames.contains(vi.getName())) {
+ continue;
+ }
+
+ if (vi.isRegisteredGuest()) {
+ throw new SystemsNotDeletedException("Unable to delete guest profile " +
+ vi.getName() + ": the guest is registered.");
+ }
+ server.removeGuest(vi);
+ }
+
+ return 1;
+ }
+
+ /**
* Delete systems given a list of system ids.
* This call queues the systems for deletion
* @param sessionKey The sessionKey containing the logged in user
12 years, 8 months
Changes to 'refs/tags/spacewalk-koan-1.6.2-1'
by Martin Minar
Tag 'spacewalk-koan-1.6.2-1' created by Martin Minar <mminar(a)redhat.com> at 2011-09-07 14:31 +0000
Tagging package [spacewalk-koan] version [1.6.2-1] in directory [client/tools/spacewalk-koan/].
Changes since spacewalk-java-1.6.40-1:
Martin Minar (1):
Automatic commit of package [spacewalk-koan] release [1.6.2-1].
---
client/tools/spacewalk-koan/spacewalk-koan.spec | 5 ++++-
rel-eng/packages/spacewalk-koan | 2 +-
2 files changed, 5 insertions(+), 2 deletions(-)
---
12 years, 8 months
client/tools rel-eng/packages
by Martin Minar
client/tools/spacewalk-koan/spacewalk-koan.spec | 5 ++++-
rel-eng/packages/spacewalk-koan | 2 +-
2 files changed, 5 insertions(+), 2 deletions(-)
New commits:
commit 04d2fcd42d4b9c9559320f9795048330a6120c8b
Author: Martin Minar <mminar(a)redhat.com>
Date: Wed Sep 7 16:31:31 2011 +0200
Automatic commit of package [spacewalk-koan] release [1.6.2-1].
diff --git a/client/tools/spacewalk-koan/spacewalk-koan.spec b/client/tools/spacewalk-koan/spacewalk-koan.spec
index 01c08bd..4c6910f 100644
--- a/client/tools/spacewalk-koan/spacewalk-koan.spec
+++ b/client/tools/spacewalk-koan/spacewalk-koan.spec
@@ -3,7 +3,7 @@ Name: spacewalk-koan
Group: System Environment/Kernel
License: GPLv2
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
-Version: 1.6.1
+Version: 1.6.2
Release: 1%{?dist}
BuildArch : noarch
URL: https://fedorahosted.org/spacewalk
@@ -47,6 +47,9 @@ rm -rf $RPM_BUILD_ROOT
%{_datadir}/rhn/actions/
%changelog
+* Wed Sep 07 2011 Martin Minar <mminar(a)redhat.com> 1.6.2-1
+- 736066 - parse ifconfig output in POSIX locale only (mzazrivec(a)redhat.com)
+
* Fri Jul 22 2011 Jan Pazdziora 1.6.1-1
- We only support version 5 and newer of RHEL, removing conditions for old
versions.
diff --git a/rel-eng/packages/spacewalk-koan b/rel-eng/packages/spacewalk-koan
index 2652cdb..0c21c0e 100644
--- a/rel-eng/packages/spacewalk-koan
+++ b/rel-eng/packages/spacewalk-koan
@@ -1 +1 @@
-1.6.1-1 client/tools/spacewalk-koan/
+1.6.2-1 client/tools/spacewalk-koan/
12 years, 8 months
Changes to 'refs/tags/spacewalk-java-1.6.40-1'
by Jan Pazdziora
Tag 'spacewalk-java-1.6.40-1' created by Jan Pazdziora <jpazdziora(a)redhat.com> at 2011-09-07 14:27 +0000
Tagging package [spacewalk-java] version [1.6.40-1] in directory [java/].
Changes since spacewalk-schema-1.6.14-1:
Jan Pazdziora (1):
Automatic commit of package [spacewalk-java] release [1.6.40-1].
---
java/spacewalk-java.spec | 5 ++++-
rel-eng/packages/spacewalk-java | 2 +-
2 files changed, 5 insertions(+), 2 deletions(-)
---
12 years, 8 months
java/spacewalk-java.spec rel-eng/packages
by Jan Pazdziora
java/spacewalk-java.spec | 5 ++++-
rel-eng/packages/spacewalk-java | 2 +-
2 files changed, 5 insertions(+), 2 deletions(-)
New commits:
commit 9a798968e1b55562233cf95467bfaef354d3f555
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Wed Sep 7 16:27:34 2011 +0200
Automatic commit of package [spacewalk-java] release [1.6.40-1].
diff --git a/java/spacewalk-java.spec b/java/spacewalk-java.spec
index d4f87bf..e673573 100644
--- a/java/spacewalk-java.spec
+++ b/java/spacewalk-java.spec
@@ -17,7 +17,7 @@ Name: spacewalk-java
Summary: Spacewalk Java site packages
Group: Applications/Internet
License: GPLv2
-Version: 1.6.39
+Version: 1.6.40
Release: 1%{?dist}
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
@@ -557,6 +557,9 @@ fi
%{jardir}/postgresql-jdbc.jar
%changelog
+* Wed Sep 07 2011 Jan Pazdziora 1.6.40-1
+- Do not send error message in case of success (jrenner(a)suse.de)
+
* Mon Sep 05 2011 Jan Pazdziora 1.6.39-1
- 732350 - On Fedora 15, mchange's log stuff is no longer in c3p0.
diff --git a/rel-eng/packages/spacewalk-java b/rel-eng/packages/spacewalk-java
index 3565ebf..1b14824 100644
--- a/rel-eng/packages/spacewalk-java
+++ b/rel-eng/packages/spacewalk-java
@@ -1 +1 @@
-1.6.39-1 java/
+1.6.40-1 java/
12 years, 8 months
Changes to 'refs/tags/spacewalk-schema-1.6.14-1'
by Michael Mraka
Tag 'spacewalk-schema-1.6.14-1' created by Michael Mraka <michael.mraka(a)redhat.com> at 2011-09-07 09:10 +0000
Tagging package [spacewalk-schema] version [1.6.14-1] in directory [schema/spacewalk/].
Changes since spacewalk-schema-1.6.13-1:
Johannes Renner (1):
Do not send error message in case of success
Michael Mraka (2):
create constraints out of table so new and upgraded schemas are equal
Automatic commit of package [spacewalk-schema] release [1.6.14-1].
Milan Zazrivec (1):
736066 - parse ifconfig output in POSIX locale only
Speagle, Andy (1):
update for rhn-clone-errata.py
---
client/tools/spacewalk-koan/spacewalkkoan/spacewalkkoan.py | 4
java/code/src/com/redhat/rhn/frontend/action/multiorg/SatAdminAction.java | 4
rel-eng/packages/spacewalk-schema | 2
schema/spacewalk/common/tables/rhn_redirects.sql | 21
schema/spacewalk/spacewalk-schema.spec | 5
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/081-rhn_redirects.sql.oracle | 1
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/081-rhn_redirects.sql.postgresql | 16
scripts/clone-errata/README | 67 -
scripts/clone-errata/rhn-clone-errata.py | 371 ++++--
scripts/clone-errata/spw-clone-errata.py | 582 ----------
10 files changed, 360 insertions(+), 713 deletions(-)
---
12 years, 8 months
rel-eng/packages schema/spacewalk
by Michael Mraka
rel-eng/packages/spacewalk-schema | 2 +-
schema/spacewalk/spacewalk-schema.spec | 5 ++++-
2 files changed, 5 insertions(+), 2 deletions(-)
New commits:
commit d897adaac803e27ae551eca31661230eb611768a
Author: Michael Mraka <michael.mraka(a)redhat.com>
Date: Wed Sep 7 11:10:48 2011 +0200
Automatic commit of package [spacewalk-schema] release [1.6.14-1].
diff --git a/rel-eng/packages/spacewalk-schema b/rel-eng/packages/spacewalk-schema
index 8c54bff..f144d55 100644
--- a/rel-eng/packages/spacewalk-schema
+++ b/rel-eng/packages/spacewalk-schema
@@ -1 +1 @@
-1.6.13-1 schema/spacewalk/
+1.6.14-1 schema/spacewalk/
diff --git a/schema/spacewalk/spacewalk-schema.spec b/schema/spacewalk/spacewalk-schema.spec
index 8afb040..404cccc 100644
--- a/schema/spacewalk/spacewalk-schema.spec
+++ b/schema/spacewalk/spacewalk-schema.spec
@@ -2,7 +2,7 @@ Name: spacewalk-schema
Group: Applications/Internet
Summary: Oracle SQL schema for Spacewalk server
-Version: 1.6.13
+Version: 1.6.14
Release: 1%{?dist}
Source0: %{name}-%{version}.tar.gz
@@ -66,6 +66,9 @@ rm -rf $RPM_BUILD_ROOT
%{_mandir}/man1/spacewalk-sql*
%changelog
+* Wed Sep 07 2011 Michael Mraka <michael.mraka(a)redhat.com> 1.6.14-1
+- create constraints out of table so new and upgraded schemas are equal
+
* Tue Sep 06 2011 Michael Mraka <michael.mraka(a)redhat.com> 1.6.13-1
- rhn_command_queue_instances.recid is not smallint anymore
12 years, 8 months
2 commits - schema/spacewalk scripts/clone-errata
by Michael Mraka
schema/spacewalk/common/tables/rhn_redirects.sql | 21
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/081-rhn_redirects.sql.oracle | 1
schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/081-rhn_redirects.sql.postgresql | 16
scripts/clone-errata/README | 67 -
scripts/clone-errata/rhn-clone-errata.py | 371 ++++--
scripts/clone-errata/spw-clone-errata.py | 582 ----------
6 files changed, 351 insertions(+), 707 deletions(-)
New commits:
commit 8e952796ea93f207d821672a3ca146eacbd91e98
Author: Speagle, Andy <andy.speagle(a)wichita.edu>
Date: Wed Sep 7 10:27:17 2011 +0200
update for rhn-clone-errata.py
diff --git a/scripts/clone-errata/README b/scripts/clone-errata/README
index 9aab352..0ea1010 100644
--- a/scripts/clone-errata/README
+++ b/scripts/clone-errata/README
@@ -1,25 +1,56 @@
-rhn-clone-errata.py : This handles pulling errata from RHN and
-publishing them in my "official" RHEL channels. Typical usage for me:
+The purpose of this script is to pull errata from RHN and
+import them into Spacewalk channels. There is some basic
+proxy support included in the script.
-rhn-clone-errata.py -s localhost -l <username> -p <password> \
- --src-channel=rhel-x86_64-server-5 \
- -b YYYYMMDD -e YYYYMMDD -u
+The script self-documents as much as possible. Typical usage
+would be something like this:
-spw-clone-errata.py : This handles cloning the errata I have in my
-"official" channels into cloned "production" channels. This helps me do
-proper release management of errata for my org. Typical usage:
+rhn-clone-errata.py -f /root/.rhnscript \
+ -c rhel-x86_64-server-6 \
+ -b `date +"\%Y\%m\%d" -d "-1 week"` \
+ -i
-spw-clone-errata.py -s localhost -l <username> -p <password> -c
-rhel-i386-server-prod-4-7 -e 20080724
+usage: rhn-clone-errata.py [options]
-(NOTE: This end-date corresponds to the release of RHEL 4.7. This
-allows me to clone to production channels all errata up to that
-release.. more or less.)
+options:
+ -h, --help show this help message and exit
+ -s SPW_SERVER, --spw-server=SPW_SERVER
+ Spacewalk Server (spacewalk.mydomain.org)
+ -S RHN_SERVER, --rhn-server=RHN_SERVER
+ RHN Server (rhn.redhat.com)
+ -u SPW_USER, --spw-user=SPW_USER
+ Spacewalk User
+ -p SPW_PASS, --spw-pass=SPW_PASS
+ Spacewalk Password
+ -U RHN_USER, --rhn-user=RHN_USER
+ RHN User
+ -P RHN_PASS, --rhn-pass=RHN_PASS
+ RHN Password
+ -f CFG_FILE, --config-file=CFG_FILE
+ Config file for servers, users and passwords.
+ -c SRC_CHANNEL, --src-channel=SRC_CHANNEL
+ Source Channel Label: ie."rhel-x86_64-server-5"
+ -b BDATE, --begin-date=BDATE
+ Beginning Date: ie. "19000101" (defaults to
+ "19000101")
+ -e EDATE, --end-date=EDATE
+ Ending Date: ie. "19001231" (defaults to TODAY)
+ -i, --publish Publish Errata (into destination channels)
+ -x PROXY, --proxy=PROXY
+ Proxy server and port to use (e.g.
+ proxy.company.com:3128)
+ --no-spw-proxy Don't proxy the Spacewalk server connection. (Proxy by
+ default, if proxy is set)
+ --no-rhn-proxy Don't proxy the RHN server connection. (Proxy by
+ default, if proxy is set)
+ -F, --format-header Format header for logfiles
+ -v, --verbose
+ -q, --quiet
-These will eventually be thrown together into one script... but I'm
-still actively developing and will get there eventually. I've also been
-lazy about handling credentials... so you'll find these sanitized for my
-protection.
+-----
-Andy Speagle
+2011/09/06 - Andy Speagle
+ I'm presently working on adding in support for CVEs
+ but am running into an issue. Probably done in
+ version 1.6 ...
diff --git a/scripts/clone-errata/rhn-clone-errata.py b/scripts/clone-errata/rhn-clone-errata.py
index 32dedfb..0ddfe87 100644
--- a/scripts/clone-errata/rhn-clone-errata.py
+++ b/scripts/clone-errata/rhn-clone-errata.py
@@ -1,11 +1,11 @@
#!/bin/env python
# Script that uses RHN API to clone RHN Errata to Satellite
# or Spacewalk server.
-# Copyright (c) 2008--2011 Red Hat, Inc.
+# Copyright (c) 2008--2011 Red Hat, Inc.
#
# Author: Andy Speagle (andy.speagle(a)wichita.edu)
#
-# This script was written based on the "rhn-clone-errata.py"
+# This script is an extension of the original "rhn-clone-errata.py"
# script written by: Lars Jonsson (ljonsson(a)redhat.com)
#
# (THANKS!)
@@ -49,23 +49,117 @@
# Modified how the publish happens. Now it creates the errata and THEN
# calls the separate errata.publish() function. I was having some
# intermittent time-outs doing the two together in the errata.create()
-# function.
+# function.
+#
+# 0.5 - 2010-03-17 - Andy Speagle
+#
+# Moved servers, users and passwords to a config file of your choice.
+# Many config options changed as a result. Options on the command line
+# override config file options.
+#
+# Merged proxy support code from Colin Coe <colin.coe(a)gmail.com> (THANKS!)
+#
+# Modified some of the formatting for logfile output.
+#
+# I continue to suck at Python.
+#
+# 0.6 - 2010-03-18 - Andy Speagle
+#
+# Corrected a grievous bug in the new Proxy code.
+#
+# Moved Channel and ChannelSuffix maps to the config file.
+#
+# 0.7 - 2010-11-10 - Andy Speagle
+#
+# Minor bugfixes a/o cosmetic changes.
+#
+# 0.8.1 - 2011-06-06 - Andy Speagle
+#
+# Testing out new proxy code for handling authenticated proxies also.
+# NOT PRODUCTION CODE
+#
+# 0.8.2 - 2011-06-06 - Andy Speagle
+#
+# Update to new proxy code.
+#
+# 0.8.3 - 2011-06-06 - Andy Speagle
+#
+# Add selector for which server connections need proxy. This is crude, will cleanup later.
+#
+# 0.8.4 - 2011-06-06 - Andy Speagle
+#
+# Add some code to handle transparent proxies.
+#
-import xmlrpclib
+import xmlrpclib, httplib
from optparse import OptionParser
from time import time, localtime, strftime
from datetime import datetime, timedelta
-import sys
-import os
-import re
+import sys, os, re
+import ConfigParser
+import base64, urllib
+from urllib import unquote, splittype, splithost
+
+class AuthProxyTransport(xmlrpclib.Transport):
+ def set_proxy(self, proxy):
+ self.proxy = options.proxy
+
+ def request(self, host, handler, request_body, verbose=0):
+ type, r_type = splittype(self.proxy)
+
+ if 'http' in type:
+ phost, XXX = splithost(r_type)
+ else:
+ phost = self.proxy
+
+ puser_pass = None
+ if '@' in phost:
+ user_pass, phost = phost.split('@', 1)
+ if ':' in user_pass:
+ user, password = user_pass.split(':', 1)
+ puser_pass = base64.encodestring('%s:%s' % (unquote(user),unquote(password))).strip()
+
+ urlopener = urllib.FancyURLopener({'http':'http://%s'%phost})
+ if not puser_pass:
+ urlopener.addheaders = [('User-agent', self.user_agent)]
+ else:
+ urlopener.addheaders = [('User-agent', self.user_agent),('Proxy-authorization', 'Basic ' + puser_pass)]
+
+ host = unquote(host)
+ f = urlopener.open("http://%s%s"%(host,handler), request_body)
+
+ self.verbose = verbose
+ return self.parse_response(f)
+
+class ProxiedTransport(xmlrpclib.Transport):
+ def set_proxy(self, proxy):
+ self.proxy = options.proxy
+ def make_connection(self, host):
+ self.realhost = host
+ h = httplib.HTTP(self.proxy)
+ return h
+ def send_request(self, connection, handler, request_body):
+ connection.putrequest("POST", "http://%s%s" % (self.realhost, handler))
+ def send_host(self, connection, host):
+ connection.putheader("Host", self.realhost)
class RHNServer:
- def __init__(self,servername,user,passwd):
+ def __init__(self,servername,user,passwd,proxy_enable):
self.rhnServerName = servername
self.login = user
self.password = passwd
self.rhnUrl = 'https://'+self.rhnServerName+'/rpc/api'
- self.server = xmlrpclib.Server(self.rhnUrl)
+ self.proxy_enable = proxy_enable
+ if self.proxy_enable:
+# if options.proxy is None:
+# self.server = xmlrpclib.Server(self.rhnUrl)
+# else:
+# proxy = ProxiedTransport()
+ proxy = AuthProxyTransport()
+ proxy.set_proxy(options.proxy);
+ self.server = xmlrpclib.Server(self.rhnUrl, transport=proxy)
+ else:
+ self.server = xmlrpclib.Server(self.rhnUrl)
self.rhnSession = self.rhnLogin(self.login,self.password,0)
def rhnLogin(self, login, password, retry):
@@ -163,6 +257,31 @@ class RHNServer:
return self.getErrataKeywords(advisory, (retry + 1))
return keywords
+ def getErrataCVEs(self,advisory,retry):
+ keywords = []
+ try:
+ keywords = self.server.errata.listCves(self.rhnSession,advisory)
+ except xmlrpclib.Fault, f:
+ if options.verbose:
+ print "Fault Code: %d\tFault String: %s" % (f.faultCode,f.faultString)
+ if f.faultCode == -20 or f.faultCode == -1:
+ self.rhnLogin(self.login,self.password,0)
+ return self.server.errata.listCves(self.rhnSession,advisory)
+ elif f.faultCode == -208:
+ if options.verbose:
+ print "Errata %s Doesn't Exist on %s ..." % (advisory,self.rhnServerName)
+ return []
+ else:
+ print "Error Getting CVEs : "+advisory
+ except xmlrpclib.ProtocolError, err:
+ if options.verbose:
+ print "ProtocolError: %d - %s" % (err.errcode,err.errmsg)
+ if retry > 3:
+ raise
+ else:
+ return self.getErrataCves(advisory, (retry + 1))
+ return keywords
+
def getErrataBugs(self,advisory,retry):
bugs = []
try:
@@ -277,7 +396,7 @@ class RHNServer:
if retry > 3:
raise
else:
- return self.server.packages.findPackageChannels(pkgid, (retry + 1))
+ return self.server.packages.findPackageChannels(pkgid, (retrun + 1))
return channels
def cloneErrata(self,dest_chan,errata,retry):
@@ -289,7 +408,7 @@ class RHNServer:
print "Fault Code: %d\tFault String: %s" % (f.faultCode,f.faultString)
if f.faultCode == -20 or f.faultCode == -1:
self.rhnLogin(self.login,self.password,0)
- return self.server.errata.clone(self.rhnSession,dest_chan,errata)
+ return self.self.server.errata.clone(self.rhnSession,dest_chan,errata)
else:
raise
except xmlrpclib.ProtocolError, err:
@@ -358,7 +477,7 @@ class SPWServer(RHNServer):
print "Errata Already Exists..."
return []
else:
- print "Error Creating Errata!"
+ print "Error Publishing Errata!"
raise
except xmlrpclib.ProtocolError, err:
if options.verbose:
@@ -394,23 +513,59 @@ class SPWServer(RHNServer):
return self.errataCreate(info,bugs,keywords,packages,publish,channels, (retry + 1))
return new_errata
+ def setDetails(self,advisory,details,retry):
+ out=[]
+ try:
+ new_errata = self.server.errata.setDetails(self.rhnSession,advisory,details)
+ except xmlrpclib.Fault, f:
+ if options.verbose:
+ print "Fault Code: %d - %s" % (f.faultCode,f.faultString)
+ if f.faultCode == -20 or f.faultCode == -1:
+ self.rhnLogin(self.login,self.password,0)
+ return self.server.errata.create(self.rhnSession,info,bugs,keywords,packages,publish,channels)
+ else:
+ print "Can't Update Errata Details!"
+ raise
+ except xmlrpclib.ProtocolError, err:
+ if options.verbose:
+ print "ProtocolError: %d - %s" % (err.errcode,err.errmsg)
+ if retry > 3:
+ raise
+ else:
+ return self.setDetails(advisory,details, (retry + 1))
+ return out
+
def parse_args():
parser = OptionParser()
- parser.add_option("-s", "--spw-server", type="string", dest="src_server",
+ parser.add_option("-s", "--spw-server", type="string", dest="spw_server",
help="Spacewalk Server (spacewalk.mydomain.org)")
- parser.add_option("-l", "--login", type="string", dest="login",
- help="RHN Login")
- parser.add_option("-p", "--password", type="string", dest="passwd",
- help="RHN password")
+ parser.add_option("-S", "--rhn-server", type="string", dest="rhn_server",
+ help="RHN Server (rhn.redhat.com)")
+ parser.add_option("-u", "--spw-user", type="string", dest="spw_user",
+ help="Spacewalk User")
+ parser.add_option("-p", "--spw-pass", type="string", dest="spw_pass",
+ help="Spacewalk Password")
+ parser.add_option("-U", "--rhn-user", type="string", dest="rhn_user",
+ help="RHN User")
+ parser.add_option("-P", "--rhn-pass", type="string", dest="rhn_pass",
+ help="RHN Password")
+ parser.add_option("-f", "--config-file", type="string", dest="cfg_file",
+ help="Config file for servers, users and passwords.")
parser.add_option("-c", "--src-channel", type="string", dest="src_channel",
help="Source Channel Label: ie.\"rhel-x86_64-server-5\"")
parser.add_option("-b", "--begin-date", type="string", dest="bdate",
help="Beginning Date: ie. \"19000101\" (defaults to \"19000101\")")
parser.add_option("-e", "--end-date", type="string", dest="edate",
help="Ending Date: ie. \"19001231\" (defaults to TODAY)")
- parser.add_option("-u", "--publish", action="store_true", dest="publish", default=False,
+ parser.add_option("-i", "--publish", action="store_true", dest="publish", default=False,
help="Publish Errata (into destination channels)")
- parser.add_option("-f", "--format-header", action="store_true", dest="format", default=False,
+ parser.add_option("-x", "--proxy", type="string", dest="proxy",
+ help="Proxy server and port to use (e.g. proxy.company.com:3128)")
+ parser.add_option("--no-spw-proxy", action="store_true", dest="nospwproxy", default=False,
+ help="Don't proxy the Spacewalk server connection. (Proxy by default, if proxy is set)")
+ parser.add_option("--no-rhn-proxy", action="store_true", dest="norhnproxy", default=False,
+ help="Don't proxy the RHN server connection. (Proxy by default, if proxy is set)")
+ parser.add_option("-F", "--format-header", action="store_true", dest="format", default=False,
help="Format header for logfiles")
parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False)
parser.add_option("-q", "--quiet", action="store_true", dest="quiet", default=False)
@@ -428,90 +583,92 @@ def main():
options = parse_args()
- if (options.src_server and options.login and options.passwd) is None:
+# Config File Format: It needs to be ConfigParser compliant:
+#
+# [Section]
+# option=value
+
+ if (options.cfg_file):
+ config = ConfigParser.ConfigParser()
+ config.read (options.cfg_file)
+
+ if options.spw_server is None:
+ options.spw_server = config.get ('Spacewalk', 'spw_server')
+ if options.spw_user is None:
+ options.spw_user = config.get ('Spacewalk', 'spw_user')
+ if options.spw_pass is None:
+ options.spw_pass = config.get ('Spacewalk', 'spw_pass')
+ if options.rhn_server is None:
+ options.rhn_server = config.get ('RHN', 'rhn_server')
+ if options.rhn_user is None:
+ options.rhn_user = config.get ('RHN', 'rhn_user')
+ if options.rhn_pass is None:
+ options.rhn_pass = config.get ('RHN', 'rhn_pass')
+
+# Here we setup our mappings from RHN to Spacewalk software channels.
+# These are read from the config file in this format:
+#
+# [ChanMap]
+# RHNChannel = SPWChannel
+#
+# Example:
+# rhn-tools-rhel-x86_64-server-5 = rhel-x86_64-server-rhntools-5
+
+ chanMap = {}
+
+ for chan in config.options('ChanMap'):
+ chanMap[chan] = config.get('ChanMap', chan)
+
+# Here we also setup mappings from RHN channels to errata suffixes.
+# Since we can't easily publish automagically, while ensuring that
+# the right packages go into the right channels, we're going to
+# split multi-channel affecting errata into individual errata
+# that are suffixed with something meaningful that identifies
+# each sub-errata per channel... blah blah... Of course, modify this
+# as you will. I'm not sure if this will be required in the future.
+#
+# [ChanSuffixMap]
+# RHNChannel = ErrataSuffix
+#
+# Example:
+# rhn-tools-rhel-x86_64-server-5 = R5-64-T
+
+ chanSuffixMap = {}
+
+ for chan in config.options('ChanSuffixMap'):
+ chanSuffixMap[chan] = config.get('ChanSuffixMap', chan)
+
+ if (options.spw_server and options.spw_user and options.spw_pass and
+ options.rhn_server and options.rhn_user and options.rhn_pass) is None:
print "try: "+sys.argv[0]+" --help"
sys.exit(2)
- if options.format:
- strYest = datetime.today() - timedelta(1)
- print >>sys.stdout, "CLONE:%s:%s" % (options.src_channel, strYest.strftime("%Y%m%d"))
- print >>sys.stderr, "CLONE:%s:%s" % (options.src_channel, strYest.strftime("%Y%m%d"))
-
-# I don't reckon this should change anytime soon...
-#
- svrRHN = 'rhn.redhat.com'
-
-# Ok, configure your RHN credentials here...
-#
- userRHN = 'wsuadmin'
- passRHN = 'W$youAdm'
-
-# Here we setup our mappings from RHN to Local software channels.
-# Set these to what you have created for your SPW.
-# They are paired as:
-#
-# RHNChannel: SPWChannel
-#
- chanMap = {
- 'rhel-x86_64-server-5': 'rhel-x86_64-server-5',
- 'rhn-tools-rhel-x86_64-server-5': 'rhel-x86_64-server-rhntools-5',
- 'rhel-x86_64-server-productivity-5': 'rhel-x86_64-server-productivity-5',
- 'rhel-x86_64-server-supplementary-5': 'rhel-x86_64-server-supplementary-5',
- 'rhel-x86_64-server-vt-5': 'rhel-x86_64-server-vt-5',
- 'rhel-i386-server-5': 'rhel-i386-server-5',
- 'rhn-tools-rhel-i386-server-5': 'rhel-i386-server-rhntools-5',
- 'rhel-i386-server-productivity-5': 'rhel-i386-server-productivity-5',
- 'rhel-i386-server-supplementary-5': 'rhel-i386-server-supplementary-5',
- 'rhel-i386-server-vt-5': 'rhel-i386-server-vt-5',
- 'rhel-x86_64-as-4': 'rhel-x86_64-server-4',
- 'rhel-x86_64-as-4-extras': 'rhel-x86_64-server-extras-4',
- 'rhn-tools-rhel-4-as-x86_64': 'rhel-x86_64-server-rhntools-4',
- 'rhel-i386-as-4': 'rhel-i386-server-4',
- 'rhel-i386-as-4-extras': 'rhel-i386-server-extras-4',
- 'rhn-tools-rhel-4-as-i386': 'rhel-i386-server-rhntools-4'
- };
-
-# Here we also setup mappings from RHN channels to errata suffixes.
-# Since we can't easily publish automagically, while ensuring that
-# the right packages go into the right channels, we're going to
-# split multi-channel affecting errata into individual errata
-# that are suffixed with something meaningful that identifies
-# each sub-errata per channel... blah blah... Of course, modify this
-# as you will.
-#
-# RHNChannel: ErrataSuffix
-#
- chanSuffixMap = {
- 'rhel-x86_64-server-5': 'R5-64',
- 'rhn-tools-rhel-x86_64-server-5': 'R5-64-T',
- 'rhel-x86_64-server-productivity-5': 'R5-64-P',
- 'rhel-x86_64-server-supplementary-5': 'R5-64-S',
- 'rhel-x86_64-server-vt-5': 'R5-64-V',
- 'rhel-i386-server-5': 'R5-32',
- 'rhn-tools-rhel-i386-server-5': 'R5-32-T',
- 'rhel-i386-server-productivity-5': 'R5-32-P',
- 'rhel-i386-server-supplementary-5': 'R5-32-S',
- 'rhel-i386-server-vt-5': 'R5-32-V',
- 'rhel-x86_64-as-4': 'R4-64',
- 'rhel-x86_64-as-4-extras': 'R4-64-E',
- 'rhn-tools-rhel-4-as-x86_64': 'R4-64-T',
- 'rhel-i386-as-4': 'R4-32',
- 'rhel-i386-as-4-extras': 'R4-32-E',
- 'rhn-tools-rhel-4-as-i386': 'R4-32-T'
- };
-
if chanMap[options.src_channel] is None:
print "Invalid Channel!"
sys.exit(2)
- myRHN = RHNServer(svrRHN,userRHN,passRHN)
- mySPW = SPWServer(options.src_server,options.login,options.passwd)
+ rhnProxy = 0
+ spwProxy = 0
+
+ if options.proxy is not None:
+ if not options.norhnproxy:
+ rhnProxy = 1
+ if not options.nospwproxy:
+ spwProxy = 1
+
+ myRHN = RHNServer(options.rhn_server, options.rhn_user, options.rhn_pass, rhnProxy)
+ mySPW = SPWServer(options.spw_server, options.spw_user, options.spw_pass, spwProxy)
dateStart = options.bdate or '19000101'
- dateEnd = options.edate or strftime("%Y%m%d", localtime())
+ dateToday = strftime("%Y%m%d", localtime())
+ dateEnd = options.edate or dateToday
+
+ if options.format:
+ print >>sys.stdout, "%s:CLONE:%s" % (dateToday, options.src_channel)
+ print >>sys.stderr, "%s:CLONE:%s" % (dateToday, options.src_channel)
for rhnErrata in myRHN.listChannelErrata(options.src_channel,dateStart,dateEnd,0):
- if not options.quiet:
+ if not options.quiet and not options.format:
print rhnErrata['errata_advisory']
# Now, let's check if we already have this errata locally...
@@ -537,13 +694,18 @@ def main():
continue
else:
if not pkgFind:
- print "Hmmm... Package Missing: %s" % pkg['package_name']
+ if options.format:
+ print >>sys.stderr, "%s:%s:Hmmm... "+\
+ "Package Missing: %s" % (dateToday, rhnErrata['errata_advisory'], pkg['package_name'])
+ else:
+ print "Hmmm... Package Missing: %s" % pkg['package_name']
else:
spwErrPackages.append(pkgFind[0]['id'])
break
spwErrDetails = myRHN.getErrataDetails(rhnErrata['errata_advisory'],0)
spwErrKeywords = myRHN.getErrataKeywords(rhnErrata['errata_advisory'],0)
+ spwErrCVEs = myRHN.getErrataCVEs(rhnErrata['errata_advisory'],0)
spwErrBugs = []
tmpBugs = myRHN.getErrataBugs(rhnErrata['errata_advisory'],0)
@@ -551,7 +713,7 @@ def main():
for bug in tmpBugs:
spwErrBugs.append({'id': int(bug), 'summary': tmpBugs[bug]})
- if not options.quiet:
+ if not options.quiet and not options.format:
print "\t%s - %s" % (spwErrDetails['errata_issue_date'],spwErrDetails['errata_synopsis'])
spwErrObject = mySPW.errataCreate ({ 'synopsis': spwErrDetails['errata_synopsis'],\
@@ -571,16 +733,27 @@ def main():
[chanMap[options.src_channel]],\
0)
- print "\tErrata Created: %d" % spwErrObject['id']
+ if options.format:
+ print "%s#%s#Errata Created#" % (dateToday, spwErrataName),
+ else:
+ print "\tErrata Created: %d" % spwErrObject['id']
if options.publish:
spwPublish = mySPW.errataPublish (spwErrataName, [chanMap[options.src_channel]], 0)
- print "\tErrata Published!"
+ if options.format:
+ print "Errata Published"
+ else:
+ print "\tErrata Published!"
else:
- print "\t Errata Not Published!"
+ if options.format:
+ print "Errata Not Published"
+ else:
+ print "\tErrata Not Published!"
else:
- if not options.quiet:
- print "\tErrata already exists. %s" % spwErrataName
+ if options.format:
+ print "%s#%s#Errata Already Exists" % (dateToday, spwErrataName)
+ elif not options.quiet:
+ print "\tErrata Already Exists. %s" % spwErrataName
continue
if __name__ == "__main__":
diff --git a/scripts/clone-errata/spw-clone-errata.py b/scripts/clone-errata/spw-clone-errata.py
deleted file mode 100644
index 8577b83..0000000
--- a/scripts/clone-errata/spw-clone-errata.py
+++ /dev/null
@@ -1,582 +0,0 @@
-#!/bin/env python
-# Script that uses RHN API to clone RHN Errata to Satellite
-# or Spacewalk server.
-# Copyright (c) 2008--2011 Red Hat, Inc.
-#
-# Author: Andy Speagle (andy.speagle(a)wichita.edu)
-#
-# This script was written based on the "rhn-clone-errata.py"
-# script written by: Lars Jonsson (ljonsson(a)redhat.com)
-#
-# (THANKS!)
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-#
-# Version Information:
-#
-# 0.1 - 2009-09-01 - Andy Speagle
-#
-# Initial release. Lots of problems. Oof.
-#
-# 0.2 - 2009-09-11 - Andy Speagle
-#
-# Updated methodology for handling errata. Breaking up individual
-# errata appended with a channel identifier to better automate publishing
-# of errata.
-#
-# Some code reworking. I still suck at python. Removed deprecated "sets"
-# module.
-#
-# 0.3 - 2009-09-17 - Andy Speagle
-#
-# Fixed a rather glaring bug in the logic regarding relevant channel
-# for package selection. Ugh.
-
-import xmlrpclib
-from optparse import OptionParser
-from time import time, localtime, strftime
-import sys
-import os
-import re
-
-class RHNServer:
- def __init__(self,servername,user,passwd):
- self.rhnServerName = servername
- self.login = user
- self.password = passwd
- self.rhnUrl = 'https://'+self.rhnServerName+'/rpc/api'
- self.server = xmlrpclib.Server(self.rhnUrl)
- self.rhnSession = self.rhnLogin(self.login,self.password,0)
-
- def rhnLogin(self, login, password, retry=0):
- try:
- rhnSession=self.server.auth.login(login,password)
- except xmlrpclib.Fault, f:
- if options.verbose:
- print "Fault Code: %d\tFault String: %s" % (f.faultCode,f.faultString)
- if f.faultCode==-20:
- self.rhnLogin(login,password,retry)
- else:
- print "Failed to login",f
- raise
- except xmlrpclib.ProtocolError, err:
- if options.verbose:
- print "ProtocolError: %d - %s" % (err.errcode,err.errmsg)
- if retry > 3:
- raise
- else:
- return self.rhnLogin(login,password, (retry + 1))
- return rhnSession
-
- def getErrataChannels(self,advisory,retry):
- channels = []
- try:
- details = self.server.errata.applicableToChannels(self.rhnSession,advisory)
- except xmlrpclib.Fault, f:
- if options.verbose:
- print "Fault Code: %d\tFault String: %s" % (f.faultCode,f.faultString)
- if f.faultCode == -20:
- self.rhnLogin(self.login,self.password)
- return self.server.errata.applicableToChannels(self.rhnSession,advisory)
- elif f.faultCode == -208:
- if options.verbose:
- print "Errata %s Doesn't Exist on %s ..." % (advisory,self.rhnServerName)
- return []
- else:
- raise
- except xmlrpclib.ProtocolError, err:
- if options.verbose:
- print "ProtocolError: %d - %s" % (err.errcode,err.errmsg)
- if retry > 3:
- raise
- else:
- return self.getErrataChannels(advisory, (retry + 1))
- return channels
-
- def getErrataDetails(self,advisory,retry):
- details = []
- try:
- details = self.server.errata.getDetails(self.rhnSession,advisory)
- except xmlrpclib.Fault, f:
- if options.verbose:
- print "Fault Code: %d\tFault String: %s" % (f.faultCode,f.faultString)
- if f.faultCode == -20:
- self.rhnLogin(self.login,self.password)
- return self.server.errata.getDetails(self.rhnSession,advisory)
- elif f.faultCode == -208:
- if options.verbose:
- print "Errata %s Doesn't Exist on %s ..." % (advisory,self.rhnServerName)
- return []
- else:
- raise
- except xmlrpclib.ProtocolError, err:
- if options.verbose:
- print "ProtocolError: %d - %s" % (err.errcode,err.errmsg)
- if retry > 3:
- raise
- else:
- return self.getErrataDetails(advisory, (retry + 1))
- return details
-
- def getErrataKeywords(self,advisory,retry):
- keywords = []
- try:
- keywords = self.server.errata.listKeywords(self.rhnSession,advisory)
- except xmlrpclib.Fault, f:
- if options.verbose:
- print "Fault Code: %d\tFault String: %s" % (f.faultCode,f.faultString)
- if f.faultCode == -20:
- self.rhnLogin(self.login,self.password)
- return self.server.errata.listKeywords(self.rhnSession,advisory)
- elif f.faultCode == -208:
- if options.verbose:
- print "Errata %s Doesn't Exist on %s ..." % (advisory,self.rhnServerName)
- return []
- else:
- print "Error Getting Keywords : "+advisory
- except xmlrpclib.ProtocolError, err:
- if options.verbose:
- print "ProtocolError: %d - %s" % (err.errcode,err.errmsg)
- if retry > 3:
- raise
- else:
- return self.getErrataKeywords(advisory, (retry + 1))
- return keywords
-
- def getErrataBugs(self,advisory,retry):
- bugs = []
- try:
- bugs = self.server.errata.bugzillaFixes(self.rhnSession,advisory)
- except xmlrpclib.Fault, f:
- if options.verbose:
- print "Fault Code: %d\tFault String: %s" % (f.faultCode,f.faultString)
- if f.faultCode == -20:
- self.rhnLogin(self.login,self.password)
- return self.server.errata.bugzillaFixes(self.rhnSession,advisory)
- elif f.faultCode == -208:
- if options.verbose:
- print "Errata %s Doesn't Exist on %s ..." % (advisory,self.rhnServerName)
- return []
- else:
- print "Error Getting Bugs : "+advisory
- except xmlrpclib.ProtocolError, err:
- if options.verbose:
- print "ProtocolError: %d - %s" % (err.errcode,err.errmsg)
- if retry > 3:
- raise
- else:
- return self.getErrataBugs(advisory, (retry + 1))
- return bugs
-
- def getErrataCVEs(self,advisory,retry):
- cves=[]
- try:
- cves = self.server.errata.listCves(self.rhnSession,advisory)
- except xmlrpclib.Fault, f:
- if options.verbose:
- print "Fault Code: %d\tFault String: %s" % (f.faultCode,f.faultString)
- if f.faultCode == -20:
- self.rhnLogin(self.login,self.password)
- return self.server.errata.listCves(self.rhnSession,advisory)
- elif f.faultCode == -208:
- if options.verbose:
- print "Errata %s Doesn't Exist on %s ..." % (advisory,self.rhnServerName)
- return []
- else:
- print "Error Getting CVEs : %s" % advisory
- except xmlrpclib.ProtocolError, err:
- if options.verbose:
- print "ProtocolError: %d - %s" % (err.errcode,err.errmsg)
- if retry > 3:
- raise
- else:
- return self.getErrataCVEs(advisory, (retry + 1))
- return cves
-
- def getErrataPackages(self,advisory,retry):
- packages=[]
- try:
- packages = self.server.errata.listPackages(self.rhnSession,advisory)
- except xmlrpclib.Fault, f:
- if options.verbose:
- print "Fault Code: %d\tFault String: %s" % (f.faultCode,f.faultString)
- if f.faultCode == -20:
- self.rhnLogin(self.login,self.password)
- return self.server.errata.listPackages(self.rhnSession,advisory)
- elif f.faultCode == -208:
- if options.verbose:
- print "Errata %s Doesn't Exist on %s ..." % (advisory,self.rhnServerName)
- return []
- else:
- print "Error Getting Packages : %s" % advisory
- except xmlrpclib.ProtocolError, err:
- if options.verbose:
- print "ProtocolError: %d - %s" % (err.errcode,err.errmsg)
- if retry > 3:
- raise
- else:
- return self.getErrataPackages(advisory, (retry + 1))
- return packages
-
- def listChannelErrata(self,dest_chan,dateStart,dateEnd,retry):
- out = []
- try:
- out = self.server.channel.software.listErrata(self.rhnSession,dest_chan,dateStart,dateEnd)
- except xmlrpclib.Fault, f:
- if options.verbose:
- print "Fault Code: %d\tFault String: %s" % (f.faultCode,f.faultString)
- if f.faultCode == -20:
- self.rhnLogin(self.login,self.password)
- return self.server.channel.software.listErrata(self.rhnSession,dest_chan,dateStart,dateEnd)
- else:
- raise
- except xmlrpclib.ProtocolError, err:
- if options.verbose:
- print "ProtocolError: %d - %s" % (err.errcode,err.errmsg)
- if retry > 3:
- raise
- else:
- return self.listChannelErrata(dest_chan,dateStart,dateEnd,(retry + 1))
- return out
-
- def findPackageChannels(self,pkgid,retry):
- channels=[]
- try:
- channels = self.server.packages.listProvidingChannels(self.rhnSession,pkgid)
- except xmlrpclib.Fault, f:
- if options.verbose:
- print "Fault Code: %d\tFault String: %s" % (f.faultCode,f.faultString)
- if f.faultCode == -20:
- self.rhnLogin(self.login,self.password)
- return self.server.packages.listProvidingChannels(self.rhnSession,pkgid)
- else:
- print "Error Finding Channels for Package : %s" % pkgid
- except xmlrpclib.ProtocolError, err:
- if options.verbose:
- print "ProtocolError: %d - %s" % (err.errcode,err.errmsg)
- if retry > 3:
- raise
- else:
- return self.server.packages.findPackageChannels(pkgid, (retry + 1))
- return channels
-
- def cloneErrata(self,dest_chan,errata,retry):
- out=[]
- try:
- print "Clone errata in progress, please be patient.."
- out = self.server.errata.clone(self.rhnSession,dest_chan,errata)
- except xmlrpclib.Fault, f:
- print "Fault Code: %d\tFault String: %s" % (f.faultCode,f.faultString)
- if f.faultCode == -20:
- self.rhnLogin(self.login,self.password)
- return self.server.errata.clone(self.rhnSession,dest_chan,errata)
- else:
- raise
- except xmlrpclib.ProtocolError, err:
- print "ProtocolError: %d - %s" % (err.errcode,err.errmsg)
- if retry > 3:
- raise
- else:
- return self.cloneErrata(dest_chan,errata, (retry + 1))
- return out
-
-class SPWServer(RHNServer):
-
- def searchNVREA(self,name,version,release,epoch,archlabel,retry):
- package=[]
- try:
- package = self.server.packages.findByNvrea(self.rhnSession,name,version,release,epoch,archlabel)
- except xmlrpclib.Fault, f:
- if options.verbose:
- print "Fault Code: %d\tFault String: %s" % (f.faultCode,f.faultString)
- if f.faultCode == -20:
- self.rhnLogin(self.login,self.password)
- return self.server.packages.findByNvrea(self.rhnSession,name,version,release,archlabel)
- else:
- print "Error Finding Package via NVREA : %s" % name
- except xmlrpclib.ProtocolError, err:
- if options.verbose:
- print "ProtocolError: %d - %s" % (err.errcode,err.errmsg)
- if retry > 3:
- raise
- else:
- return self.searchNVREA(name,version,release,epoch,archlabel, (retry + 1))
- return package
-
- def listChannelErrata(self,dest_chan,retry):
- out = []
- try:
- out = self.server.channel.software.listErrata(self.rhnSession,dest_chan)
- except xmlrpclib.Fault, f:
- if options.verbose:
- print "Fault Code: %d\tFault String: %s" % (f.faultCode,f.faultString)
- if f.faultCode == -20:
- self.rhnLogin(self.login,self.password)
- return self.server.channel.software.listErrata(self.rhnSession,dest_chan)
- else:
- raise
- except xmlrpclib.ProtocolError, err:
- if options.verbose:
- print "ProtocolError: %d - %s" % (err.errcode,err.errmsg)
- if retry > 3:
- raise
- else:
- return self.listChannelErrata(dest_chan,(retry + 1))
- return out
-
- def errataPublish(self,name,channels,retry):
- errata=[]
- try:
- errata = self.server.errata.publish(self.rhnSession,name,channels)
- except xmlrpclib.Fault, f:
- if options.verbose:
- print "Fault Code: %d - %s" % (f.faultCode,f.faultString)
- if f.faultCode == -20:
- self.rhnLogin(self.login,self.password)
- return self.server.errata.publish(self.rhnSession,name,channels)
- elif f.faultCode == 2601:
- print "Errata Already Exists..."
- return []
- else:
- print "Error Creating Errata!"
- raise
- except xmlrpclib.ProtocolError, err:
- if options.verbose:
- print "ProtocolError: %d - %s" % (err.errcode,err.errmsg)
- if retry > 3:
- raise
- else:
- return self.errataPublish(name,channels, (retry + 1))
- return errata
-
- def errataClone(self,channel,errata,retry):
- clone=[]
- try:
- clone = self.server.errata.clone(self.rhnSession,channel,errata)
- except xmlrpclib.Fault, f:
- if options.verbose:
- print "Fault Code: %d - %s" % (f.faultCode,f.faultString)
- if f.faultCode == -20:
- self.rhnLogin(self.login,self.password)
- return self.server.errata.clone(self.rhnSession,channel,errata)
- elif f.faultCode == -208:
- print "Errata Doesn't Exist..."
- return []
- else:
- print "Error Cloning Errata!"
- raise
- except xmlrpclib.ProtocolError, err:
- if options.verbose:
- print "ProtocolError: %d - %s" % (err.errcode,err.errmsg)
- if retry > 5:
- return []
- else:
- return self.errataClone(channel,errata, (retry + 1))
- return clone
-
- def errataCreate(self,info,bugs,keywords,packages,publish,channels,retry):
- new_errata=[]
- try:
- new_errata = self.server.errata.create(self.rhnSession,info,bugs,keywords,packages,publish,channels)
- except xmlrpclib.Fault, f:
- if options.verbose:
- print "Fault Code: %d - %s" % (f.faultCode,f.faultString)
- if f.faultCode == -20:
- self.rhnLogin(self.login,self.password)
- return self.server.errata.create(self.rhnSession,info,bugs,keywords,packages,publish,channels)
- elif f.faultCode == 2601:
- print "Errata Already Exists..."
- return []
- else:
- print "Error Creating Errata!"
- raise
- except xmlrpclib.ProtocolError, err:
- if options.verbose:
- print "ProtocolError: %d - %s" % (err.errcode,err.errmsg)
- if retry > 3:
- raise
- else:
- return self.errataCreate(info,bugs,keywords,packages,publish,channels, (retry + 1))
- return new_errata
-
-def parse_args():
- parser = OptionParser()
- parser.add_option("-s", "--server", type="string", dest="server",
- help="Spacewalk Server (spacewalk.mydomain.org)")
- parser.add_option("-l", "--login", type="string", dest="login",
- help="RHN Login")
- parser.add_option("-p", "--password", type="string", dest="passwd",
- help="RHN password")
- parser.add_option("-c", "--channel", type="string", dest="channel",
- help="Dest channel for cloning.")
- parser.add_option("-b", "--begin-date", type="string", dest="bdate",
- help="Beginning Date: ie. \"19000101\" (defaults to \"19000101\")")
- parser.add_option("-e", "--end-date", type="string", dest="edate",
- help="Ending Date: ie. \"19001231\" (defaults to TODAY)")
- parser.add_option("-n", "--named-errata", type="string", dest="errata",
- help="Name of errata: (RHSA-XXXX:XXXX:XX-XX)")
- parser.add_option("-r", "--pattern", type="string", dest="pattern",
- help="Name pattern of errata: (RHSA, 2005, Foo)")
- parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False)
- parser.add_option("-q", "--quiet", action="store_true", dest="quiet", default=False)
-
- (options,args) = parser.parse_args()
- return options
-
-def main():
- global chanMap
- global chanSuffixMap
- global RHNServer
- global RHNUser
- global RHNPass
- global options
-
- options = parse_args()
-
- if (options.server and options.login and options.passwd) is None:
- print "try: "+sys.argv[0]+" --help"
- sys.exit(2)
-
-# I don't reckon this should change anytime soon...
-#
- svrRHN = 'rhn.redhat.com'
-
-# Ok, configure your RHN credentials here...
-#
- userRHN = 'wsuadmin'
- passRHN = 'W$youAdm'
-
-# Here we setup our mappings from RHN to Local software channels.
-# Set these to what you have created for your SPW.
-# They are paired as:
-#
-# RHNChannel: SPWChannel
-#
-
- chanMapRHN = {
- 'rhel-x86_64-server-5': 'rhel-x86_64-server-5',
- 'rhel-x86_64-server-rhntools-5': 'rhn-tools-rhel-x86_64-server-5',
- 'rhel-x86_64-server-productivity-5': 'rhel-x86_64-server-productivity-5',
- 'rhel-x86_64-server-supplementary-5': 'rhel-x86_64-server-supplementary-5',
- 'rhel-x86_64-server-vt-5': 'rhel-x86_64-server-vt-5',
- 'rhel-i386-server-5': 'rhel-i386-server-5',
- 'rhel-i386-server-rhntools-5': 'rhn-tools-rhel-i386-server-5',
- 'rhel-i386-server-productivity-5': 'rhel-i386-server-productivity-5',
- 'rhel-i386-server-supplementary-5': 'rhel-i386-server-supplementary-5',
- 'rhel-i386-server-vt-5': 'rhel-i386-server-vt-5',
- 'rhel-x86_64-server-4': 'rhel-x86_64-as-4',
- 'rhel-x86_64-server-extras-4': 'rhel-x86_64-as-4-extras',
- 'rhel-x86_64-server-rhntools-4': 'rhn-tools-rhel-4-as-x86_64',
- 'rhel-i386-server-4': 'rhel-i386-as-4',
- 'rhel-i386-server-extras-4': 'rhel-i386-as-4-extras',
- 'rhel-i386-server-rhntools-4': 'rhn-tools-rhel-4-as-i386'
- };
-
-# Here I setup the production to authoritative channel mapping...
-
- chanMapSPW = {
- 'rhel-x86_64-server-prod-5-3': 'rhel-x86_64-server-5',
- 'rhel-x86_64-server-rhntools-prod-5-3': 'rhel-x86_64-server-rhntools-5',
- 'rhel-x86_64-server-productivity-prod-5-3': 'rhel-x86_64-server-productivity-5',
- 'rhel-x86_64-server-supplementary-prod-5-3': 'rhel-x86_64-server-supplementary-5',
- 'rhel-x86_64-server-vt-prod-5-3': 'rhel-x86_64-server-vt-5',
- 'rhel-i386-server-prod-5-3': 'rhel-i386-server-5',
- 'rhel-i386-server-rhntools-prod-5-3': 'rhel-i386-server-rhntools-5',
- 'rhel-i386-server-productivity-prod-5-3': 'rhel-i386-server-productivity-5',
- 'rhel-i386-server-supplementary-prod-5-3': 'rhel-i386-server-supplementary-5',
- 'rhel-i386-server-vt-prod-5-3': 'rhel-i386-server-vt-5',
- 'rhel-x86_64-server-prod-4-7': 'rhel-x86_64-server-4',
- 'rhel-x86_64-server-extras-prod-4-7': 'rhel-x86_64-server-extras-4',
- 'rhel-x86_64-server-rhntools-prod-4-7': 'rhel-x86_64-server-rhntools-4',
- 'rhel-i386-server-prod-4-7': 'rhel-i386-server-4',
- 'rhel-i386-server-extras-prod-4-7': 'rhel-i386-server-extras-4',
- 'rhel-i386-server-rhntools-prod-4-7': 'rhel-i386-server-rhntools-4'
- };
-
-# Here we also setup mappings from RHN channels to errata suffixes.
-# Since we can't easily publish automagically, while ensuring that
-# the right packages go into the right channels, we're going to
-# split multi-channel affecting errata into individual errata
-# that are suffixed with something meaningful that identifies
-# each sub-errata per channel... blah blah... Of course, modify this
-# as you will.
-#
-# RHNChannel: ErrataSuffix
-#
- chanSuffixMap = {
- 'rhel-x86_64-server-5': 'R5-64',
- 'rhn-tools-rhel-x86_64-server-5': 'R5-64-T',
- 'rhel-x86_64-server-productivity-5': 'R5-64-P',
- 'rhel-x86_64-server-supplementary-5': 'R5-64-S',
- 'rhel-x86_64-server-vt-5': 'R5-64-V',
- 'rhel-i386-server-5': 'R5-32',
- 'rhn-tools-rhel-i386-server-5': 'R5-32-T',
- 'rhel-i386-server-productivity-5': 'R5-32-P',
- 'rhel-i386-server-supplementary-5': 'R5-32-S',
- 'rhel-i386-server-vt-5': 'R5-32-V',
- 'rhel-x86_64-as-4': 'R4-64',
- 'rhel-x86_64-as-4-extras': 'R4-64-E',
- 'rhn-tools-rhel-4-as-x86_64': 'R4-64-T',
- 'rhel-i386-as-4': 'R4-32',
- 'rhel-i386-as-4-extras': 'R4-32-E',
- 'rhn-tools-rhel-4-as-i386': 'R4-32-T'
- };
-
- if chanMapSPW[options.channel] is None:
- print "Invalid Channel!"
- sys.exit(2)
-
- mySPW = SPWServer(options.server,options.login,options.passwd)
-
- dateStart = options.bdate or '19000101'
- dateEnd = options.edate or strftime("%Y%m%d", localtime())
-
- errList = []
-
- if options.errata:
- errList = [ options.errata ]
-
- if options.pattern:
- for spwErrata in mySPW.listChannelErrata(chanMapSPW[options.channel],0):
- if re.search (options.pattern, spwErrata['advisory_name']):
- errList.append (spwErrata['advisory_name'])
-
- if options.bdate or options.edate:
- myRHN = RHNServer(svrRHN,userRHN,passRHN)
- chanRHN = chanMapRHN[chanMapSPW[options.channel]]
-
- for rhnErrata in myRHN.listChannelErrata(chanRHN,dateStart,dateEnd,0):
- errName = rhnErrata['errata_advisory'] + ":" + chanSuffixMap[chanRHN]
- errList.append (errName)
-
- for spwErr in errList:
- print spwErr
-
- spwClone = re.sub ('RH[BES]A', 'CLA', spwErr)
- spwCloneCheck = mySPW.getErrataDetails (spwClone, 0)
-
- if spwCloneCheck:
- print "\tErrata Already Cloned: %s - %s" % (spwClone, spwCloneCheck['synopsis'])
- continue
-
- spwErrClone = mySPW.errataClone (options.channel, [ spwErr ], 0)
-
- if spwErrClone:
- print "\tErrata Cloned:\t%s - %s" % (spwErrClone[0]['advisory_name'], spwErrClone[0]['advisory_synopsis'])
- else:
- print "\tErrata NOT Cloned! - Some Error Occurred."
-
-if __name__ == "__main__":
- main()
commit 6cd14eb56df8a63eb8910dc51c0b973ac181d01d
Author: Michael Mraka <michael.mraka(a)redhat.com>
Date: Wed Sep 7 10:09:45 2011 +0200
create constraints out of table so new and upgraded schemas are equal
diff --git a/schema/spacewalk/common/tables/rhn_redirects.sql b/schema/spacewalk/common/tables/rhn_redirects.sql
index ef2005d..f4604c7 100644
--- a/schema/spacewalk/common/tables/rhn_redirects.sql
+++ b/schema/spacewalk/common/tables/rhn_redirects.sql
@@ -29,19 +29,13 @@ CREATE TABLE rhn_redirects
last_update_date DATE,
start_date DATE NOT NULL,
recurring NUMBER(12)
- DEFAULT (0) NOT NULL
- CONSTRAINT RHN_RDRCT_RECUR_VALID
- CHECK (recurring in (0, 1)),
+ DEFAULT (0) NOT NULL,
recurring_frequency NUMBER(12)
- DEFAULT (2)
- CONSTRAINT RHN_RDRCT_RECUR_FREQ_VALID
- CHECK (recurring_frequency in (2,3,6)),
+ DEFAULT (2),
recurring_duration NUMBER(12)
DEFAULT (0),
recurring_dur_type NUMBER(12)
DEFAULT (12)
- CONSTRAINT rhn_rdrct_rec_dtype_valid
- CHECK ( recurring_dur_type in (12,11,5,3,1) )
)
ENABLE ROW MOVEMENT
;
@@ -79,3 +73,14 @@ ALTER TABLE rhn_redirects
ADD CONSTRAINT rhn_rdrct_rdrtp_redir_type_fk FOREIGN KEY (redirect_type)
REFERENCES rhn_redirect_types (name);
+ALTER TABLE rhn_redirects
+ ADD CONSTRAINT RHN_RDRCT_RECUR_VALID
+ CHECK (recurring in (0, 1));
+
+ALTER TABLE rhn_redirects
+ ADD CONSTRAINT RHN_RDRCT_RECUR_FREQ_VALID
+ CHECK (recurring_frequency in (2,3,6));
+
+ALTER TABLE rhn_redirects
+ ADD CONSTRAINT RHN_RDRCT_REC_DTYPE_VALID
+ CHECK ( recurring_dur_type in (12,11,5,3,1) );
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/081-rhn_redirects.sql.oracle b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/081-rhn_redirects.sql.oracle
new file mode 100644
index 0000000..b7b00b1
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/081-rhn_redirects.sql.oracle
@@ -0,0 +1 @@
+-- This file is intentionally left empty.
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/081-rhn_redirects.sql.postgresql b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/081-rhn_redirects.sql.postgresql
new file mode 100644
index 0000000..d55b00a
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/081-rhn_redirects.sql.postgresql
@@ -0,0 +1,16 @@
+-- oracle equivalent source sha1 b14267384bc104605623a41b755e68e0103b5aa8
+
+ALTER TABLE rhn_redirects drop CONSTRAINT RHN_RDRCT_RECUR_VALID;
+ALTER TABLE rhn_redirects
+ ADD CONSTRAINT RHN_RDRCT_RECUR_VALID
+ CHECK (recurring in (0, 1));
+
+ALTER TABLE rhn_redirects drop CONSTRAINT RHN_RDRCT_RECUR_FREQ_VALID;
+ALTER TABLE rhn_redirects
+ ADD CONSTRAINT RHN_RDRCT_RECUR_FREQ_VALID
+ CHECK (recurring_frequency in (2,3,6));
+
+ALTER TABLE rhn_redirects drop CONSTRAINT RHN_RDRCT_REC_DTYPE_VALID;
+ALTER TABLE rhn_redirects
+ ADD CONSTRAINT RHN_RDRCT_REC_DTYPE_VALID
+ CHECK ( recurring_dur_type in (12,11,5,3,1) );
12 years, 8 months