Add a "registry" option group
This commit adds a new oslo.config option group: "registry". Before this patch the Docker registry was specified using the --builder-registry option. This poses a UX problem as setting --builder-registry was also necessary when deploying. This commit fixes that problem by adding a new oslo.config option group: "registry". This group includes all the registry-related options: "address", "insecure", "username" and "password". The commit also fixes a bug where _get_image_name (in templates.py) did not return the proper image name when no registry was used. CLI option changes: * --builder-registry replaced by --registry-address * --builder-insecure-registry replaced by --registry-insecure * --auth-registry-username replaced by --registry-username * --auth-registry-password replaced by --registry-password * --auth-registry removed (auth is enabled if both --registry-username and --registry-password are set) Change-Id: Ifc2ec93bb21934464451a260dc634a01ddec66cb
This commit is contained in:
@@ -18,6 +18,7 @@ CONF = cfg.CONF
|
||||
CONF.import_group('builder', 'microservices.config.builder')
|
||||
CONF.import_group('images', 'microservices.config.images')
|
||||
CONF.import_group('repositories', 'microservices.config.repositories')
|
||||
CONF.import_group('registry', 'microservices.config.registry')
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
@@ -48,8 +49,8 @@ def find_dockerfiles(repository_name, tmp_dir, match=True):
|
||||
repository_dir = os.path.join(CONF.repositories.path, repository_name)
|
||||
|
||||
namespace = CONF.images.namespace
|
||||
if CONF.builder.push:
|
||||
namespace = '%s/%s' % (CONF.builder.registry, namespace)
|
||||
if CONF.builder.push and CONF.registry.address:
|
||||
namespace = '%s/%s' % (CONF.registry.address, namespace)
|
||||
|
||||
for root, __, files in os.walk(repository_dir):
|
||||
if 'Dockerfile.j2' in files:
|
||||
@@ -127,13 +128,13 @@ def build_dockerfile(dc, dockerfile):
|
||||
|
||||
|
||||
def push_dockerfile(dc, dockerfile):
|
||||
if CONF.auth.registry:
|
||||
dc.login(username=CONF.auth.registry_username,
|
||||
password=CONF.auth.registry_password,
|
||||
registry=CONF.builder.registry)
|
||||
if CONF.registry.username and CONF.registry.password:
|
||||
dc.login(username=CONF.registry.username,
|
||||
password=CONF.registry.password,
|
||||
registry=CONF.registry.address)
|
||||
for line in dc.push(dockerfile['full_name'],
|
||||
stream=True,
|
||||
insecure_registry=CONF.builder.insecure_registry):
|
||||
insecure_registry=CONF.registry.insecure):
|
||||
build_data = json.loads(line)
|
||||
if 'stream' in build_data:
|
||||
LOG.info('%s: %s', dockerfile['name'],
|
||||
@@ -142,13 +143,13 @@ def push_dockerfile(dc, dockerfile):
|
||||
LOG.error('%s: %s', dockerfile['name'],
|
||||
build_data['errorDetail']['message'])
|
||||
LOG.info("%s - Push into %s registry finished", dockerfile['name'],
|
||||
CONF.builder.registry)
|
||||
CONF.registry.address)
|
||||
|
||||
|
||||
def process_dockerfile(dockerfile, executor, future_list, ready_images):
|
||||
with contextlib.closing(docker.Client()) as dc:
|
||||
build_dockerfile(dc, dockerfile)
|
||||
if CONF.builder.push:
|
||||
if CONF.builder.push and CONF.registry.address:
|
||||
push_dockerfile(dc, dockerfile)
|
||||
|
||||
for child in dockerfile['children']:
|
||||
|
||||
@@ -9,11 +9,14 @@ from microservices import fetch
|
||||
|
||||
|
||||
CONF = cfg.CONF
|
||||
CONF.import_group('registry', 'microservices.config.registry')
|
||||
CONF.import_group('repositories', 'microservices.config.repositories')
|
||||
CONF.import_opt('action', 'microservices.config.cli')
|
||||
|
||||
|
||||
def do_build():
|
||||
if CONF.builder.push and not CONF.registry.address:
|
||||
raise RuntimeError('No registry specified, cannot push')
|
||||
if CONF.repositories.clone:
|
||||
do_fetch()
|
||||
build.build_components(components=CONF.action.components)
|
||||
|
||||
@@ -7,6 +7,7 @@ from oslo_config import cfg
|
||||
CONF = cfg.CONF
|
||||
CONF.import_group('builder', 'microservices.config.builder')
|
||||
CONF.import_group('images', 'microservices.config.images')
|
||||
CONF.import_group('registry', 'microservices.config.registry')
|
||||
|
||||
|
||||
def str_to_bool(text):
|
||||
@@ -15,9 +16,6 @@ def str_to_bool(text):
|
||||
|
||||
def jinja_render(path):
|
||||
variables = {k: v for k, v in CONF.images.items()}
|
||||
if CONF.builder.push:
|
||||
variables['namespace'] = '%s/%s' % (CONF.builder.registry,
|
||||
variables['namespace'])
|
||||
|
||||
env = jinja2.Environment(loader=jinja2.FileSystemLoader(
|
||||
os.path.dirname(path)))
|
||||
|
||||
@@ -8,15 +8,6 @@ CONF = cfg.CONF
|
||||
auth_opts = [
|
||||
cfg.StrOpt('gerrit-username',
|
||||
default=getpass.getuser()),
|
||||
cfg.BoolOpt('registry',
|
||||
default=False,
|
||||
help='Login to the Docker registry by user/pass'),
|
||||
cfg.StrOpt('registry-username',
|
||||
default='',
|
||||
help='Username for Docker registry'),
|
||||
cfg.StrOpt('registry-password',
|
||||
default='',
|
||||
help='Password for Docker registry')
|
||||
]
|
||||
auth_opt_group = cfg.OptGroup(name='auth',
|
||||
title='Authentication data')
|
||||
|
||||
@@ -22,13 +22,7 @@ builder_opts = [
|
||||
help='Push to the Docker registry'),
|
||||
cfg.BoolOpt('no-cache',
|
||||
default=False,
|
||||
help='Dont use docker cache'),
|
||||
cfg.StrOpt('registry',
|
||||
default='127.0.0.1:5000',
|
||||
help='Docker registry address (host:port)'),
|
||||
cfg.BoolOpt('insecure-registry',
|
||||
default=False,
|
||||
help='Permit to push without SSL')
|
||||
help='Dont use docker cache')
|
||||
]
|
||||
builder_opt_group = cfg.OptGroup(name='builder',
|
||||
title='Images builder')
|
||||
|
||||
23
microservices/config/registry.py
Normal file
23
microservices/config/registry.py
Normal file
@@ -0,0 +1,23 @@
|
||||
from oslo_config import cfg
|
||||
|
||||
CONF = cfg.CONF
|
||||
|
||||
registry_opts = [
|
||||
cfg.StrOpt('address',
|
||||
default='',
|
||||
help='Docker registry address (host:port)'),
|
||||
cfg.BoolOpt('insecure',
|
||||
default=False,
|
||||
help='Permit registry access without SSL'),
|
||||
cfg.StrOpt('username',
|
||||
default='',
|
||||
help='Username for Docker registry'),
|
||||
cfg.StrOpt('password',
|
||||
default='',
|
||||
help='Password for Docker registry')
|
||||
]
|
||||
registry_opt_group = cfg.OptGroup(name='registry',
|
||||
title='Docker registry data')
|
||||
CONF.register_group(registry_opt_group)
|
||||
CONF.register_cli_opts(registry_opts, registry_opt_group)
|
||||
CONF.register_opts(registry_opts, registry_opt_group)
|
||||
@@ -6,6 +6,8 @@ from microservices import utils
|
||||
|
||||
|
||||
CONF = cfg.CONF
|
||||
CONF.import_group('images', 'microservices.config.images')
|
||||
CONF.import_group('registry', 'microservices.config.registry')
|
||||
|
||||
FILES_VOLUME = "files-volume"
|
||||
GLOBAL_VOLUME = "global-volume"
|
||||
@@ -14,8 +16,11 @@ SCRIPT_VOLUME = "script-volume"
|
||||
|
||||
|
||||
def _get_image_name(image_name):
|
||||
return "%s/%s/%s:%s" % (CONF.builder.registry, CONF.images.namespace,
|
||||
image_name, CONF.images.tag)
|
||||
image_name = "%s/%s:%s" % (CONF.images.namespace, image_name,
|
||||
CONF.images.tag)
|
||||
if CONF.registry.address:
|
||||
image_name = "%s/%s" % (CONF.registry.address, image_name)
|
||||
return image_name
|
||||
|
||||
|
||||
def _get_start_cmd(cmd_name):
|
||||
|
||||
Reference in New Issue
Block a user