From 2f657085c67302ab54dcb64b335a2f3732ba4de4 Mon Sep 17 00:00:00 2001 From: Eduardo Gonzalez Date: Fri, 26 Oct 2018 16:02:21 +0200 Subject: [PATCH] Split placement-api from nova This change breaks out the Placement service from Nova ahead of it's removal from the project later in Stein. For the time being the original Nova Placement images are left in place but they will be removed later in the cycle once the Placement code is removed from the Nova project by the following change: https://review.openstack.org/#/c/618215/ Co-Authored-By: Lee Yarwood Change-Id: I2bf6f5bf45b76e6900f41c21e9af30c69dc6e9c0 --- docker/placement/placement-api/Dockerfile.j2 | 62 +++++++++++++++++++ .../placement/placement-api/extend_start.sh | 18 ++++++ docker/placement/placement-base/Dockerfile.j2 | 47 ++++++++++++++ .../placement/placement-base/extend_start.sh | 12 ++++ kolla/common/config.py | 8 +++ kolla/image/build.py | 1 + ...-placement-from-nova-27b7ea2359c2d3ae.yaml | 7 +++ 7 files changed, 155 insertions(+) create mode 100644 docker/placement/placement-api/Dockerfile.j2 create mode 100644 docker/placement/placement-api/extend_start.sh create mode 100644 docker/placement/placement-base/Dockerfile.j2 create mode 100644 docker/placement/placement-base/extend_start.sh create mode 100644 releasenotes/notes/split-placement-from-nova-27b7ea2359c2d3ae.yaml 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.