diff --git a/docker/placement/placement-api/Dockerfile.j2 b/docker/placement/placement-api/Dockerfile.j2 new file mode 100644 index 0000000000..0ef86d6b21 --- /dev/null +++ b/docker/placement/placement-api/Dockerfile.j2 @@ -0,0 +1,62 @@ +FROM {{ namespace }}/{{ image_prefix }}placement-base:{{ tag }} +LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}" + +{% block placement_api_header %}{% endblock %} + +{% import "macros.j2" as macros with context %} + +{% if install_type == 'binary' %} + {% if base_distro in ['centos', 'oraclelinux', 'rhel'] %} + + {% set placement_api_packages = [ + 'httpd', + 'mod_ssl', + 'mod_wsgi', + 'openstack-placement-api' + ] %} + +{{ macros.install_packages(placement_api_packages | customizable("packages")) }} +RUN sed -i -r 's,^(Listen 80),#\1,' /etc/httpd/conf/httpd.conf \ + && sed -i -r 's,^(Listen 443),#\1,' /etc/httpd/conf.d/ssl.conf + + {% elif base_distro in ['debian', 'ubuntu'] %} + + {% set placement_api_packages = [ + 'apache2', + 'libapache2-mod-wsgi', + 'placement-api' + ] %} + +{{ macros.install_packages(placement_api_packages | customizable("packages")) }} +RUN truncate -s 0 /etc/apache2/ports.conf + + {% endif %} +{% elif install_type == 'source' %} + {% if base_distro in ['centos', 'oraclelinux', 'rhel'] %} + + {% set placement_api_packages = [ + 'httpd', + 'mod_ssl', + 'mod_wsgi' + ] %} + +{{ macros.install_packages(placement_api_packages | customizable("packages")) }} +RUN sed -i -r 's,^(Listen 80),#\1,' /etc/httpd/conf/httpd.conf \ + && sed -i -r 's,^(Listen 443),#\1,' /etc/httpd/conf.d/ssl.conf + {% elif base_distro in ['debian', 'ubuntu'] %} + + {% set placement_api_packages = [ + 'apache2', + 'libapache2-mod-wsgi' + ] %} + +{{ macros.install_packages(placement_api_packages | customizable("packages")) }} +RUN truncate -s 0 /etc/apache2/ports.conf + + {% endif %} +{% endif %} + +COPY extend_start.sh /usr/local/bin/kolla_placement_extend_start + +{% block placement_api_footer %}{% endblock %} +{% block footer %}{% endblock %} diff --git a/docker/placement/placement-api/extend_start.sh b/docker/placement/placement-api/extend_start.sh new file mode 100644 index 0000000000..a8e9635d1f --- /dev/null +++ b/docker/placement/placement-api/extend_start.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +# Bootstrap and exit if KOLLA_BOOTSTRAP variable is set. This catches all cases +# of the KOLLA_BOOTSTRAP variable being set, including empty. +if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then + placement-manage db sync + exit 0 +fi + +# NOTE(pbourke): httpd will not clean up after itself in some cases which +# results in the container not being able to restart. (bug #1489676, 1557036) +if [[ "${KOLLA_BASE_DISTRO}" =~ debian|ubuntu ]]; then + # Loading Apache2 ENV variables + . /etc/apache2/envvars + rm -rf /var/run/apache2/* +else + rm -rf /var/run/httpd/* /run/httpd/* /tmp/httpd* +fi diff --git a/docker/placement/placement-base/Dockerfile.j2 b/docker/placement/placement-base/Dockerfile.j2 new file mode 100644 index 0000000000..e108944b4f --- /dev/null +++ b/docker/placement/placement-base/Dockerfile.j2 @@ -0,0 +1,47 @@ +FROM {{ namespace }}/{{ image_prefix }}openstack-base:{{ tag }} +LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}" + +{% block placement_base_header %}{% endblock %} + +{% import "macros.j2" as macros with context %} + +{{ macros.configure_user(name='placement') }} + +{% if install_type == 'binary' %} + {% if base_distro in ['centos', 'oraclelinux', 'rhel'] %} + + {% set placement_base_packages = [ + 'openstack-placement-common', + ] %} + + {% elif base_distro in ['debian', 'ubuntu'] %} + + {% set placement_base_packages = [] %} + + {% endif %} + +{{ macros.install_packages(placement_base_packages | customizable("packages")) }} + +{% elif install_type == 'source' %} + +ADD placement-base-archive /placement-base-source +ADD plugins-archive / + +{% set placement_base_pip_packages = [ + '/placement' +] %} + +RUN ln -s placement-base-source/* placement \ + && {{ macros.install_pip(placement_base_pip_packages | customizable("pip_packages")) }} \ + && mkdir -p /etc/placement/ \ + && cp -r /placement/etc/placement/* /etc/placement/ \ + && chown -R placement: /etc/placement/ + +{% endif %} + +COPY extend_start.sh /usr/local/bin/kolla_extend_start + +RUN touch /usr/local/bin/kolla_placement_extend_start \ + && chmod 755 /usr/local/bin/kolla_extend_start /usr/local/bin/kolla_placement_extend_start + +{% block placement_base_footer %}{% endblock %} diff --git a/docker/placement/placement-base/extend_start.sh b/docker/placement/placement-base/extend_start.sh new file mode 100644 index 0000000000..68a7b01c68 --- /dev/null +++ b/docker/placement/placement-base/extend_start.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +if [[ ! -d "/var/log/kolla/placement" ]]; then + mkdir -p /var/log/kolla/placement + touch /var/log/kolla/placement/placement-api.log +fi +if [[ $(stat -c %a /var/log/kolla/placement) != "755" ]]; then + chmod 755 /var/log/kolla/placement + chmod 644 /var/log/kolla/placement/placement-api.log +fi + +. /usr/local/bin/kolla_placement_extend_start diff --git a/kolla/common/config.py b/kolla/common/config.py index 16a7901970..5ba95bd2a6 100755 --- a/kolla/common/config.py +++ b/kolla/common/config.py @@ -657,6 +657,10 @@ SOURCES = { 'type': 'url', 'location': ('$tarballs_base/panko/' 'panko-master.tar.gz')}, + 'placement-base': { + 'type': 'url', + 'location': ('$tarballs_base/placement/' + 'placement-master.tar.gz')}, 'tempest-plugin-tempest-conf': { 'type': 'url', 'location': ('$tarballs_base/python-tempestconf/' @@ -1135,6 +1139,10 @@ USERS = { 'uid': 42481, # unused user, but we need the group for thales hsm 'gid': 42481, }, + 'placement-user': { + 'uid': 42482, + 'gid': 42482, + } } diff --git a/kolla/image/build.py b/kolla/image/build.py index a2c1ecc86a..d11b098b71 100755 --- a/kolla/image/build.py +++ b/kolla/image/build.py @@ -121,6 +121,7 @@ SKIPPED_IMAGES = { "nova-mksproxy", "novajoin-base", "octavia-base", + "placement-base", # There is no qdrouterd package for ubuntu bionic "qdrouterd", "searchlight-base", diff --git a/releasenotes/notes/split-placement-from-nova-27b7ea2359c2d3ae.yaml b/releasenotes/notes/split-placement-from-nova-27b7ea2359c2d3ae.yaml new file mode 100644 index 0000000000..1281537c27 --- /dev/null +++ b/releasenotes/notes/split-placement-from-nova-27b7ea2359c2d3ae.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Nova placement API has been moved into its own images. +upgrade: + - | + nova-placement-api image will be renamed to placement-api.