implement '--repo' option and '--ignore-ksrepo'
authorGui Chen <gui.chen@intel.com>
Thu, 13 Feb 2014 05:12:12 +0000 (00:12 -0500)
committerGui Chen <gui.chen@intel.com>
Tue, 4 Mar 2014 07:03:08 +0000 (02:03 -0500)
option '--repo' is to append a new repo to repo pool, like
  --repo "name=main;baseurl=http://repo"
option '--ignoe-ksrepo' is to ignore repos in ks file, only valid when '--repo' used

Change-Id: I38586f2e587904e0f4fe2d901597f7231a248b97
Signed-off-by: Gui Chen <gui.chen@intel.com>
mic/conf.py
mic/creator.py
mic/imager/baseimager.py
mic/kickstart/__init__.py
mic/utils/misc.py

index 99b9696..e52317e 100644 (file)
@@ -64,7 +64,7 @@ class ConfigMgr(object):
                     "repourl": {},
                     "localrepos": [],  # save localrepos
                     "runtime": "bootstrap",
-                    "repo": {},
+                    "extrarepos": {},
                     "ignore_ksrepo": False,
                 },
                 'chroot': {
@@ -202,7 +202,9 @@ class ConfigMgr(object):
                                               self.create['name_suffix'])
 
         msger.info("Retrieving repo metadata:")
-        ksrepos = misc.get_repostrs_from_ks(ks)
+        ksrepos = kickstart.get_repos(ks,
+                                      self.create['extrarepos'],
+                                      self.create['ignore_ksrepo'])
         if not ksrepos:
             raise errors.KsError('no valid repos found in ks file')
 
index 01e9844..9650309 100644 (file)
@@ -281,7 +281,17 @@ class Creator(cmdln.Cmdln):
                 configmgr.create['repourl'][key] = val
 
         if self.options.repo:
-            configmgr.create['repo'] = self.options.repo
+            for optvalue in self.options.repo:
+                repo = {}
+                for item in optvalue.split(';'):
+                    try:
+                        key, val = item.split('=')
+                    except:
+                        continue
+                    repo[key.strip()] = val.strip()
+                if 'name' in repo:
+                    configmgr.create['extrarepos'][repo['name']] = repo
+
         if self.options.ignore_ksrepo:
             configmgr.create['ignore_ksrepo'] = self.options.ignore_ksrepo
 
index 21410b0..2e00384 100644 (file)
@@ -981,7 +981,7 @@ class BaseImageCreator(object):
         into the install root. By default, the packages are installed from the
         repository URLs specified in the kickstart.
 
-        repo_urls -- a dict which maps a repository name to a repository URL;
+        repo_urls -- a dict which maps a repository name to a repository;
                      if supplied, this causes any repository URLs specified in
                      the kickstart to be overridden.
 
@@ -1001,6 +1001,9 @@ class BaseImageCreator(object):
             self._excluded_pkgs = None
             self._required_groups = None
 
+        if not repo_urls:
+            repo_urls = self.extrarepos
+
         pkg_manager = self.get_pkg_manager()
         pkg_manager.setup()
 
@@ -1008,7 +1011,7 @@ class BaseImageCreator(object):
             if 'debuginfo' in self.install_pkgs:
                 pkg_manager.install_debuginfo = True
 
-        for repo in kickstart.get_repos(self.ks, repo_urls):
+        for repo in kickstart.get_repos(self.ks, repo_urls, self.ignore_ksrepo):
             (name, baseurl, mirrorlist, inc, exc,
              proxy, proxy_username, proxy_password, debuginfo,
              source, gpgkey, disable, ssl_verify, nocache,
index 7334af6..8ee5f1d 100644 (file)
@@ -746,6 +746,16 @@ def get_repos(ks, repo_urls=None, ignore_ksrepo=False):
         if 'name' in repo:
             repos[repo['name']] = Repo(**repo)
 
+    if repo_urls:
+        if ignore_ksrepo:
+            repos = {}
+        for name, repo in repo_urls.items():
+            if 'baseurl' in repo:
+                repo['baseurl'] = SafeURL(repo.get('baseurl'),
+                                          repo.get('user', None),
+                                          repo.get('passwd', None))
+            repos[name] = Repo(**repo)
+
     return repos.values()
 
 def convert_method_to_repo(ks):
index d90041d..243051e 100644 (file)
@@ -612,11 +612,11 @@ def _get_metadata_from_repo(baseurl, proxies, cachedir, reponame, filename,
 def get_metadata_from_repos(repos, cachedir):
     my_repo_metadata = []
     for repo in repos:
-        reponame = repo['name']
-        baseurl  = repo['baseurl']
+        reponame = repo.name
+        baseurl = repo.baseurl
 
-        if 'proxy' in repo:
-            proxy = repo['proxy']
+        if hasattr(repo, 'proxy'):
+            proxy = repo.proxy
         else:
             proxy = get_proxy_for(baseurl)