[Kimchi-devel] [PATCH 1/2] Implement a method to display the repo name expanding variables

Aline Manera alinefm at linux.vnet.ibm.com
Wed Sep 9 01:33:53 UTC 2015



On 04/09/2015 13:20, Jose Ricardo Ziviani wrote:
>   - Yum repos can use variables instead of hardcoded values in the config
>     files. This patch adds a new field containing the repo name with all
>     variables expanded. It will be displayed in Kimchi host tab to
>     improve the usability.
>
> Signed-off-by: Jose Ricardo Ziviani <joserz at linux.vnet.ibm.com>
> ---
>   src/kimchi/repositories.py |  4 ++++
>   src/kimchi/yumparser.py    | 47 +++++++++++++++++++++++++++++++++++++++++++++-
>   2 files changed, 50 insertions(+), 1 deletion(-)
>
> diff --git a/src/kimchi/repositories.py b/src/kimchi/repositories.py
> index 20b7311..8f99a88 100644
> --- a/src/kimchi/repositories.py
> +++ b/src/kimchi/repositories.py
> @@ -30,6 +30,7 @@ from kimchi.exception import InvalidOperation, InvalidParameter
>   from kimchi.exception import OperationFailed, NotFoundError, MissingParameter
>   from kimchi.utils import validate_repo_url
>   from kimchi.yumparser import get_yum_repositories, write_repo_to_file
> +from kimchi.yumparser import get_display_name
>
>
>   class Repositories(object):
> @@ -149,10 +150,13 @@ class YumRepo(object):
>
>           entry = repos.get(repo_id)
>
> +        display_name = get_display_name(entry.name)
> +
>           info = {}
>           info['enabled'] = entry.enabled
>           info['baseurl'] = entry.baseurl or ''
>           info['config'] = {}
> +        info['config']['display_repo_name'] = display_name
>           info['config']['repo_name'] = entry.name or ''
>           info['config']['gpgcheck'] = entry.gpgcheck
>           info['config']['gpgkey'] = entry.gpgkey or ''
> diff --git a/src/kimchi/yumparser.py b/src/kimchi/yumparser.py
> index 792c3ae..c278711 100644
> --- a/src/kimchi/yumparser.py
> +++ b/src/kimchi/yumparser.py
> @@ -17,9 +17,10 @@
>   # License along with this library; if not, write to the Free Software
>   # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
>   import subprocess
> +import glob
>
>   from os import listdir
> -from os.path import isfile, splitext
> +from os.path import isfile, splitext, basename
>
>
>   class YumRepoObject(object):
> @@ -208,6 +209,50 @@ def delete_repo_from_file(repo):
>           f.writelines(data)
>
>
> +def _get_releasever():
> +    release_file = glob.glob('/etc/*-release')[0]
> +    cmd = ['rpm', '-q', '--qf', '"%{version}"', '-f', release_file]
> +    relver = subprocess.Popen(cmd, stdout=subprocess.PIPE)
> +    return relver.communicate()[0].strip('"\n')
> +

There is a package named rpm-python which provides binding to RPM tool.
I don't know how the RPM output change from distro to distro so probably 
it is better to use the python binding.

> +
> +def _get_basearch():
> +    cmd = ['uname', '-i']
> +    uname = subprocess.Popen(cmd, stdout=subprocess.PIPE)
> +    return uname.communicate()[0].strip('"\n')
> +
> +

You can use os.uname()[4] to get the arch

> +def _get_all_yum_vars():
> +    variables = {}
> +
> +    def _get_var_content(varfile):
> +        with open(varfile) as f:
> +            variables[basename(varfile)] = f.read().strip('\n')
> +
> +    map(lambda vfile:
> +        _get_var_content(vfile),
> +        glob.glob('/etc/yum/vars/*'))
> +
> +    return variables
> +
> +
> +def get_display_name(name):
> +    if not name:
> +        return ''
> +
> +    yum_variables = _get_all_yum_vars()
> +    yum_variables['releasever'] = _get_releasever()
> +    yum_variables['basearch'] = _get_basearch()
> +
> +    name_vars = [var for var in name.split()
> +                 if var.startswith('$') and var.strip('$') in yum_variables]
> +
> +    return reduce(lambda nm, var:
> +                  nm.replace(var, yum_variables[var.strip('$')]),
> +                  name_vars,
> +                  name)
> +
> +
>   class YumUpdatePackageObject(object):
>
>       def __init__(self, name, arch, version, repo):




More information about the Kimchi-devel mailing list