summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Minar <miminar@redhat.com>2013-08-08 12:41:58 +0200
committerMichal Minar <miminar@redhat.com>2013-08-08 12:53:21 +0200
commit4e77e9373e45ec404cdcefe2a7862b8d064285d8 (patch)
treec270eeb57104eb6296c4e58d255bb1c76b96f849
parent86d274d78b8fb170306aa59d9878c78d4d88c2df (diff)
downloadopenlmi-providers-4e77e9373e45ec404cdcefe2a7862b8d064285d8.tar.gz
openlmi-providers-4e77e9373e45ec404cdcefe2a7862b8d064285d8.tar.xz
openlmi-providers-4e77e9373e45ec404cdcefe2a7862b8d064285d8.zip
software: support metalink attribute of repository
There can be a situation, when base_urls and mirror_list are empty, but metalink is filled. Let's fallback to metalink while obtaining AccessInfo value.
-rw-r--r--src/software/lmi/software/core/IdentityResource.py2
-rw-r--r--src/software/lmi/software/yumdb/repository.py8
2 files changed, 9 insertions, 1 deletions
diff --git a/src/software/lmi/software/core/IdentityResource.py b/src/software/lmi/software/core/IdentityResource.py
index 6ef21f7..dd93b4e 100644
--- a/src/software/lmi/software/core/IdentityResource.py
+++ b/src/software/lmi/software/core/IdentityResource.py
@@ -554,6 +554,8 @@ def _fill_non_keys(repo, model):
access_info = None
if repo.mirror_list:
access_info = repo.mirror_list
+ elif repo.metalink:
+ access_info = repo.metalink
elif repo.base_urls:
if len(repo.base_urls) > 0:
if len(repo.base_urls) > 1:
diff --git a/src/software/lmi/software/yumdb/repository.py b/src/software/lmi/software/yumdb/repository.py
index 758ae21..23fd5b8 100644
--- a/src/software/lmi/software/yumdb/repository.py
+++ b/src/software/lmi/software/yumdb/repository.py
@@ -38,6 +38,7 @@ PROPERTY_NAME_MAP = {
"enabled" : "enabled",
"gpg_check" : "gpgcheck",
"last_edit" : "repo_config_age",
+ "metalink" : "metalink",
"mirror_list" : "mirrorlist",
"mirror_urls" : "mirrorurls",
"name" : "name",
@@ -108,6 +109,10 @@ class Repository(object):
"last_edit", # datetime of last config modification
"last_update", # datetime of last change of repository
# on server
+ "metalink", # Specifies a URL to a metalink file for the
+ # repomd.xml, a list of mirrors for the entire repository are
+ # generated by converting the mirrors for the repomd.xml file to a
+ # baseurl.
"mirror_list", # url of mirrorlist, or None
"mirror_urls", # list of urls obtained from mirrorlist or None
#"persist_dir", #
@@ -125,7 +130,7 @@ class Repository(object):
def __init__(self, objid, repoid, arch, basearch, base_urls,
config_file, cost, enabled, gpg_check, last_edit, last_update,
name, pkg_dir, ready, releasever, repo_gpg_check, revision,
- timeout, mirror_list=None, mirror_urls=None):
+ timeout, metalink=None, mirror_list=None, mirror_urls=None):
for arg in ('last_edit', 'last_update'):
if ( locals()[arg] is not None
and not isinstance(locals()[arg], datetime)):
@@ -147,6 +152,7 @@ class Repository(object):
self.gpg_check = bool(gpg_check)
self.last_edit = last_edit
self.last_update = last_update
+ self.metalink = "" if not metalink else metalink
self.mirror_list = "" if not mirror_list else mirror_list
self.mirror_urls = [] if not mirror_urls else list(mirror_urls)
self.name = name