Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion doc/source/admin/image-building.rst
Original file line number Diff line number Diff line change
Expand Up @@ -615,7 +615,7 @@ First, create a ``Dockerfile.j2`` template for the project.
FROM {{ namespace }}/{{ image_prefix }}openstack-base:{{ tag }}

{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block releaser_header %}{% endblock %}
Expand Down
11 changes: 11 additions & 0 deletions doc/source/admin/kolla_api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,17 @@ The `kolla_set_configs`_ script understands the following attributes:
* **perm** (required): the unix permissions to set to the directory.
Must be passed in the numeric octal form.

* **files**: create empty files inside the container if they do not
exist, and set their ownership and permissions. A list of dicts, each
containing the following attributes:

* **path** (required): the path to the file to create. Parent directories
must already exist. Glob patterns are not supported.
* **owner** (required): the ``user:group`` to change ownership to. ``user``
is synonymous to ``user:user``. Must be user and group names, not uid/gid.
* **perm** (required): the unix permissions to set to the file.
Must be passed in the numeric octal form.

* **permissions**: change the permissions and/or ownership of files or
directories inside the container. A list of dicts, each containing the
following attributes:
Expand Down
2 changes: 1 addition & 1 deletion doc/source/contributor/adding-a-new-image.rst
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ OpenStack project base image is as follows:
FROM {{ namespace }}/{{ image_prefix }}openstack-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}
{% block << service >>_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/aodh/aodh-api/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}aodh-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block aodh_api_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/aodh/aodh-base/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}openstack-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block aodh_base_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/aodh/aodh-evaluator/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}aodh-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block aodh_evaluator_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/aodh/aodh-expirer/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}aodh-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block aodh_expirer_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/aodh/aodh-listener/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}aodh-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block aodh_listener_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/aodh/aodh-notifier/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}aodh-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block aodh_notifier_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/barbican/barbican-api/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}barbican-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block barbican_api_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/barbican/barbican-base/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}openstack-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block barbican_base_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/barbican/barbican-keystone-listener/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}barbican-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block barbican_keystone_listener_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/barbican/barbican-worker/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}barbican-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block barbican_worker_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/base/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ base_image }}:{{ base_distro_tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

RUN . /etc/os-release;\
Expand Down
68 changes: 57 additions & 11 deletions docker/base/set_configs.py
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ def check(self):

def validate_config(config):
required_keys = {'source', 'dest'}
required_dir_keys = {'path', 'owner', 'perm'}
required_path_keys = {'path', 'owner', 'perm'}

if 'command' not in config:
raise InvalidConfig('Config is missing required "command" key')
Expand All @@ -274,11 +274,24 @@ def validate_config(config):
raise InvalidConfig(
'Config needs preserve_properties or owner and perm')

for data in config.get('directories', list()):
if not set(data.keys()) >= required_dir_keys:
message = ('directories config is missing required keys: %s'
% (required_dir_keys - set(data.keys())))
raise InvalidConfig(message)
for section in ('directories', 'files'):
for data in config.get(section, list()):
missing = required_path_keys - set(data.keys())
if missing:
raise InvalidConfig(
'%s config is missing required keys: %s'
% (section, missing))

for key in required_path_keys:
if data.get(key) is None:
raise InvalidConfig(
'%s config key "%s" must not be null'
% (section, key))

if glob.has_magic(data['path']):
raise InvalidConfig(
'%s config does not support glob paths: %s'
% (section, data['path']))


def validate_source(data):
Expand Down Expand Up @@ -375,6 +388,28 @@ def create_directories(config):
handle_permissions({'permissions': [data]})


def create_files(config):
if 'files' not in config:
return
LOG.info('Creating files')
for data in config['files']:
path = data['path']
if os.path.islink(path):
raise OSError(
"Path is a symbolic link, expected regular file (%s)" % path)
if os.path.isdir(path):
raise OSError(
"Path is a directory, expected file (%s)" % path)
parent = os.path.dirname(path)
if parent and not os.path.isdir(parent):
raise OSError(
"Parent directory does not exist (%s)" % parent)
if not os.path.exists(path):
with open(path, 'a'):
pass
handle_permissions({'permissions': [data]})


def user_group(owner):
if ':' in owner:
user, group = owner.split(':', 1)
Expand Down Expand Up @@ -410,11 +445,20 @@ def set_perms(path, uid, gid, perm):
path, uid, gid)

if perm:
# NOTE(Jeffrey4l): py3 need '0oXXX' format for octal literals,
# and py2 support such format too.
if len(perm) == 4 and perm[1] != 'o':
perm = ''.join([perm[:1], 'o', perm[1:]])
perm = int(perm, base=0)
# Accept valid UNIX permission notation
# (e.g. 644, 0600, 1777, 2755)
# or equivalent Python octal literals
# (e.g. 0o644, 0o1777, 0o2755).
if re.fullmatch(r'[0-7]{3,4}', perm):
perm = int(perm, 8)
elif re.fullmatch(r'0o[0-7]{3,4}', perm):
perm = int(perm, 0)
else:
raise ValueError(
f"Invalid permission '{perm}'. Expected a valid UNIX "
"permission (e.g. 644, 0600, 2755) or a Python octal "
"literal (e.g. 0o644, 0o0600, 0o2755)."
)

# Ensure execute bit on directory if read bit is set
if os.path.isdir(path):
Expand Down Expand Up @@ -602,6 +646,7 @@ def execute_config_strategy(config):
LOG.info("Kolla config strategy set to: %s", config_strategy)
if config_strategy == "COPY_ALWAYS":
create_directories(config)
create_files(config)
handle_defaults(config)
copy_config(config)
handle_permissions(config)
Expand All @@ -612,6 +657,7 @@ def execute_config_strategy(config):
exit_code=0)
else:
create_directories(config)
create_files(config)
handle_defaults(config)
copy_config(config)
handle_permissions(config)
Expand Down
2 changes: 1 addition & 1 deletion docker/bifrost/bifrost-base/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}openstack-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block bifrost_base_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/bifrost/bifrost-deploy/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}bifrost-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block bifrost_deploy_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/blazar/blazar-api/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}blazar-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block blazar_api_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/blazar/blazar-base/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}openstack-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block blazar_base_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/blazar/blazar-manager/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}blazar-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block blazar_manager_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/ceilometer/ceilometer-base/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}openstack-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block ceilometer_base_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/ceilometer/ceilometer-central/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}ceilometer-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block ceilometer_central_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/ceilometer/ceilometer-compute/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}ceilometer-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block ceilometer_compute_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/ceilometer/ceilometer-ipmi/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}ceilometer-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block ceilometer_ipmi_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/ceilometer/ceilometer-notification/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}ceilometer-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block ceilometer_notification_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/cinder/cinder-api/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}cinder-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block cinder_api_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/cinder/cinder-backup/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}cinder-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block cinder_backup_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/cinder/cinder-base/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}openstack-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block cinder_base_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/cinder/cinder-scheduler/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}cinder-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block cinder_scheduler_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/cinder/cinder-volume/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}cinder-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block cinder_volume_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/cloudkitty/cloudkitty-api/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}cloudkitty-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block cloudkitty_api_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/cloudkitty/cloudkitty-base/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}openstack-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block cloudkitty_base_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/cloudkitty/cloudkitty-processor/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}cloudkitty-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block cloudkitty_processor_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/collectd/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}openstack-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block collectd_header %}{% endblock %}
Expand Down
2 changes: 1 addition & 1 deletion docker/cron/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM {{ namespace }}/{{ image_prefix }}base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}"
{% endblock %}

{% block cron_header %}{% endblock %}
Expand Down
Loading