Enable SFC scenarios for Gambia
[apex.git] / apex / builders / overcloud_builder.py
index b855645..a74ec25 100644 (file)
@@ -87,6 +87,43 @@ def inject_quagga(image, tmp_dir):
     logging.info("Quagga injected into {}".format(image))
 
 
+def inject_ovs_nsh(image, tmp_dir):
+    """
+    Downloads OpenVswitch, compiles it and installs it on the
+    overcloud image on the fly.
+    :param image:
+    :param tmp_dir:
+    :return:
+    """
+    ovs_filename = os.path.basename(con.OVS_URL)
+    ovs_folder = ovs_filename.replace(".tar.gz", "")
+    utils.fetch_upstream_and_unpack(tmp_dir,
+                                    os.path.split(con.OVS_URL)[0] + "/",
+                                    [ovs_filename])
+    (ovs_dist_name, ovs_version) = ovs_folder.split("-")
+
+    virt_ops = [
+        {con.VIRT_UPLOAD: "{}:/root/".format(tmp_dir + "/" + ovs_filename)},
+        {con.VIRT_INSTALL: "rpm-build,autoconf,automake,libtool,openssl,"
+         "openssl-devel,python,python-twisted-core,python-six,groff,graphviz,"
+         "python-zope-interface,desktop-file-utils,procps-ng,PyQt4,"
+         "libcap-ng,libcap-ng-devel,selinux-policy-devel,kernel-devel,"
+         "kernel-headers,kernel-tools,rpmdevtools,systemd-units,python-devel,"
+         "python-sphinx"},
+        {con.VIRT_RUN_CMD: "cd /root/ && tar xzf {}".format(ovs_filename)},
+        {con.VIRT_UPLOAD:
+         "{}/build_ovs_nsh.sh:/root/{}".format(tmp_dir, ovs_folder)},
+        {con.VIRT_RUN_CMD:
+         "cd /root/{0} && chmod -R 777 * && chown -R root:root * && "
+         "./build_ovs_nsh.sh && rpm -Uhv --force rpm/rpmbuild/RPMS/x86_64/{0}"
+         "-1.el7.x86_64.rpm && rpm -Uhv --force rpm/rpmbuild/RPMS/x86_64"
+         "/openvswitch-kmod-{1}-1.el7.x86_64.rpm".format(ovs_folder,
+                                                         ovs_version)}
+    ]
+    virt_utils.virt_customize(virt_ops, image)
+    logging.info("OVS injected into {}".format(image))
+
+
 def build_dockerfile(service, tmp_dir, docker_cmds, src_image_uri):
     """
     Builds docker file per service and stores it in a