Add build profiles to build.py

Add ability to define "profiles" in kolla-build.conf, which are
predefined sets of images to build at once.

The supplied profiles match what Steven defined in the
restructure-template bp, though others can easily be added by the user.

Multiple profiles can be supplied at once, as well as supplemented by
the existing regex mechanism, e.g. to build profiles infra, main, and
also ironic, one can use:

tools/build.py --profile infra --profile main ironic

Change-Id: I0c6f450152cb23dcfc58e0969669fcedf03fab01
Implements: bp restructure-template
Doc-Impact
This commit is contained in:
Paul Bourke 2015-10-13 15:12:52 +00:00
parent 42b34bb782
commit 592b3bd066
2 changed files with 39 additions and 3 deletions

View File

@ -36,15 +36,23 @@
# Turn on debugging log level # Turn on debugging log level
#debug = False #debug = False
# Path to custome file to be addded at beginning of base Dockerfile # Path to custom file to be addded at beginning of base Dockerfile
#include_header = /path/to/header_file #include_header = /path/to/header_file
# Path to custome file to be addded at end of Dockerfiles for final images # Path to custom file to be addded at end of Dockerfiles for final images
#include_footer = /path/to/footer_file #include_footer = /path/to/footer_file
# The registry host. The default registry host is Docker Hub. # The registry host. The default registry host is Docker Hub.
#registry = None #registry = None
# Preset build profiles can be set here to easily build common sets of images
[profiles]
infra = ceph,data,mariadb,haproxy,keepalived,kolla-ansible,memcached,mongodb,openvswitch,rabbitmq
main = cinder,ceilometer,glance,heat,horizon,keystone,neutron,nova,swift
aux = designate,gnocchi,ironic,magnum,zaqar
default = data,kolla-ansible,glance,haproxy,heat,horizon,keystone,memcached,mariadb,neutron,nova,rabbitmq
# Provide location of sources for source install builds. # Provide location of sources for source install builds.
# Example: # Example:
# #

View File

@ -289,6 +289,14 @@ def merge_args_and_config(settings_from_config_file):
parser.add_argument('--registry', parser.add_argument('--registry',
help=("the docker registry host"), help=("the docker registry host"),
type=str) type=str)
parser.add_argument('-p', '--profile',
help=('Build a pre-defined set of images, see '
'[profiles] section in '
'{}'.format(
find_config_file('kolla-build.conf'))),
type=str,
action='append')
return vars(parser.parse_args()) return vars(parser.parse_args())
@ -323,6 +331,7 @@ class KollaWorker(object):
self.include_header = config['include_header'] self.include_header = config['include_header']
self.include_footer = config['include_footer'] self.include_footer = config['include_footer']
self.regex = config['regex'] self.regex = config['regex']
self.profile = config['profile']
self.source_location = ConfigParser.SafeConfigParser() self.source_location = ConfigParser.SafeConfigParser()
self.source_location.read(find_config_file('kolla-build.conf')) self.source_location.read(find_config_file('kolla-build.conf'))
self.image_statuses_bad = dict() self.image_statuses_bad = dict()
@ -387,8 +396,27 @@ class KollaWorker(object):
def filter_images(self): def filter_images(self):
"""Filter which images to build""" """Filter which images to build"""
filter_ = list()
if self.regex: if self.regex:
patterns = re.compile(r"|".join(self.regex).join('()')) filter_ += self.regex
if self.profile:
for profile in self.profile:
try:
filter_ += self.source_location.get('profiles',
profile
).split(',')
except ConfigParser.NoSectionError:
LOG.error('No [profiles] section found in {}'.format(
find_config_file('kolla-build.conf')))
except ConfigParser.NoOptionError:
LOG.error('No profile named "{}" found in {}'.format(
self.profile,
find_config_file('kolla-build.conf')))
if filter_:
patterns = re.compile(r"|".join(filter_).join('()'))
for image in self.images: for image in self.images:
if image['status'] == 'matched': if image['status'] == 'matched':
continue continue