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 \
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):
"""
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
# 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
# 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.