X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=apex%2Fbuilders%2Fundercloud_builder.py;h=47d2568dac1acc187bcd6baf7e69ba4502c481de;hb=e4b1cd108f74e2cd76caf6736632d597f7436a4e;hp=f82e79d19212a10da97e13248415da3f1f5ce0d8;hpb=8cc6ede48761ddd3bf9f9431da6de788454dd8b7;p=apex.git diff --git a/apex/builders/undercloud_builder.py b/apex/builders/undercloud_builder.py index f82e79d1..47d2568d 100644 --- a/apex/builders/undercloud_builder.py +++ b/apex/builders/undercloud_builder.py @@ -8,8 +8,13 @@ ############################################################################## # Used to modify undercloud qcow2 image +import logging +import json +import os +import subprocess from apex.common import constants as con +from apex.common import utils from apex.virtual import utils as virt_utils @@ -21,20 +26,82 @@ def add_upstream_packages(image): """ virt_ops = list() pkgs = [ + 'epel-release', 'openstack-utils', - 'ceph-common', 'python2-networking-sfc', 'openstack-ironic-inspector', 'subunit-filters', 'docker-distribution', 'openstack-tripleo-validations', 'libguestfs-tools', - 'ceph-ansible', - 'python-tripleoclient' + 'python-tripleoclient', + 'openstack-tripleo-heat-templates' ] + # Remove incompatible python-docker version + virt_ops.append({con.VIRT_RUN_CMD: "yum remove -y python-docker-py"}) for pkg in pkgs: virt_ops.append({con.VIRT_INSTALL: pkg}) virt_utils.virt_customize(virt_ops, image) + +def inject_calipso_installer(tmp_dir, image): + """ + Downloads calipso installer script from artifacts.opnfv.org + and puts it under /root/ for further installation process. + :return: + """ + calipso_file = os.path.basename(con.CALIPSO_INSTALLER_URL) + calipso_url = con.CALIPSO_INSTALLER_URL.replace(calipso_file, '') + utils.fetch_upstream_and_unpack(tmp_dir, calipso_url, [calipso_file]) + + virt_ops = [ + {con.VIRT_UPLOAD: "{}/{}:/root/".format(tmp_dir, calipso_file)}] + virt_utils.virt_customize(virt_ops, image) + logging.info("Calipso injected into {}".format(image)) + +# TODO(trozet): add unit testing for calipso injector # TODO(trozet): add rest of build for undercloud here as well + + +def update_repos(image, branch): + virt_ops = [ + {con.VIRT_RUN_CMD: "rm -f /etc/yum.repos.d/delorean*"}, + {con.VIRT_RUN_CMD: "yum-config-manager --add-repo " + "https://trunk.rdoproject.org/centos7/{}" + "/delorean.repo".format(con.RDO_TAG)}, + {con.VIRT_RUN_CMD: "yum clean all"}, + {con.VIRT_INSTALL: "python2-tripleo-repos"}, + {con.VIRT_RUN_CMD: "tripleo-repos -b {} {} ceph".format(branch, + con.RDO_TAG)} + ] + virt_utils.virt_customize(virt_ops, image) + + +def expand_disk(image, desired_size=50): + """ + Expands a disk image to desired_size in GigaBytes + :param image: image to resize + :param desired_size: desired size in GB + :return: None + """ + # there is a lib called vminspect which has some dependencies and is + # not yet available in pip. Consider switching to this lib later. + try: + img_out = json.loads(subprocess.check_output( + ['qemu-img', 'info', '--output=json', image], + stderr=subprocess.STDOUT).decode()) + disk_gb_size = int(img_out['virtual-size'] / 1000000000) + if disk_gb_size < desired_size: + logging.info("Expanding disk image: {}. Current size: {} is less" + "than require size: {}".format(image, disk_gb_size, + desired_size)) + diff_size = desired_size - disk_gb_size + subprocess.check_call(['qemu-img', 'resize', image, + "+{}G".format(diff_size)], + stderr=subprocess.STDOUT) + + except (subprocess.CalledProcessError, json.JSONDecodeError, KeyError) \ + as e: + logging.warning("Unable to resize disk, disk may not be large " + "enough: {}".format(e))