1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import os
20 import sys
21 import time
22 import base64
23
24 import pulp.client.utils as utils
25 import pulp.client.constants as constants
26 from pulp.client.core.basecore import BaseCore, systemExit
27 from pulp.client.connection import ErrataConnection, RestlibException,\
28 RepoConnection, ConsumerConnection, ConsumerGroupConnection
29 from pulp.client.logutil import getLogger
30 from pulp.client.config import Config
31 CFG = Config()
32
33 import gettext
34 _ = gettext.gettext
35 log = getLogger(__name__)
36
38 - def __init__(self, is_admin=True, actions=None):
39 usage = "errata [OPTIONS]"
40 shortdesc = "errata specific actions to pulp server."
41 desc = ""
42 self.name = "errata"
43 self.actions = actions or {"create" : "Create a custom errata",
44 "update" : "Update an existing errata",
45 "list" : "List applicable errata",
46 "delete" : "Delete an errata",
47 "info" : "See details on a specific errata",
48 "install" : "Install Errata on a consumer",}
49 self.is_admin = is_admin
50 BaseCore.__init__(self, "errata", usage, shortdesc, desc)
51
53 self.econn = ErrataConnection(host=CFG.server.host or "localhost",
54 port=CFG.server.port or 443,
55 username=self.username,
56 password=self.password,
57 cert_file=self.cert_filename,
58 key_file=self.key_filename)
59 self.rconn = RepoConnection(host=CFG.server.host or "localhost",
60 port=CFG.server.port or 443,
61 username=self.username,
62 password=self.password,
63 cert_file=self.cert_filename,
64 key_file=self.key_filename)
65 self.cconn = ConsumerConnection(host=CFG.server.host or "localhost",
66 port=CFG.server.port or 443,
67 username=self.username,
68 password=self.password,
69 cert_file=self.cert_filename,
70 key_file=self.key_filename)
71 self.cgconn = ConsumerGroupConnection(host=CFG.server.host or "localhost",
72 port=CFG.server.port or 443,
73 username=self.username,
74 password=self.password,
75 cert_file=self.cert_filename,
76 key_file=self.key_filename)
78 self.action = self._get_action()
79 if self.action == "create":
80 usage = "errata create [OPTIONS]"
81 self.setup_option_parser(usage, "", True)
82 pass
83 if self.action == "update":
84 usage = "errata update [OPTIONS]"
85 self.setup_option_parser(usage, "", True)
86 pass
87
88 if self.action == "delete":
89 usage = "errata delete [OPTIONS]"
90 self.setup_option_parser(usage, "", True)
91 self.parser.add_option("--id", dest="id",
92 help="errata Id")
93
94 if self.action == "list":
95 usage = "errata list [OPTIONS]"
96 self.setup_option_parser(usage, "", True)
97 if self.is_admin:
98 self.parser.add_option("--consumerid", dest="consumerid",
99 help="Consumer Id")
100 self.parser.add_option("--repoid", dest="repoid",
101 help="Repository Id")
102 self.parser.add_option("--type", dest="type", action="append",
103 help="Type of Errata to lookup \
104 supported types: security, bugfix, enhancement")
105
106 if self.action == "info":
107 usage = "errata info [OPTIONS]"
108 self.setup_option_parser(usage, "", True)
109 self.parser.add_option("--id", dest="id",
110 help="Errata Id")
111
112 if self.action == "install":
113 usage = "errata install [OPTIONS] <errata>"
114 self.setup_option_parser(usage, "", True)
115 self.parser.add_option("--consumerid", dest="consumerid",
116 help="Consumer Id")
117 self.parser.add_option("--consumergroupid", dest="consumergroupid",
118 help="Consumer group Id")
119
131
133 print _("Not Implemented")
134 sys.exit(0)
135
137 print _("Not Implemented")
138 sys.exit(0)
139
141 if not (self.getConsumer() or self.options.repoid):
142 print _("A consumer or a repo is required to lookup errata")
143 sys.exit(0)
144
145 try:
146 if self.options.repoid:
147 errata = self.rconn.errata(self.options.repoid, self.options.type)
148 elif self.getConsumer():
149 errata = self.cconn.errata(self.getConsumer(), self.options.type)
150 if not len(errata):
151 print _("No errata available to list")
152 sys.exit(0)
153 print errata
154
155 except RestlibException, re:
156 log.error("Error: %s" % re)
157 systemExit(re.code, re.msg)
158 except Exception, e:
159 log.error("Error: %s" % e)
160 raise
161
163 if not self.options.id:
164 print _("An Errata id is required for lookup")
165 sys.exit(0)
166 try:
167 errata = self.econn.erratum(self.options.id)
168 effected_pkgs = [str(pinfo['filename']) for pkg in errata['pkglist'] for pinfo in pkg['packages']]
169 print constants.ERRATA_INFO % (errata['id'], errata['title'], errata['description'],
170 errata['type'], errata['issued'], errata['updated'],
171 errata['version'], errata['release'], errata['status'],
172 effected_pkgs, errata['references'])
173 except RestlibException, re:
174 log.error("Error: %s" % re)
175 systemExit(re.code, re.msg)
176 except Exception, e:
177 log.error("Error: %s" % e)
178 raise
179
181 (self.options, data) = self.parser.parse_args()
182 if not (self.options.consumerid or self.options.consumergroupid):
183 print _("A consumerid or a consumergroupid is required to perform an install")
184 sys.exit(0)
185 errataids = data[2:]
186 if not len(errataids):
187 print _("Specify an errata Id to install")
188 sys.exit(0)
189
190 try:
191 if self.options.consumerid:
192 print self.cconn.installerrata(self.options.consumerid, errataids)
193 elif self.options.consumergroupid:
194 print self.cgconn.installerrata(self.options.consumergroupid, errataids)
195 except RestlibException, re:
196 log.error("Error: %s" % re)
197 systemExit(re.code, re.msg)
198 except Exception, e:
199 log.error("Error: %s" % e)
200 raise
201
203 if not self.options.consumerid:
204 print("consumer id required. Try --help")
205 sys.exit(0)
206
207 return self.options.consumerid
208
211
214