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
22 import pulp.client.constants as constants
23 from pulp.client.core.basecore import BaseCore, systemExit
24 from pulp.client.connection import ConsumerGroupConnection, RestlibException
25 from pulp.client.logutil import getLogger
26 from pulp.client.repolib import RepoLib
27 from pulp.client.config import Config
28 CFG = Config()
29
30 import gettext
31 _ = gettext.gettext
32 log = getLogger(__name__)
33
36 usage = "consumergroup [OPTIONS]"
37 shortdesc = "consumer group specific actions to pulp server."
38 desc = ""
39 self.name = "consumergroup"
40 self.actions = {"create" : "Create a consumer group",
41 "add_consumer" : "Add a consumer to the group",
42 "delete_consumer" : "Delete a consumer from the group",
43 "list" : "List available consumer groups",
44 "delete" : "Delete the consumer group",
45 "bind" : "Bind the consumer group to listed repos",
46 "unbind" : "Unbind the consumer group from repos",}
47 BaseCore.__init__(self, "consumergroup", usage, shortdesc, desc)
48 self.repolib = RepoLib()
49
51 self.cgconn = ConsumerGroupConnection(host=CFG.server.host or "localhost",
52 port=CFG.server.port or 443,
53 username=self.username,
54 password=self.password,
55 cert_file=self.cert_filename,
56 key_file=self.key_filename)
57
59 self.action = self._get_action()
60 if self.action == "create":
61 usage = "consumergroup create [OPTIONS]"
62 self.setup_option_parser(usage, "", True)
63 self.parser.add_option("--id", dest="id",
64 help="consumer group id"),
65 self.parser.add_option("--description", dest="description",
66 help="description of consumer group")
67 self.parser.add_option("--consumerids", dest="consumerids",
68 help="consumer id list to be included in this group")
69 if self.action == "delete":
70 usage = "consumergroup delete [OPTIONS]"
71 self.setup_option_parser(usage, "", True)
72 self.parser.add_option("--id", dest="id",
73 help="Consumer group id")
74 if self.action == "list":
75 usage = "consumergroup list [OPTIONS]"
76 self.setup_option_parser(usage, "", True)
77 if self.action == "add_consumer":
78 usage = "consumergroup add_consumer [OPTIONS]"
79 self.setup_option_parser(usage, "", True)
80 self.parser.add_option("--consumerid", dest="consumerid",
81 help="Consumer Identifier")
82 self.parser.add_option("--id", dest="groupid",
83 help="Consumer Group Identifier")
84 if self.action == "delete_consumer":
85 usage = "consumergroup delete_consumer [OPTIONS]"
86 self.setup_option_parser(usage, "", True)
87 self.parser.add_option("--consumerid", dest="consumerid",
88 help="Consumer Identifier")
89 self.parser.add_option("--id", dest="groupid",
90 help="Consumer Group Identifier")
91 if self.action == "bind":
92 usage = "consumergroup bind [OPTIONS]"
93 self.setup_option_parser(usage, "", True)
94 self.parser.add_option("--repoid", dest="repoid",
95 help="Repo Identifier")
96 self.parser.add_option("--id", dest="groupid",
97 help="Consumer Group Identifier")
98 if self.action == "unbind":
99 usage = "consumergroup unbind [OPTIONS]"
100 self.setup_option_parser(usage, "", True)
101 self.parser.add_option("--repoid", dest="repoid",
102 help="Repo Identifier")
103 self.parser.add_option("--id", dest="groupid",
104 help="Consumer Group Identifier")
105
121
123 if not self.options.id:
124 print("consumer group id required. Try --help")
125 sys.exit(0)
126 if not self.options.description:
127 self.options.description = ""
128 if not self.options.consumerids:
129 print("Creating empty consumer group")
130 self.options.consumerids = []
131 else:
132 self.options.consumerids = self.options.consumerids.split(",")
133 try:
134 consumergroup = self.cgconn.create(self.options.id, self.options.description,
135 self.options.consumerids)
136 print _(" Successfully created Consumer group [ %s ] with description [ %s ]" % \
137 (consumergroup['id'], consumergroup["description"]))
138 except RestlibException, re:
139 log.error("Error: %s" % re)
140 systemExit(re.code, re.msg)
141 except Exception, e:
142 log.error("Error: %s" % e)
143 raise
144
146 try:
147 groups = self.cgconn.consumergroups()
148 if not len(groups):
149 print _("No consumer groups available to list")
150 sys.exit(0)
151 print """+-------------------------------------------+\n List of Available Consumer Groups \n+-------------------------------------------+"""
152 for group in groups:
153 print constants.AVAILABLE_CONSUMER_GROUP_INFO % (group["id"], group["description"], group["consumerids"] )
154 except RestlibException, re:
155 log.error("Error: %s" % re)
156 systemExit(re.code, re.msg)
157 except Exception, e:
158 log.error("Error: %s" % e)
159 raise
160
161
163 if not self.options.id:
164 print("Group id required. Try --help")
165 sys.exit(0)
166 group = self.cgconn.consumergroup(id=self.options.id)
167 if not group:
168 print _(" Consumer Group [ %s ] does not exist" % \
169 self.options.id)
170 sys.exit(-1)
171 try:
172 self.cgconn.delete(id=self.options.id)
173 print _(" Successfully deleted Consumer Group [ %s ] " % self.options.id)
174 except RestlibException, re:
175 print _(" Delete operation failed Consumer Group [ %s ] " % \
176 self.options.id)
177 log.error("Error: %s" % re)
178 sys.exit(-1)
179 except Exception, e:
180 print _(" Delete operation failed on Consumer Group [ %s ]. " % \
181 self.options.id)
182 log.error("Error: %s" % e)
183 sys.exit(-1)
184
185
187 if not self.options.consumerid:
188 print("consumer id required. Try --help")
189 sys.exit(0)
190 if not self.options.groupid:
191 print("group id required. Try --help")
192 sys.exit(0)
193 try:
194 self.cgconn.add_consumer(self.options.groupid, self.options.consumerid)
195 print _(" Successfully added Consumer [%s] to Group [%s]" % (self.options.consumerid, self.options.groupid))
196 except RestlibException, re:
197 print _(" Adding consumer failed ")
198 log.error("Error: %s" % re)
199 sys.exit(-1)
200 except Exception, e:
201 log.error("Error: %s" % e)
202 raise
203
205 if not self.options.consumerid:
206 print("consumer id required. Try --help")
207 sys.exit(0)
208 if not self.options.groupid:
209 print("group id required. Try --help")
210 sys.exit(0)
211 try:
212 self.cgconn.delete_consumer(self.options.groupid, self.options.consumerid)
213 print _(" Successfully deleted Consumer [%s] from Group [%s]" % (self.options.consumerid, self.options.groupid))
214 except RestlibException, re:
215 log.error("Error: %s" % re)
216 systemExit(re.code, re.msg)
217 except Exception, e:
218 log.error("Error: %s" % e)
219 raise
220
222 if not self.options.groupid:
223 print("consumer group id required. Try --help")
224 sys.exit(0)
225 if not self.options.repoid:
226 print("repo id required. Try --help")
227 sys.exit(0)
228 try:
229 self.cgconn.bind(self.options.groupid, self.options.repoid)
230 self.repolib.update()
231 print _(" Successfully subscribed Consumer Group [%s] to Repo [%s]" % (self.options.groupid, self.options.repoid))
232 except RestlibException, re:
233 log.error("Error: %s" % re)
234 systemExit(re.code, re.msg)
235 except Exception, e:
236 log.error("Error: %s" % e)
237 raise
238
240 if not self.options.groupid:
241 print("consumer group id required. Try --help")
242 sys.exit(0)
243 if not self.options.repoid:
244 print("repo id required. Try --help")
245 sys.exit(0)
246 try:
247 self.cgconn.unbind(self.options.groupid, self.options.repoid)
248 self.repolib.update()
249 print _(" Successfully unsubscribed Consumer Group [%s] from Repo [%s]" % (self.options.groupid, self.options.repoid))
250 except RestlibException, re:
251 log.error("Error: %s" % re)
252 systemExit(re.code, re.msg)
253 except Exception, e:
254 log.error("Error: %s" % e)
255 raise
256