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

Source Code for Module pulp.client.core.core_errata

  1  #!/usr/bin/python 
  2  # 
  3  # Pulp Repo management module 
  4  # 
  5  # Copyright (c) 2010 Red Hat, Inc. 
  6  # 
  7  # This software is licensed to you under the GNU General Public License, 
  8  # version 2 (GPLv2). There is NO WARRANTY for this software, express or 
  9  # implied, including the implied warranties of MERCHANTABILITY or FITNESS 
 10  # FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2 
 11  # along with this software; if not, see 
 12  # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. 
 13  # 
 14  # Red Hat trademarks are not licensed under GPLv2. No permission is 
 15  # granted to use or replicate Red Hat trademarks that are incorporated 
 16  # in this software or its documentation. 
 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   
37 -class errata(BaseCore):
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
52 - def load_server(self):
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)
77 - def generate_options(self):
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
120 - def _do_core(self):
121 if self.action == "create": 122 self._create() 123 if self.action == "delete": 124 self._delete() 125 if self.action == "list": 126 self._list() 127 if self.action == "info": 128 self._info() 129 if self.action == "install": 130 self._install()
131
132 - def _create(self):
133 print _("Not Implemented") 134 sys.exit(0)
135
136 - def _delete(self):
137 print _("Not Implemented") 138 sys.exit(0)
139
140 - def _list(self):
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
162 - def _info(self):
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
180 - def _install(self):
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
202 - def getConsumer(self):
203 if not self.options.consumerid: 204 print("consumer id required. Try --help") 205 sys.exit(0) 206 207 return self.options.consumerid
208
209 -class FileError(Exception):
210 pass
211
212 -class SyncError(Exception):
213 pass
214