diff options
author | Tim Rozet <trozet@redhat.com> | 2017-09-12 17:32:56 -0400 |
---|---|---|
committer | Tim Rozet <trozet@redhat.com> | 2017-11-06 04:35:02 +0000 |
commit | b3c610b205f88dddb02cdac39638c52eafaaf82c (patch) | |
tree | 4826027e2d968e61c8024d972f3665ff3a8a09d7 /apex/builders/common_builder.py | |
parent | 3c7556eb0734706f28588fb952eedea2d424c6d2 (diff) |
Adds ability to deploy from upstream openstack
To deploy with upstream openstack branch, use new deploy setting 'os_version'.
A default scenario file for nosdn with pike has been included in this patch.
If 'os_version' is a version other than the default version for this OPNFV
release, then upstream is used.
In order to use upstream with the current OS version use '--upstream'
argument to the deploy command, to force an upstream deployment.
Also include '-e upstream-environment.yaml' to use default upstream
deployment settings.
Supports nosdn and odl-nofeature deployments.
Change-Id: Ic07e308827b449637b4e86cdd086434e4de2fb69
Signed-off-by: Tim Rozet <trozet@redhat.com>
Diffstat (limited to 'apex/builders/common_builder.py')
-rw-r--r-- | apex/builders/common_builder.py | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/apex/builders/common_builder.py b/apex/builders/common_builder.py new file mode 100644 index 00000000..101860cd --- /dev/null +++ b/apex/builders/common_builder.py @@ -0,0 +1,111 @@ +############################################################################## +# Copyright (c) 2017 Tim Rozet (trozet@redhat.com) and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +# Common building utilities for undercloud and overcloud + +import git +import logging +import os + +from apex import build_utils +from apex.common import constants as con +from apex.virtual import utils as virt_utils + + +def project_to_path(project): + """ + Translates project to absolute file path + :param project: name of project + :return: File path + """ + if project.startswith('openstack/'): + project = os.path.basename(project) + if 'puppet' in project: + return "/etc/puppet/modules/{}".format(project.replace('puppet-', '')) + elif 'tripleo-heat-templates' in project: + return "/usr/share/openstack-tripleo-heat-templates" + else: + # assume python + return "/usr/lib/python2.7/site-packages/{}".format(project) + + +def add_upstream_patches(patches, image, tmp_dir, + default_branch=os.path.join('stable', + con.DEFAULT_OS_VERSION)): + """ + Adds patches from upstream OpenStack gerrit to Undercloud for deployment + :param patches: list of patches + :param image: undercloud image + :param tmp_dir: to store temporary patch files + :param default_branch: default branch to fetch commit (if not specified + in patch) + :return: None + """ + virt_ops = list() + logging.debug("Evaluating upstream patches:\n{}".format(patches)) + for patch in patches: + assert isinstance(patch, dict) + assert all(i in patch.keys() for i in ['project', 'change-id']) + if 'branch' in patch.keys(): + branch = patch['branch'] + else: + branch = default_branch + patch_diff = build_utils.get_patch(patch['change-id'], + patch['project'], branch) + if patch_diff: + patch_file = "{}.patch".format(patch['change-id']) + patch_file_path = os.path.join(tmp_dir, patch_file) + with open(patch_file_path, 'w') as fh: + fh.write(patch_diff) + project_path = project_to_path(patch['project']) + virt_ops.extend([ + {con.VIRT_UPLOAD: "{}:{}".format(patch_file_path, + project_path)}, + {con.VIRT_RUN_CMD: "cd {} && patch -p1 < {}".format( + project_path, patch_file)}]) + logging.info("Adding patch {} to {}".format(patch_file, + image)) + else: + logging.info("Ignoring patch:\n{}".format(patch)) + if virt_ops: + virt_utils.virt_customize(virt_ops, image) + + +def add_repo(repo_url, repo_name, image, tmp_dir): + assert repo_name is not None + assert repo_url is not None + repo_file = "{}.repo".format(repo_name) + repo_file_path = os.path.join(tmp_dir, repo_file) + content = [ + "[{}]".format(repo_name), + "name={}".format(repo_name), + "baseurl={}".format(repo_url), + "gpgcheck=0" + ] + logging.debug("Creating repo file {}".format(repo_name)) + with open(repo_file_path, 'w') as fh: + fh.writelines("{}\n".format(line) for line in content) + logging.debug("Adding repo {} to {}".format(repo_file, image)) + virt_utils.virt_customize([ + {con.VIRT_UPLOAD: "{}:/etc/yum.repos.d/".format(repo_file_path)}], + image + ) + + +def create_git_archive(repo_url, repo_name, tmp_dir, + branch='master', prefix=''): + repo = git.Repo.clone_from(repo_url, os.path.join(tmp_dir, repo_name)) + repo_git = repo.git + if branch != str(repo.active_branch): + repo_git.checkout("origin/{}".format(branch)) + archive_path = os.path.join(tmp_dir, "{}.tar".format(repo_name)) + with open(archive_path, 'wb') as fh: + repo.archive(fh, prefix=prefix) + logging.debug("Wrote archive file: {}".format(archive_path)) + return archive_path |