summaryrefslogtreecommitdiff
path: root/tools/build.py
diff options
context:
space:
mode:
authorakwasniewska <alicja.kwasniewska@intel.com>2015-08-07 04:36:20 +0200
committerSam Yaple <sam@yaple.net>2015-08-11 05:56:15 +0000
commit310627890cfe64e2192e225d54d19e80a8fdcc84 (patch)
treeb91ec7509e878b1af97d4a55e887e9e2c5b585ad /tools/build.py
parent88b6f97cd05dceb817978f6bb44d528cd39d31a9 (diff)
downloadkolla-310627890cfe64e2192e225d54d19e80a8fdcc84.tar.gz
kolla-310627890cfe64e2192e225d54d19e80a8fdcc84.zip
Added initial template for base image
Added new method generating Dockerfiles from templates as well as the appropriate code to support this in build.py Co-Authored-By: Sam Yaple <sam@yaple.net> Partially-implements: bp dockerfile-template Change-Id: Id14d10d31cb4aac957e04fbc129de4043d98e033
Diffstat (limited to 'tools/build.py')
-rwxr-xr-xtools/build.py44
1 files changed, 40 insertions, 4 deletions
diff --git a/tools/build.py b/tools/build.py
index ac471960b..a2959fe30 100755
--- a/tools/build.py
+++ b/tools/build.py
@@ -33,6 +33,7 @@ import time
import traceback
import docker
+import jinja2
class WorkerThread(Thread):
@@ -102,6 +103,10 @@ def argParser():
help='The base distro to use when building',
type=str,
default='centos')
+ parser.add_argument('--base-tag',
+ help='The base distro image tag',
+ type=str,
+ default='latest')
parser.add_argument('-t', '--type',
help='The method of the Openstack install',
type=str,
@@ -122,6 +127,10 @@ def argParser():
help='The number of threads to use while building',
type=int,
default=8)
+ parser.add_argument('--template',
+ help='Create dockerfiles from templates',
+ action='store_true',
+ default=False)
return vars(parser.parse_args())
@@ -130,9 +139,11 @@ class KollaWorker(object):
def __init__(self, args):
self.kolla_dir = os.path.join(sys.path[0], '..')
self.images_dir = os.path.join(self.kolla_dir, 'docker')
-
+ self.templates_dir = os.path.join(self.kolla_dir, 'docker_templates')
self.namespace = args['namespace']
+ self.template = args['template']
self.base = args['base']
+ self.base_tag = args['base_tag']
self.type_ = args['type']
self.tag = args['tag']
self.prefix = self.base + '-' + self.type_ + '-'
@@ -143,15 +154,36 @@ class KollaWorker(object):
ts = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d_%H-%M-%S_')
self.temp_dir = tempfile.mkdtemp(prefix='kolla-' + ts)
self.working_dir = os.path.join(self.temp_dir, 'docker')
- shutil.copytree(self.images_dir, self.working_dir)
+ if self.template:
+ shutil.copytree(self.templates_dir, self.working_dir)
+ else:
+ shutil.copytree(self.images_dir, self.working_dir)
+
+ def createDockerfiles(self):
+ for path in self.docker_build_paths:
+ template_name = "Dockerfile.j2"
+ env = jinja2.Environment(loader=jinja2.FileSystemLoader(path))
+ template = env.get_template(template_name)
+ values = {'base_distro': self.base,
+ 'base_distro_tag': self.base_tag,
+ 'install_type': self.type_}
+ content = template.render(values)
+ with open(os.path.join(path, 'Dockerfile'), 'w') as f:
+ f.write(content)
def findDockerfiles(self):
"""Recursive search for Dockerfiles in the working directory"""
self.docker_build_paths = list()
- path = os.path.join(self.working_dir, self.base, self.type_)
+
+ if self.template:
+ path = self.working_dir
+ filename = 'Dockerfile.j2'
+ else:
+ path = os.path.join(self.working_dir, self.base, self.type_)
+ filename = 'Dockerfile'
for root, dirs, names in os.walk(path):
- if 'Dockerfile' in names:
+ if filename in names:
self.docker_build_paths.append(root)
def cleanup(self):
@@ -276,6 +308,10 @@ def main():
kolla = KollaWorker(args)
kolla.setupWorkingDir()
kolla.findDockerfiles()
+
+ if args['template']:
+ kolla.createDockerfiles()
+
pools = kolla.buildQueues()
# Returns a list of Queues for us to loop through