Add Docker build file template
Add Docker build file template and a module to create customized build file. Change-Id: Ie67573797362befb3546f64788a790c9c4bd33aa
This commit is contained in:
parent
695ce75eeb
commit
3b734153b2
74
refstack/tools/docker_buildfile.py
Executable file
74
refstack/tools/docker_buildfile.py
Executable file
@ -0,0 +1,74 @@
|
||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
|
||||
# Copyright 2014 IBM Corp.
|
||||
#
|
||||
# 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.
|
||||
|
||||
from jinja2 import FileSystemLoader, Environment
|
||||
import os
|
||||
|
||||
|
||||
class DockerBuildFile(object):
|
||||
'''*
|
||||
Build a docker buildfile with customized parameters from a pre-defined
|
||||
docker build file template.
|
||||
'''
|
||||
|
||||
test_id = None
|
||||
api_server_address = None
|
||||
tempest_code_url = None
|
||||
confJSON = None
|
||||
|
||||
def build_docker_buildfile(self, output_file_with_path):
|
||||
|
||||
'''*
|
||||
Build a docker build file based on a pre-defined template.
|
||||
|
||||
This method assumes that the caller has already initialized all the
|
||||
needed parameters for customization.
|
||||
'''
|
||||
|
||||
docker_template_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
template_file_with_path = os.path.join(docker_template_dir,
|
||||
"docker_buildfile.template")
|
||||
|
||||
values = {"THE_TEST_ID": self.test_id,
|
||||
"THE_API_SERVER_ADDRESS": self.api_server_address,
|
||||
"THE_TEMPEST_CODE_URL": self.tempest_code_url,
|
||||
"THE_CONF_JSON": self.confJSON
|
||||
}
|
||||
|
||||
template_filling(template_file_with_path, output_file_with_path,
|
||||
values)
|
||||
|
||||
|
||||
def template_filling(template_file_with_path,
|
||||
output_file_with_path, value_dict):
|
||||
'''Filling values in a template file.'''
|
||||
|
||||
outputText = ""
|
||||
if os.path.isfile(template_file_with_path):
|
||||
input_dir = os.path.dirname(os.path.abspath(template_file_with_path))
|
||||
file_name = os.path.basename(template_file_with_path)
|
||||
|
||||
j2_env = Environment(loader=FileSystemLoader(input_dir),
|
||||
trim_blocks=True)
|
||||
template = j2_env.get_template(file_name)
|
||||
outputText = template.render(value_dict)
|
||||
|
||||
output_dir = os.path.dirname(os.path.abspath(output_file_with_path))
|
||||
if not os.path.exists(output_dir):
|
||||
os.makedirs(output_dir)
|
||||
|
||||
with open(output_file_with_path, "wt") as fout:
|
||||
fout.write(outputText)
|
39
refstack/tools/docker_buildfile.template
Executable file
39
refstack/tools/docker_buildfile.template
Executable file
@ -0,0 +1,39 @@
|
||||
FROM ubuntu
|
||||
RUN apt-get update
|
||||
|
||||
#Downloading tools
|
||||
RUN apt-get install -y git python-pip wget unzip
|
||||
|
||||
#Downloading dependencies
|
||||
RUN apt-get install -y libxml2-dev libxslt-dev lib32z1-dev python2.7-dev libssl-dev
|
||||
|
||||
#other dependencies
|
||||
RUN apt-get install -y python-dev libxslt1-dev libsasl2-dev libsqlite3-dev libldap2-dev libffi-dev
|
||||
RUN pip install ftp://xmlsoft.org/libxml2/python/libxml2-python-2.6.9.tar.gz
|
||||
|
||||
#Get tempest code
|
||||
#THE_TEMPEST_CODE_URL should be replaced with an appropriate address. For example:
|
||||
#replace THE_TEMPEST_CODE_URL with https://github.com/openstack/tempest/archive/stable/havana.zip
|
||||
RUN wget {{ THE_TEMPEST_CODE_URL }} -O tempest.zip
|
||||
RUN unzip tempest.zip
|
||||
RUN mv /tempest-stable* /tempest
|
||||
|
||||
#Tempest dependencies
|
||||
RUN pip install -r /tempest/requirements.txt
|
||||
RUN pip install -r /tempest/test-requirements.txt
|
||||
|
||||
#THE_API_SERVER_ADDRESS should be replaced with the real IP address of the RefStack engine (local or public).
|
||||
#The format of THE_API_SERVER_ADDRESS is x.x.x.x:port
|
||||
ENV API_SERVER_ADDRESS {{ THE_API_SERVER_ADDRESS }}
|
||||
|
||||
#THE_TEST_ID should be replaced with an unique ID associated with this test,
|
||||
#so that the following commands will always be executed.
|
||||
ENV TEST_ID {{ THE_TEST_ID }}
|
||||
|
||||
#Download the Python script to the container. This script will be used to prepare
|
||||
#the test environment, run tempest tests and upload the test results to RefStack.
|
||||
RUN wget http://${API_SERVER_ADDRESS}/get-script -O execute_test.py
|
||||
|
||||
# Run the script
|
||||
RUN python execute_test.py ${API_SERVER_ADDRESS} ${TEST_ID} '{{ THE_CONF_JSON }}'
|
||||
RUN echo "done"
|
Loading…
Reference in New Issue
Block a user