[Kimchi-devel] [PATCH 3/3] issue #461: Add 'metalink' support for YUM repositories
Aline Manera
alinefm at linux.vnet.ibm.com
Thu Mar 26 19:55:23 UTC 2015
On 24/03/2015 15:16, Crístian Viana wrote:
> YUM repositories have a field called 'metalink', which is another
> method to specify how to reach the repository data. Kimchi, however, is
> unaware of that field.
>
> Allow creating and updating a YUM repository with a metalink value, and
> return the field 'config > metalink' when listing a YUM repository.
>
> Fix issue #461 (repositories: Kimchi does not display metalink
> information).
>
> Signed-off-by: Crístian Viana <vianac at linux.vnet.ibm.com>
> ---
> src/kimchi/API.json | 5 +++++
> src/kimchi/i18n.py | 3 ++-
> src/kimchi/repositories.py | 21 +++++++++++++++++----
> 3 files changed, 24 insertions(+), 5 deletions(-)
>
> diff --git a/src/kimchi/API.json b/src/kimchi/API.json
> index f507251..50de8c7 100644
> --- a/src/kimchi/API.json
> +++ b/src/kimchi/API.json
> @@ -701,6 +701,11 @@
> "description": "URL to a file containing a list of baseurls",
> "type": "string",
> "error": "KCHREPOS0007E"
> + },
> + "metalink": {
> + "description": "URL to a metalink file for the repomd.xml",
> + "type": "string",
> + "error": "KCHREPOS0029E"
> }
> }
> }
> diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py
> index dc0830a..472e891 100644
> --- a/src/kimchi/i18n.py
> +++ b/src/kimchi/i18n.py
> @@ -298,7 +298,7 @@ messages = {
> "KCHREPOS0010E": _("GPG key must be a URL pointing to the ASCII-armored file."),
> "KCHREPOS0011E": _("Could not update repository %(repo_id)s."),
> "KCHREPOS0012E": _("Repository %(repo_id)s does not exist."),
> - "KCHREPOS0013E": _("Specify repository base URL or mirror list in order to create or update a YUM repository."),
> + "KCHREPOS0013E": _("Specify repository base URL, mirror list or metalink in order to create or update a YUM repository."),
> "KCHREPOS0014E": _("Repository management tool was not recognized for your system."),
> "KCHREPOS0015E": _("Repository %(repo_id)s is already enabled."),
> "KCHREPOS0016E": _("Repository %(repo_id)s is already disabled."),
> @@ -314,6 +314,7 @@ messages = {
> "KCHREPOS0026E": _("Unable to add repository. Details: '%(err)s'"),
> "KCHREPOS0027E": _("Unable to remove repository. Details: '%(err)s'"),
> "KCHREPOS0028E": _("Configuration items: '%(items)s' are not supported by repository manager"),
> + "KCHREPOS0029E": _("Repository metalink must be an http://, ftp:// or file:// URL."),
>
> "KCHSNAP0001E": _("Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."),
> "KCHSNAP0002E": _("Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: %(err)s"),
> diff --git a/src/kimchi/repositories.py b/src/kimchi/repositories.py
> index 19c5810..0a69cb1 100644
> --- a/src/kimchi/repositories.py
> +++ b/src/kimchi/repositories.py
> @@ -112,7 +112,7 @@ class YumRepo(object):
> """
> TYPE = 'yum'
> DEFAULT_CONF_DIR = "/etc/yum.repos.d"
> - CONFIG_ENTRY = ('repo_name', 'mirrorlist')
> + CONFIG_ENTRY = ('repo_name', 'mirrorlist', 'metalink')
>
> def __init__(self):
> self._yb = getattr(__import__('yum'), 'YumBase')
> @@ -173,6 +173,7 @@ class YumRepo(object):
> info['config']['gpgcheck'] = entry.gpgcheck
> info['config']['gpgkey'] = entry.gpgkey
> info['config']['mirrorlist'] = entry.mirrorlist or ''
> + info['config']['metalink'] = entry.metalink or ''
> return info
>
> def addRepo(self, params):
> @@ -184,7 +185,8 @@ class YumRepo(object):
>
> config = params.get('config', {})
> mirrorlist = config.get('mirrorlist', '')
> - if not baseurl and not mirrorlist:
> + metalink = config.get('metalink', '')
> + if not baseurl and not mirrorlist and not metalink:
> raise MissingParameter("KCHREPOS0013E")
>
> if baseurl:
> @@ -193,6 +195,9 @@ class YumRepo(object):
> if mirrorlist:
> validate_repo_url(mirrorlist)
>
> + if metalink:
> + validate_repo_url(metalink)
> +
> repo_id = params.get('repo_id', None)
> if repo_id is None:
> repo_id = "kimchi_repo_%s" % str(int(time.time() * 1000))
> @@ -206,7 +211,7 @@ class YumRepo(object):
> repo_name = config.get('repo_name', repo_id)
> repo = {'baseurl': baseurl, 'mirrorlist': mirrorlist,
> 'name': repo_name, 'gpgcheck': 1,
> - 'gpgkey': [], 'enabled': 1}
> + 'gpgkey': [], 'enabled': 1, 'metalink': metalink}
>
> # write a repo file in the system with repo{} information.
> parser = ConfigParser()
> @@ -274,6 +279,7 @@ class YumRepo(object):
> baseurl = params.get('baseurl', None)
> config = params.get('config', {})
> mirrorlist = config.get('mirrorlist', None)
> + metalink = config.get('metalink', None)
>
> if baseurl is not None and len(baseurl.strip()) == 0:
> baseurl = None
> @@ -281,7 +287,10 @@ class YumRepo(object):
> if mirrorlist is not None and len(mirrorlist.strip()) == 0:
> mirrorlist = None
>
> - if baseurl is None and mirrorlist is None:
> + if metalink is not None and len(metalink.strip()) == 0:
> + metalink = None
> +
> + if baseurl is None and mirrorlist is None and metalink is None:
> raise MissingParameter("KCHREPOS0013E")
We can use '' (empty string) as the default value while getting the
information from the data sent and simplify that code in a similar way
we did on addRepo()
config = params.get('config', {})
mirrorlist = config.get('mirrorlist', '')
- if not baseurl and not mirrorlist:
+ metalink = config.get('metalink', '')
+ if not baseurl and not mirrorlist and not metalink:
raise MissingParameter("KCHREPOS0013E")
>
> if baseurl is not None:
> @@ -292,6 +301,10 @@ class YumRepo(object):
> validate_repo_url(mirrorlist)
> entry.mirrorlist = mirrorlist
>
> + if metalink is not None:
> + validate_repo_url(metalink)
> + entry.metalink = metalink
> +
> entry.id = params.get('repo_id', repo_id)
> entry.name = config.get('repo_name', entry.name)
> entry.gpgcheck = config.get('gpgcheck', entry.gpgcheck)
More information about the Kimchi-devel
mailing list