remove image conf operations
authorHasan Wan <hasan.wan@intel.com>
Wed, 29 May 2013 06:47:44 +0000 (14:47 +0800)
committerHasan Wan <hasan.wan@intel.com>
Wed, 29 May 2013 09:45:11 +0000 (17:45 +0800)
Change-Id: I4cac0a138cdd3d9b595fb66524edbdf44fdc0135
Signed-off-by: Hasan Wan <hasan.wan@intel.com>
job_pre_release_obs.py

index 8593ca0..cdd1521 100755 (executable)
@@ -11,23 +11,23 @@ import re
 
 from common.buildtrigger import trigger_info, trigger_next
 from common.buildservice import BuildService
-from common.repomaker import find_files, extract_ks, RepoMaker, RepoMakerError
+from common.repomaker import find_files, RepoMaker, RepoMakerError
 from common.backenddb import BackendDB, BackendDBError
 
 class LocalError(Exception):
     """Local error exception."""
     pass
 
-def update_ks(images_ks, backenddb):
+def update_ks(imagedata, backenddb):
     """
     update the repo url point to right URL and add prerelease repo
     url with highest priority
     Args:
-         images_ks (truple list): [(ks_file_name, ks_file_content),]
+         imagedata (ImageData): [(ks_file_name, ks_file_content),]
          backenddb (BackendDB): backend database instance
     """
     # update ULRs in ks file
-    for name, content in images_ks:
+    for name, content in imagedata.ks.items():
         new_ks_lines = []
         for line in content.splitlines():
             if line.startswith('repo ') and \
@@ -39,13 +39,19 @@ def update_ks(images_ks, backenddb):
                     release_name = match.group(1)
                     # Get repo info from backend DB
                     repo = backenddb.get_repo_by_name(release_name)
-                    repo_url = os.path.join(os.getenv("URL_PUBLIC_REPO_BASE", "/"),
+                    repo_url = os.path.join(os.getenv("URL_PUBLIC_REPO_BASE",
+                                                      "/"),
                                             repo['snapshot_path'],
                                             repo['latest_snapshot'])
                     line = re.sub(r'--baseurl=http.*@BUILD_ID@',
                                   r'--baseurl=%s' %repo_url, line)
             new_ks_lines.append(line.strip())
-        yield name.replace('.ks', ''), '\n'.join(new_ks_lines)
+
+        # Update the ks files in imagedata
+        new_ks_content = '\n'.join(new_ks_lines)
+        imagedata.ks[name] = new_ks_content
+
+        yield name.replace('.ks', ''), new_ks_content
 
 def trigger_image_creation(images_ks, build_id):
     """
@@ -62,7 +68,8 @@ def trigger_image_creation(images_ks, build_id):
         data['kickstart'] = kickstart
         data['buildid'] = build_id
         data['images_path'] = os.path.join("images", name)
-        trigger_next('%s/image_trigger_%s' %(os.getenv('WORKSPACE'), index),
+        trigger_next('%s/image_trigger_%s'
+                     %(os.getenv('WORKSPACE'), index),
                      data)
         index = index + 1
 
@@ -95,7 +102,8 @@ def make_repo(project, repo, backenddb):
 
     # Convert live repo to download structure
     repomaker = RepoMaker(build_id, path_to_repo)
-    live_repo_path = os.path.join(os.getenv('PATH_LIVE_REPO_BASE','/srv/obs/repos/'),
+    live_repo_path = os.path.join(os.getenv('PATH_LIVE_REPO_BASE',
+                                            '/srv/obs/repos/'),
                                   project.replace(':', ':/'))
 
     # TODO: get buldconf from OBS
@@ -107,41 +115,30 @@ def make_repo(project, repo, backenddb):
     # TODO: remove output_dir
 
     # Assuming that there can be just one image-configurations- rpm in the repo
-    if not repomaker.images:
+    if not repomaker.imagedata:
         # repomaker did not found image-configurations in pre_release repo,
         # let's take it from target repo, only one package repo is enough
-        path_target_repo = os.path.join(os.getenv('PATH_REPO_BASE', '/srv/download'),
+        path_target_repo = os.path.join(os.getenv('PATH_REPO_BASE',
+                                                  '/srv/download'),
                                         data['snapshot_path'],
                                         latest_snapshot,
                                         data['packages_path'][0])
         # Add image configuration to pre-release repo
-        repomaker.add_images(get_ks_files(path_target_repo))
-        
-    if not repomaker.images:
-        raise LocalError("Image configuration not found")
+        for rpm in find_files(path_target_repo,
+                              prefix="image-configurations-",
+                              suffix='noarch.rpm'):
+            repomaker.load_imagedata(rpm)
 
-    images_ks = update_ks(repomaker.images, backenddb)
+    if not repomaker.imagedata:
+        raise LocalError("Image configuration not found")
 
+    # Update ks files
+    images_ks = update_ks(repomaker.imagedata, backenddb)
     # TODO: update repo builddata with new image ks
-
+    repomaker.gen_image_info()
     # trigger image creation jobs
     trigger_image_creation(images_ks, build_id)
 
-def get_ks_files(repo_dir, prefix="image-configurations-"):
-    """
-    Find rpm packages started with prefix in the repo.
-    Extract .ks files from rpm packages
-
-    Args:
-        repo_dir (str): top level directory of rpm repo
-        prefix (str): prefix for rpm packages to find
-    Generates:
-        tuple (name, content) for found .ks files
-    """
-    for rpm in find_files(repo_dir, prefix=prefix, suffix='noarch.rpm'):
-        for name, content in extract_ks(rpm):
-            yield name, content
-
 
 def main(name, action):
     """Script entry point.