1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import logging
20 from M2Crypto import SSL, httpslib
21
22 log = logging.getLogger(__name__)
23
25 - def __init__(self, hostname, port=443, cacert=None, cert=None, key=None):
26 self.hostname = hostname
27 self.port = port
28 self.cacert = cacert
29 self.cert = cert
30 self.key = key
31 self.httpServ = None
32
34 context = SSL.Context("sslv3")
35 context.load_cert(self.cert, keyfile=self.key)
36 context.load_verify_locations(self.cacert)
37 context.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, depth=9)
38
39 self.httpServ = httpslib.HTTPSConnection(self.hostname, port=self.port,
40 ssl_context=context)
41 self.httpServ.connect()
42
44 """
45 Fetch the listings file from CDN
46 @param URI: relative url for the listings file
47 @type URI: str (ex: "/content/dist/rhel/server/listing")
48 """
49 self.httpServ.request('GET', URI)
50 response = self.httpServ.getresponse()
51 if response.status != 200:
52 raise Exception(response.status, response.read())
53 return response.read()
54
56 version_arch_urls = {}
57 for label, uri in content_sets.items():
58 try:
59 versions = self._request_get(uri[:uri.find("$releasever")] + "/listing").split('\n')
60 for version in versions:
61 ver_uri = uri.replace("$releasever", version)
62 arches = self._request_get(ver_uri[:ver_uri.find("$basearch")] + "/listing").split('\n')
63 for arch in arches:
64 full_uri = ver_uri.replace("$basearch", arch)
65 version_arch_urls[label + '-' + version + '-' + arch] = full_uri
66 except Exception:
67 log.error("Unable to fetch the listings file for relative url %s" % uri)
68
69 return version_arch_urls
70
73