"""Local error exception."""
pass
-def update_ks(imagedata, snapshot_id, pkg_urls):
+def update_ks(imagedata, snapshot_id, pkg_urls, repo_name):
"""
update the repo url point to right URL and add prerelease repo
url with highest priority
return images_ks
def trigger_image_creation(images_ks, build_id, path_repo,
- project, url_pub_base):
+ project, url_pub_base, repo_name):
"""
trigger_image_creation:
Prepare the data and trigger the image_creation jobs
data = {'name': name,
'kickstart': kickstart,
'buildid': build_id,
- 'images_path': os.path.join("images", name),
+ 'images_path': os.path.join("images", repo_name, name),
'project': project,
'repo_path': path_repo,
+ 'repo': repo_name,
'url_pub_base': url_pub_base
}
- trigger_next('%s/image_trigger_%s' % (os.getenv('WORKSPACE'), index),
+ trigger_next('%s/image_trigger_%s_%s' % (os.getenv('WORKSPACE'), repo_name, index),
data)
def make_repo(project, repo, backenddb, base_url, base_path, live_repo_base):
target_project, tstamp = get_info_from_prerelease_project_name(project)
try:
- snapshot = Snapshot(backenddb, base_path, obs_project=target_project,
- obs_repo=repo)
+ snapshot = Snapshot(backenddb, base_path, obs_project=target_project)
except SnapshotError, err:
raise LocalError("Error getting snapshot info: %s" % str(err))
raise LocalError("Error getting prerelease info: %s" % str(err))
# Convert live repo to download structure
- repomaker = RepoMaker(prerelease.build_id,
- os.path.join(prerelease.path, prerelease.build_id))
live_repo_path = os.path.join(live_repo_base,
project.replace(':', ':/'))
+ targets = snapshot.targets
+
+ for repo in targets:
+ repomaker = RepoMaker(prerelease.build_id, os.path.join(prerelease.path,
+ prerelease.build_id))
+ try:
+ repomaker.add_repo(live_repo_path, repo['Name'], repo['Architectures'], move=False)
+ except RepoMakerError, err:
+ raise LocalError("Unable to create download repo: %s" % err)
+
+ # Assuming that there can be just one image-configurations- rpm in the repo
+ if not repomaker.has_images():
+ # repomaker did not found image-configurations in pre_release repo,
+ # let's take it from target repo, only one package repo is enough
+
+ # Add image configuration to prerelease repo
+ for rpm in find_files(os.path.join(snapshot.path, 'repos', repo['Name']),
+ prefix="image-configurations-",
+ suffix='noarch.rpm'):
+ repomaker.load_imagedata(repo['Name'], rpm)
+
+ if not repomaker.has_images():
+ raise LocalError("Image configuration not found in %s" % snapshot.path)
+
+ # Update ks files
+ images_ks = update_ks(repomaker.imagedata, snapshot.build_id,
+ prerelease.pkg_urls(repo['Name']), repo['Name'])
+
+ # Generate image info to builddata/ dir
+ repomaker.gen_image_info(images_ks)
+
+ # trigger image creation jobs
+ trigger_image_creation(images_ks, prerelease.build_id,
+ os.path.join(prerelease.dir, prerelease.build_id),
+ project, base_url, repo['Name'])
+
- try:
- repomaker.add_repo(live_repo_path, repo, snapshot.archs, move=False)
- except RepoMakerError, err:
- raise LocalError("Unable to create download repo: %s" % err)
-
- # Assuming that there can be just one image-configurations- rpm in the repo
- if not repomaker.has_images():
- # repomaker did not found image-configurations in pre_release repo,
- # let's take it from target repo, only one package repo is enough
-
- # Add image configuration to prerelease repo
- for rpm in find_files(snapshot.path,
- prefix="image-configurations-",
- suffix='noarch.rpm'):
- repomaker.load_imagedata(rpm)
-
- if not repomaker.has_images():
- raise LocalError("Image configuration not found in %s" % snapshot.path)
-
- # Update ks files
- images_ks = update_ks(repomaker.imagedata, snapshot.build_id,
- prerelease.pkg_urls)
- # Generate image info to builddata/ dir
- repomaker.gen_image_info(images_ks)
-
- # trigger image creation jobs
- trigger_image_creation(images_ks, prerelease.build_id,
- os.path.join(prerelease.dir, prerelease.build_id),
- project, base_url)
def get_published_repos(repo_path_base, time_stamp):
""" Search publised repository recursively
# Delete the prerelease project
build.cleanup(prerelease_project_name, "Cleaned up by backend automaticly")
- # We don't have project repo names. Let's try to find them.
- for repomap in backenddb.get_obs_repo_map():
- # if it starts from target_project it may be it
- prefix = '%s:' % target_project
- if not repomap.startswith(prefix):
- continue
- obs_repo = repomap.split(prefix)[-1]
-
- # Avoid false positives caused by cases 'IVI' and 'IVI:Release'
- # repo name should not contain colons
- if ':' in obs_repo:
- continue
-
- # Get prerelease data from db
- try:
- snapshot = Snapshot(backenddb, base_path,
- obs_project=target_project, obs_repo=obs_repo)
- prerelease = snapshot.get_prerelease(base_url, time_stamp)
- except SnapshotError, err:
- raise LocalError("Error getting prerelease data: %s" % str(err))
+ # Get prerelease data from db
+ try:
+ snapshot = Snapshot(backenddb, base_path, obs_project=target_project)
+ prerelease = snapshot.get_prerelease(base_url, time_stamp)
+ except SnapshotError, err:
+ raise LocalError("Error getting prerelease data: %s" % str(err))
- # remove latest snapshot from prerelease_path as we need to clean up
- # published repos from old snapshots too
- root = prerelease.path.split(prerelease.snapshot)[0]
+ # remove latest snapshot from prerelease_path as we need to clean up
+ # published repos from old snapshots too
+ root = prerelease.path.split(prerelease.snapshot.build_id)[0]
- for path in get_published_repos(root, time_stamp):
- print 'Removing the repo: %s' % path
- shutil.rmtree(path)
+ for path in get_published_repos(root, time_stamp):
+ print 'Removing the repo: %s' % path
+ shutil.rmtree(path)
def main(action):
"""Script entry point.
# them not published
repo_status = build.get_repo_state(project)
for target_arch, status in repo_status.items():
- if target_arch.split('/')[0] == repo and status != 'published':
+ if status != 'published':
print "Skipping prerelease repository creation as OBS "\
"repository: %s/%s/%s is't published yet." \
% (project, repo, target_arch)