1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 import logging
17
18 from pulp.server.agent import Agent
19 from pulp.server.api.base import BaseApi
20 from pulp.server.api.consumer import ConsumerApi
21 from pulp.server.api.repo import RepoApi
22 from pulp.server.auditing import audit
23 from pulp.server.db import model
24 from pulp.server.db.connection import get_object_db
25 from pulp.server.pexceptions import PulpException
26
27 log = logging.getLogger(__name__)
31
36
41
42
43 @audit(params=['id', 'consumerids'])
44 - def create(self, id, description, consumerids=()):
60
61
68
70 """
71 Return a single ConsumerGroup object
72 """
73 return self.objectdb.find_one({'id': id})
74
75
77 """
78 Return consumer ids belonging to this ConsumerGroup
79 """
80 consumer = self.objectdb.find_one({'id': id})
81 return consumer['consumerids']
82
83
84 @audit()
97
99 """
100 Responsible for properly associating a Consumer to a ConsumerGroup
101 """
102 consumerids = consumergroup['consumerids']
103 if consumer["id"] in consumerids:
104 return
105
106 consumerids.append(consumer["id"])
107 consumergroup["consumerids"] = consumerids
108
109 @audit()
120
121 @audit()
122 - def bind(self, id, repoid):
123 """
124 Bind (subscribe) a consumer group to a repo.
125 @param id: A consumer group id.
126 @type id: str
127 @param repoid: A repo id to bind.
128 @type repoid: str
129 @raise PulpException: When consumer group is not found.
130 """
131 consumergroup = self.consumergroup(id)
132 if consumergroup is None:
133 raise PulpException("No Consumer Group with id: %s found" % id)
134 repo = self.repoApi.repository(repoid)
135 if repo is None:
136 raise PulpException("No Repository with id: %s found" % repoid)
137
138 consumerids = consumergroup['consumerids']
139 for consumerid in consumerids:
140 self.consumerApi.bind(consumerid, repoid)
141
142 @audit()
143 - def unbind(self, id, repoid):
144 """
145 Unbind (unsubscribe) a consumer group from a repo.
146 @param id: A consumer group id.
147 @type id: str
148 @param repoid: A repo id to unbind.
149 @type repoid: str
150 @raise PulpException: When consumer group not found.
151 """
152 consumergroup = self.consumergroup(id)
153 if consumergroup is None:
154 raise PulpException("No Consumer Group with id: %s found" % id)
155 repo = self.repoApi.repository(repoid)
156 if (repo is None):
157 raise PulpException("No Repository with id: %s found" % repoid)
158
159 consumerids = consumergroup['consumerids']
160 for consumerid in consumerids:
161 self.consumerApi.unbind(consumerid, repoid)
162
163
164 @audit()
166 """
167 Install packages on the consumers in a consumer group.
168 @param id: A consumer group id.
169 @type id: str
170 @param packagenames: The package names to install.
171 @type packagenames: [str,..]
172 """
173 consumergroup = self.consumergroup(id)
174 if consumergroup is None:
175 raise PulpException("No Consumer Group with id: %s found" % id)
176 consumerids = consumergroup['consumerids']
177 for consumerid in consumerids:
178 agent = Agent(consumerid)
179 agent.packages.install(packagenames)
180 return packagenames
181
183 """
184 Install errata on a consumer group.
185 @param id: A consumergroup id.
186 @type id: str
187 @param errataids: The errata ids to install.
188 @type errataids: [str,..]
189 @param types: Errata type filter
190 @type types: str
191 """
192 consumergroup = self.consumergroup(id)
193 if consumergroup is None:
194 raise PulpException("No Consumer Group with id: %s found" % id)
195 consumerids = consumergroup['consumerids']
196 consumer_pkg = {}
197 for consumerid in consumerids:
198 consumer = self.consumerApi.consumer(consumerid)
199 agent = Agent(consumerid)
200 pkgs = []
201 if errataids:
202 applicable_errata = self.consumerApi._applicable_errata(consumer, types)
203 for eid in errataids:
204 for pobj in applicable_errata[eid]:
205 if pobj["arch"] != "src":
206 pkgs.append(pobj["name"])
207 else:
208
209 pkgobjs = self.consumerApi.list_package_updates(id, types)
210 for pobj in pkgobjs:
211 if pobj["arch"] != "src":
212 pkgs.append(pobj["name"])
213 log.error("Foe consumer id %s Packages to install %s" % (consumerid, pkgs))
214 agent.packages.install(pkgs)
215 consumer_pkg[consumerid] = pkgs
216 return consumer_pkg
217