Package pulp :: Package client :: Package core :: Module core_packagegroup
[hide private]
[frames] | no frames]

Source Code for Module pulp.client.core.core_packagegroup

  1  #!/usr/bin/python 
  2  # 
  3  # Pulp Registration and subscription module 
  4  # Copyright (c) 2010 Red Hat, Inc. 
  5  # 
  6  # Authors: Pradeep Kilambi <pkilambi@redhat.com> 
  7  # 
  8  # This software is licensed to you under the GNU General Public License, 
  9  # version 2 (GPLv2). There is NO WARRANTY for this software, express or 
 10  # implied, including the implied warranties of MERCHANTABILITY or FITNESS 
 11  # FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2 
 12  # along with this software; if not, see 
 13  # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. 
 14  # 
 15  # Red Hat trademarks are not licensed under GPLv2. No permission is 
 16  # granted to use or replicate Red Hat trademarks that are incorporated 
 17  # in this software or its documentation. 
 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  #TODO: move this to config 
 30  CONSUMERID = "/etc/pulp/consumer" 
 31  import gettext 
 32  _ = gettext.gettext 
 33   
34 -class packagegroup(BaseCore):
35 - def __init__(self):
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
52 - def load_server(self):
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
64 - def generate_options(self):
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
130 - def _do_core(self):
131 if self.action == "info": 132 self._info() 133 if self.action == "install": 134 self._install() 135 if self.action == "list": 136 self._list() 137 if self.action == "create": 138 self._create() 139 if self.action == "delete": 140 self._delete() 141 if self.action == "add_package": 142 self._add_package() 143 if self.action == "delete_package": 144 self._delete_package()
145
146 - def _list(self):
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
170 - def _info(self):
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
196 - def _install(self):
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
213 - def _create(self):
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
238 - def _delete(self):
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
256 - def _add_package(self):
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
280 - def _delete_package(self):
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