1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 import sys
21 import os.path
22 from pulp.client.core.basecore import BaseCore, systemExit
23 from pulp.client.connection import ConsumerConnection, RepoConnection, RestlibException
24 import pulp.client.constants as constants
25 from pulp.client.logutil import getLogger
26 from pulp.client.config import Config
27 log = getLogger(__name__)
28 CFG = Config()
29
30 CONSUMERID = "/etc/pulp/consumer"
31 import gettext
32 _ = gettext.gettext
33
36 usage = "packagegroup [OPTIONS]"
37 shortdesc = "packagegroup specific actions to pulp server."
38 desc = ""
39 self.name = "packagegroup"
40 self.actions = {
41 "list" : "list available packagegroups",
42 "info" : "lookup information for a packagegroup",
43 "create" : "create a packagegroup",
44 "delete" : "delete a packagegroup",
45 "add_package" : "add package to an existing packagegroup",
46 "delete_package": "delete package from an existing packagegroup",
47 "install" : "Schedule a packagegroup install",
48 }
49 BaseCore.__init__(self, "packagegroup", usage, shortdesc, desc)
50 self.pconn = None
51
53 self.pconn = RepoConnection(host=CFG.server.host or "localhost",
54 port=443, username=self.username,
55 password=self.password,
56 cert_file=self.cert_filename,
57 key_file=self.key_filename)
58 self.cconn = ConsumerConnection(host=CFG.server.host or "localhost",
59 port=443, username=self.username,
60 password=self.password,
61 cert_file=self.cert_filename,
62 key_file=self.key_filename)
63
65 self.action = self._get_action()
66 if self.action == "info":
67 usage = "packagegroup info [OPTIONS]"
68 self.setup_option_parser(usage, "", True)
69 self.parser.add_option("--id", dest="groupid",
70 help="Packagegroup id to lookup")
71 self.parser.add_option("--repoid", dest="repoid",
72 help="Repository Label")
73 if self.action == "install":
74 usage = "packagegroup install [OPTIONS]"
75 self.setup_option_parser(usage, "", True)
76 self.parser.add_option("-g", "--pkggroupid", action="append", dest="pkggroupid",
77 help="PackageGroup to install on a given consumer. \
78 To specify multiple package groups use multiple -g")
79 self.parser.add_option("--consumerid", dest="consumerid",
80 help="Consumer Id")
81 if self.action == "list":
82 usage = "packagegroup list [OPTIONS]"
83 self.setup_option_parser(usage, "", True)
84 self.parser.add_option("--repoid", dest="repoid",
85 help="Repository Label")
86 if self.action == "create":
87 usage = "packagegroup create [OPTIONS]"
88 self.setup_option_parser(usage, "", True)
89 self.parser.add_option("--repoid", dest="repoid",
90 help="Repository Label")
91 self.parser.add_option("--id", dest="groupid",
92 help="Group id")
93 self.parser.add_option("--name", dest="groupname",
94 help="Group name")
95 self.parser.add_option("--description", dest="description",
96 help="Group description, default is ''", default="")
97 if self.action == "delete":
98 usage = "packagegroup delete [OPTIONS]"
99 self.setup_option_parser(usage, "", True)
100 self.parser.add_option("--repoid", dest="repoid",
101 help="Repository Label")
102 self.parser.add_option("--id", dest="groupid",
103 help="Group id")
104 if self.action == "add_package":
105 usage = "packagegroup add_package [OPTIONS]"
106 self.setup_option_parser(usage, "", True)
107 self.parser.add_option("--repoid", dest="repoid",
108 help="Repository Label")
109 self.parser.add_option("--id", dest="groupid",
110 help="Group id")
111 self.parser.add_option("-n", "--name", action="append", dest="pnames",
112 help="Packages to be added. \
113 To specify multiple packages use multiple -n")
114 self.parser.add_option("--type", dest="grouptype",
115 help="Type of list to add package to, example 'mandatory', 'optional', 'default'",
116 default="default")
117 if self.action == "delete_package":
118 usage = "packagegroup delete_package [OPTIONS]"
119 self.setup_option_parser(usage, "", True)
120 self.parser.add_option("--repoid", dest="repoid",
121 help="Repository Label")
122 self.parser.add_option("--id", dest="groupid",
123 help="Group id")
124 self.parser.add_option("--pkgname", dest="pkgname",
125 help="Package name")
126 self.parser.add_option("--type", dest="grouptype",
127 help="Type of list to delete package from, example 'mandatory', 'optional', 'default'",
128 default="default")
129
145
147 if not self.options.repoid:
148 print("Repo id required. Try --help")
149 sys.exit(0)
150 try:
151 groups = self.pconn.packagegroups(self.options.repoid)
152 if not groups:
153 print("PackageGroups not found in repo [%s]" % (self.options.repoid))
154 sys.exit(-1)
155 print "+-------------------------------------------+"
156 print "Repository: %s" % (self.options.repoid)
157 print "Package Group Information "
158 print "+-------------------------------------------+"
159 keys = groups.keys()
160 keys.sort()
161 for key in keys:
162 print "\t %s" % (key)
163 except RestlibException, re:
164 log.error("Error: %s" % re)
165 systemExit(re.code, re.msg)
166 except Exception, e:
167 log.error("Error: %s" % e)
168 raise
169
171 if not self.options.groupid:
172 print("package group id required. Try --help")
173 sys.exit(0)
174 if not self.options.repoid:
175 print("Repo id required. Try --help")
176 sys.exit(0)
177 try:
178 groups = self.pconn.packagegroups(self.options.repoid)
179 if self.options.groupid not in groups:
180 print("PackageGroup [%s] not found in repo [%s]" % (self.options.groupid, self.options.repoid))
181 sys.exit(-1)
182 print "+-------------------------------------------+"
183 print "Package Group Information"
184 print "+-------------------------------------------+"
185 info = groups[self.options.groupid]
186 print constants.PACKAGE_GROUP_INFO % (info["name"], info["id"],
187 info["mandatory_package_names"], info["default_package_names"],
188 info["optional_package_names"], info["conditional_package_names"])
189 except RestlibException, re:
190 log.error("Error: %s" % re)
191 systemExit(re.code, re.msg)
192 except Exception, e:
193 log.error("Error: %s" % e)
194 raise
195
197 if not self.options.consumerid:
198 print("consumer id required. Try --help")
199 sys.exit(0)
200 if not self.options.pkggroupid:
201 print("package group id required. Try --help")
202 sys.exit(0)
203 try:
204 print self.cconn.installpackagegroups(self.options.consumerid,
205 self.options.pkggroupid)
206 except RestlibException, re:
207 log.error("Error: %s" % re)
208 systemExit(re.code, re.msg)
209 except Exception, e:
210 log.error("Error: %s" % e)
211 raise
212
214 if not self.options.repoid:
215 print("Repo id required. Try --help")
216 sys.exit(0)
217 if not self.options.groupid:
218 print ("package group id required. Try --help")
219 sys.exit(0)
220 if not self.options.groupname:
221 print ("package group name required. Try --help")
222 sys.exit(0)
223 try:
224 self.pconn.create_packagegroup(self.options.repoid,
225 self.options.groupid, self.options.groupname,
226 self.options.description)
227 print "+-------------------------------------------+"
228 print "Package Group [%s] created in repository [%s]" % \
229 (self.options.groupid, self.options.repoid)
230 print "+-------------------------------------------+"
231 except RestlibException, re:
232 log.error("Error: %s" % re)
233 systemExit(re.code, re.msg)
234 except Exception, e:
235 log.error("Error: %s" % e)
236 raise
237
239 if not self.options.repoid:
240 print("Repo id required. Try --help")
241 sys.exit(0)
242 if not self.options.groupid:
243 print("package group id required. Try --help")
244 sys.exit(0)
245 try:
246 self.pconn.delete_packagegroup(self.options.repoid, self.options.groupid)
247 print "PackageGroup [%s] deleted from repository [%s]" % \
248 (self.options.groupid, self.options.repoid)
249 except RestlibException, re:
250 log.error("Error: %s" % re)
251 systemExit(re.code, re.msg)
252 except Exception, e:
253 log.error("Error: %s" % e)
254 raise
255
257 if not self.options.repoid:
258 print("Repo id required. Try --help")
259 sys.exit(0)
260 if not self.options.pnames:
261 print("package name required. Try --help")
262 sys.exit(0)
263 if not self.options.groupid:
264 print("package group id required. Try --help")
265 sys.exit(0)
266 try:
267 self.pconn.add_packages_to_group(self.options.repoid,
268 self.options.groupid, self.options.pnames,
269 self.options.grouptype)
270 print "Following packages added to group [%s] in repository [%s]: \n %s" % \
271 (self.options.groupid, self.options.repoid,
272 self.options.pnames)
273 except RestlibException, re:
274 log.error("Error: %s" % re)
275 systemExit(re.code, re.msg)
276 except Exception, e:
277 log.error("Error: %s" % e)
278 raise
279
281 if not self.options.repoid:
282 print("Repo id required. Try --help")
283 sys.exit(0)
284 if not self.options.pkgname:
285 print("package name required. Try --help")
286 sys.exit(0)
287 if not self.options.groupid:
288 print("package group id required. Try --help")
289 sys.exit(0)
290 try:
291 self.pconn.delete_package_from_group(self.options.repoid,
292 self.options.groupid, self.options.pkgname,
293 self.options.grouptype)
294 print "Package [%s] deleted from group [%s] in repository [%s]" % \
295 (self.options.pkgname, self.options.groupid,
296 self.options.repoid)
297 except RestlibException, re:
298 log.error("Error: %s" % re)
299 systemExit(re.code, re.msg)
300 except Exception, e:
301 log.error("Error: %s" % e)
302 raise
303