
This changeset contains the following, (1) NFP controller image builder tool This supports both devstack and Redhat RPM installations. (2) NFP setup script to configure the NFP on RPM installed setup. Change-Id: I074d713ad94286240fdae1887b0d4acd28f66144 Implements: blueprint gbp-network-services-framework
148 lines
4.7 KiB
Python
148 lines
4.7 KiB
Python
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
import datetime
|
|
from oslo_serialization import jsonutils
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
|
|
|
|
conf = {}
|
|
cur_dir = ''
|
|
docker_build_dir = None
|
|
|
|
|
|
def parse_json(j_file):
|
|
global conf
|
|
|
|
with open(j_file) as json_data:
|
|
conf = jsonutils.load(json_data)
|
|
return
|
|
|
|
|
|
def create_configurator_docker():
|
|
|
|
docker_images = cur_dir + '/docker-images/'
|
|
docker_images = os.path.realpath(docker_images)
|
|
|
|
# create a docker image
|
|
os.chdir(docker_build_dir)
|
|
# build configuratro docker
|
|
docker_args = ['docker', 'build', '-t', 'configurator-docker', '.']
|
|
ret = subprocess.call(docker_args)
|
|
if(ret):
|
|
print("Failed to build docker image [configurator-docker]")
|
|
return -1
|
|
|
|
if not os.path.isdir(docker_images):
|
|
os.mkdir(docker_images)
|
|
|
|
os.chdir(docker_images)
|
|
del(docker_args)
|
|
# save the docker image
|
|
docker_args = ['docker', 'save', '-o', 'configurator-docker',
|
|
'configurator-docker']
|
|
ret = subprocess.call(docker_args)
|
|
if(ret):
|
|
print("Failed to save docker image [configurator-docker]")
|
|
return -1
|
|
# set environment variable, needed by 'extra-data.d'
|
|
os.environ['DOCKER_IMAGES'] = docker_images
|
|
|
|
return 0
|
|
|
|
|
|
def dib():
|
|
|
|
global docker_build_dir
|
|
|
|
dib = conf['dib']
|
|
elems = cur_dir + '/elements/'
|
|
|
|
# set the elements path in environment variable
|
|
os.environ['ELEMENTS_PATH'] = elems
|
|
# set the Ubuntu Release for the build in environment variable
|
|
os.environ['DIB_RELEASE'] = conf['ubuntu_release']['release']
|
|
|
|
# basic elements
|
|
dib_args = ['disk-image-create', 'base', 'vm', 'ubuntu']
|
|
image_name = conf['ubuntu_release']['release']
|
|
|
|
# element for creating configurator image
|
|
if 'nfp-reference-configurator' in dib['elements']:
|
|
image_name = 'nfp_reference_service'
|
|
service_dir = "%s/../../../../tests/contrib/nfp_service/" % cur_dir
|
|
service_dir = os.path.realpath(service_dir)
|
|
pecan_dir = "%s/../../../../nfp/" % cur_dir
|
|
pecan_dir = os.path.realpath(pecan_dir)
|
|
os.environ['PECAN_GIT_PATH'] = pecan_dir
|
|
os.environ['SERVICE_GIT_PATH'] = service_dir
|
|
if 'devuser' in dib['elements']:
|
|
os.environ['DIB_DEV_USER_USERNAME'] = 'ubuntu'
|
|
os.environ['DIB_DEV_USER_SHELL'] = '/bin/bash'
|
|
os.environ['SSH_RSS_KEY'] = (
|
|
"%s/%s" % (cur_dir, image_name))
|
|
os.environ['DIB_DEV_USER_AUTHORIZED_KEYS'] = (
|
|
"%s.pub" % os.environ['SSH_RSS_KEY'])
|
|
elif 'configurator' in dib['elements']:
|
|
if not docker_build_dir:
|
|
docker_build_dir = cur_dir
|
|
if(create_configurator_docker()):
|
|
return (False, None)
|
|
# for bigger size images
|
|
if "--no-tmpfs" not in dib_args:
|
|
dib_args.append('--no-tmpfs')
|
|
# append docker-opt element
|
|
if "docker-opt" not in dib_args:
|
|
dib_args.append("docker-opt")
|
|
|
|
for element in dib['elements']:
|
|
image_name = image_name + '_' + element
|
|
dib_args.append(element)
|
|
|
|
# offline mode, assuming the image cache (tar) already exists
|
|
if(dib['offline']):
|
|
dib_args.append('--offline')
|
|
# set the image build cache dir
|
|
dib_args.append('--image-cache')
|
|
dib_args.append(dib['cache_dir'])
|
|
# set image size
|
|
dib_args.append('--image-size')
|
|
dib_args.append(str(dib['image_size']))
|
|
timestamp = datetime.datetime.now().strftime('%I%M%p-%d-%m-%Y')
|
|
image_name = image_name + '_' + timestamp
|
|
dib_args.append('-o')
|
|
if 'nfp-reference-configurator' in dib['elements']:
|
|
image_name = 'nfp_reference_service'
|
|
dib_args.append(str(image_name))
|
|
|
|
os.chdir(cur_dir)
|
|
out_dir = 'output'
|
|
if not os.path.isdir(out_dir):
|
|
os.makedirs(out_dir)
|
|
os.chdir(out_dir)
|
|
print("DIB-ARGS: ", dib_args)
|
|
ret = subprocess.call(dib_args)
|
|
if not ret:
|
|
output_path = os.path.realpath('./')
|
|
print("Output path: ", output_path)
|
|
output_image = output_path + '/' + image_name + '.qcow2'
|
|
|
|
print("Image location: %s" % output_image)
|
|
with open("%s/last_built_image_path" % output_path, "w") as f:
|
|
f.write(output_image)
|
|
|
|
return (True, output_image)
|
|
|
|
return (False, None)
|