From ce74eb0d7b4c01e1fcdb432e5605835caac6c1d0 Mon Sep 17 00:00:00 2001 From: Kien Nguyen Date: Mon, 5 Nov 2018 11:24:55 +0700 Subject: Add Masakari containers Masakari provides Instances High Availability Service for OpenStack clouds by automatically recovering failed Instances. Change-Id: I279d6b43f8e4d4e30b39deb607823ceca272a4b8 Implements: blueprint masakari-support --- docker/horizon/extend_start.sh | 15 +++++ docker/masakari/masakari-api/Dockerfile.j2 | 17 +++++ docker/masakari/masakari-api/extend_start.sh | 19 ++++++ docker/masakari/masakari-base/Dockerfile.j2 | 72 ++++++++++++++++++++++ docker/masakari/masakari-base/extend_start.sh | 10 +++ docker/masakari/masakari-engine/Dockerfile.j2 | 16 +++++ docker/masakari/masakari-monitors/Dockerfile.j2 | 58 +++++++++++++++++ .../masakari-monitors/masakari_monitors_sudoers | 2 + 8 files changed, 209 insertions(+) create mode 100644 docker/masakari/masakari-api/Dockerfile.j2 create mode 100755 docker/masakari/masakari-api/extend_start.sh create mode 100644 docker/masakari/masakari-base/Dockerfile.j2 create mode 100755 docker/masakari/masakari-base/extend_start.sh create mode 100644 docker/masakari/masakari-engine/Dockerfile.j2 create mode 100644 docker/masakari/masakari-monitors/Dockerfile.j2 create mode 100644 docker/masakari/masakari-monitors/masakari_monitors_sudoers (limited to 'docker') diff --git a/docker/horizon/extend_start.sh b/docker/horizon/extend_start.sh index f7d4c4dea..857bdfdfd 100644 --- a/docker/horizon/extend_start.sh +++ b/docker/horizon/extend_start.sh @@ -157,6 +157,20 @@ function config_manila_ui { done } +function config_masakari_dashboard { + for file in ${SITE_PACKAGES}/masakaridashboard/local/enabled/_*[^__].py; do + config_dashboard "${ENABLE_MASAKARI}" \ + "${SITE_PACKAGES}/masakaridashboard/local/enabled/${file##*/}" \ + "${SITE_PACKAGES}/openstack_dashboard/local/enabled/${file##*/}" + done + config_dashboard "${ENABLE_MASAKARI}"\ + "${SITE_PACKAGES}/masakaridashboard/conf/masakari_policy.json" \ + "${SITE_PACKAGES}/openstack_dashboard/conf/masakari_policy.json" + config_dashboard "${ENABLE_MASAKARI}"\ + "${SITE_PACKAGES}/masakaridashboard/local/local_settings.d/_50_masakari.py" \ + "${SITE_PACKAGES}/openstack_dashboard/local/local_settings.d/_50_masakari.py" +} + function config_murano_dashboard { for file in ${SITE_PACKAGES}/muranodashboard/local/enabled/_*[^__].py; do config_dashboard "${ENABLE_MURANO}" \ @@ -325,6 +339,7 @@ config_ironic_dashboard config_karbor_dashboard config_magnum_dashboard config_manila_ui +config_masakari_dashboard config_mistral_dashboard config_murano_dashboard config_neutron_vpnaas_dashboard diff --git a/docker/masakari/masakari-api/Dockerfile.j2 b/docker/masakari/masakari-api/Dockerfile.j2 new file mode 100644 index 000000000..28b836e1c --- /dev/null +++ b/docker/masakari/masakari-api/Dockerfile.j2 @@ -0,0 +1,17 @@ +FROM {{ namespace }}/{{ image_prefix }}masakari-base:{{ tag }} +LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}" + +{% block masakari_api_header %}{% endblock %} + +{% if install_type == 'binary' %} + +RUN echo '{{ install_type }} not yet available for {{ base_distro }}' \ + && /bin/false + +{% endif %} + +COPY extend_start.sh /usr/local/bin/kolla_masakari_extend_start +RUN chmod 755 /usr/local/bin/kolla_masakari_extend_start + +{% block masakari_api_footer %}{% endblock %} +{% block footer %}{% endblock %} diff --git a/docker/masakari/masakari-api/extend_start.sh b/docker/masakari/masakari-api/extend_start.sh new file mode 100755 index 000000000..1c372881d --- /dev/null +++ b/docker/masakari/masakari-api/extend_start.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# 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 + install -d /var/run/apache2/ + rm -rf /var/run/apache2/* +else + rm -rf /var/run/httpd/* /run/httpd/* /tmp/httpd* +fi + +# 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 + masakari-manage db sync + exit 0 +fi diff --git a/docker/masakari/masakari-base/Dockerfile.j2 b/docker/masakari/masakari-base/Dockerfile.j2 new file mode 100644 index 000000000..65b944e6f --- /dev/null +++ b/docker/masakari/masakari-base/Dockerfile.j2 @@ -0,0 +1,72 @@ +FROM {{ namespace }}/{{ image_prefix }}openstack-base:{{ tag }} +LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}" + +{% block masakari_base_header %}{% endblock %} + +{% import "macros.j2" as macros with context %} + +{{ macros.configure_user(name='masakari') }} + +{% if install_type == 'binary' %} + +RUN echo '{{ install_type }} not yet available for {{ base_distro }}' \ + && /bin/false + +{% elif install_type == 'source' %} + + {% if base_package_type == 'rpm' %} + + {% set masakari_base_packages = [ + 'httpd', + 'mod_ssl', + ] %} + {% if distro_python_version.startswith('3') %} + {% set masakari_base_packages = masakari_base_packages + [ + 'python3-ldappool', + 'python3-mod_wsgi' + ] %} + {% else %} + {% set masakari_base_packages = masakari_base_packages + [ + 'mod_wsgi', + 'python2-ldappool' + ] %} + {% endif %} + +{{ macros.install_packages(masakari_base_packages | customizable("packages")) }} +RUN mkdir -p /var/www/cgi-bin/masakari \ + && 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_package_type == 'deb' %} + + {% set masakari_base_packages = [ + 'apache2', + 'libapache2-mod-wsgi-py3', + 'python3-ldappool' + ] %} + +{{ macros.install_packages(masakari_base_packages | customizable("packages")) }} +RUN mkdir -p /var/www/cgi-bin/masakari \ + && echo > /etc/apache2/ports.conf + {% endif %} + +ADD masakari-base-archive /masakari-base-source + +{% set masakari_base_pip_packages = [ + '/masakari' +] %} + +RUN ln -s masakari-base-source/* masakari \ + && {{ macros.install_pip(masakari_base_pip_packages | customizable("pip_packages")) }} \ + && mkdir -p /etc/masakari /var/www/cgi-bin/masakari \ + && chown -R masakari: /etc/masakari /var/www/cgi-bin/masakari + +{% endif %} + +COPY extend_start.sh /usr/local/bin/kolla_extend_start + +RUN touch /usr/local/bin/kolla_masakari_extend_start \ + && chmod 755 /usr/local/bin/kolla_extend_start /usr/local/bin/kolla_masakari_extend_start \ + && chmod 755 /var/www/cgi-bin/masakari + +{% block masakari_base_footer %}{% endblock %} diff --git a/docker/masakari/masakari-base/extend_start.sh b/docker/masakari/masakari-base/extend_start.sh new file mode 100755 index 000000000..d4fdcc86a --- /dev/null +++ b/docker/masakari/masakari-base/extend_start.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [[ ! -d "/var/log/kolla/masakari" ]]; then + mkdir -p /var/log/kolla/masakari +fi +if [[ $(stat -c %a /var/log/kolla/masakari) != "755" ]]; then + chmod 755 /var/log/kolla/masakari +fi + +. /usr/local/bin/kolla_masakari_extend_start diff --git a/docker/masakari/masakari-engine/Dockerfile.j2 b/docker/masakari/masakari-engine/Dockerfile.j2 new file mode 100644 index 000000000..4de51bcf6 --- /dev/null +++ b/docker/masakari/masakari-engine/Dockerfile.j2 @@ -0,0 +1,16 @@ +FROM {{ namespace }}/{{ image_prefix }}masakari-base:{{ tag }} +LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}" + +{% block masakari_engine_header %}{% endblock %} + +{% if install_type == 'binary' %} + +RUN echo '{{ install_type }} not yet available for {{ base_distro }}' \ + && /bin/false + +{% endif %} + +{% block masakari_engine_footer %}{% endblock %} +{% block footer %}{% endblock %} + +USER masakari diff --git a/docker/masakari/masakari-monitors/Dockerfile.j2 b/docker/masakari/masakari-monitors/Dockerfile.j2 new file mode 100644 index 000000000..8ed265b17 --- /dev/null +++ b/docker/masakari/masakari-monitors/Dockerfile.j2 @@ -0,0 +1,58 @@ +FROM {{ namespace }}/{{ image_prefix }}masakari-base:{{ tag }} +LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}" + +{% block masakari_monitors_header %}{% endblock %} + +{% import "macros.j2" as macros with context %} + +{{ macros.configure_user(name='masakari') }} + +{% if install_type == 'binary' %} + +RUN echo '{{ install_type }} not yet available for {{ base_distro }}' \ + && /bin/false + +{% elif install_type == 'source' %} + + {% if base_distro in ['centos', 'oraclelinux', 'rhel'] %} + + {% set masakari_monitors_packages = [ + 'libvirt-devel', + 'pacemaker-cli', + 'tcpdump', + ] %} + + {% elif base_distro in ['debian', 'ubuntu'] %} + + {% set masakari_monitors_packages = [ + 'libvirt-dev', + 'pacemaker-cli-utils', + 'tcpdump', + ] %} + + {% endif %} + +{{ macros.install_packages(masakari_monitors_packages | customizable("packages")) }} + +ADD masakari-monitors-archive /masakari-monitors-source + +{% set masakari_monitors_pip_packages = [ + '/masakari-monitors' +] %} + +RUN ln -s masakari-monitors-source/* masakari-monitors \ + && {{ macros.install_pip(masakari_monitors_pip_packages | customizable("pip_packages")) }} \ + && mkdir -p /etc/masakari-monitors \ + && chown -R masakari: /etc/masakari-monitors + +COPY masakari_monitors_sudoers /etc/sudoers.d/kolla_masakari_monitors_sudoers + +RUN chmod 750 /etc/sudoers.d \ + && chmod 640 /etc/sudoers.d/kolla_masakari_monitors_sudoers + +{% endif %} + +{% block masakari_monitors_footer %}{% endblock %} +{% block footer %}{% endblock %} + +USER masakari diff --git a/docker/masakari/masakari-monitors/masakari_monitors_sudoers b/docker/masakari/masakari-monitors/masakari_monitors_sudoers new file mode 100644 index 000000000..4778f7e43 --- /dev/null +++ b/docker/masakari/masakari-monitors/masakari_monitors_sudoers @@ -0,0 +1,2 @@ +masakari ALL=(root) NOPASSWD: /var/lib/kolla/venv/bin/privsep-helper +masakari ALL=(root) NOPASSWD: /usr/sbin/tcpdump * -- cgit v1.2.3