From 8db4a361b6b84236d9880f00a527dc52c10aeb46 Mon Sep 17 00:00:00 2001 From: Roman Iuvshyn Date: Tue, 20 Jun 2017 12:40:04 +0300 Subject: [PATCH] use healthcheck for postgres container, some minor structure changes --- dockerfiles/cli/images.template | 2 +- dockerfiles/init/manifests/che.pp | 2 +- .../init/modules/base/manifests/init.pp | 1 + .../init/modules/che/manifests/init.pp | 11 ++++++---- .../compose/templates/docker-compose.yml.erb | 22 ++++++++++++++----- .../init/modules/postgres/manifests/init.pp | 11 ++++++++++ .../templates/docker-healthcheck.sh.erb | 20 +++++++++++++++++ .../init/modules/traefik/manifests/init.pp | 8 ++++--- 8 files changed, 62 insertions(+), 15 deletions(-) create mode 100644 dockerfiles/init/modules/postgres/manifests/init.pp create mode 100644 dockerfiles/init/modules/postgres/templates/docker-healthcheck.sh.erb diff --git a/dockerfiles/cli/images.template b/dockerfiles/cli/images.template index 17bf582f13..e45a13e59e 100644 --- a/dockerfiles/cli/images.template +++ b/dockerfiles/cli/images.template @@ -1,6 +1,6 @@ IMAGE_INIT=${BUILD_ORGANIZATION}/${BUILD_PREFIX}-init:${BUILD_TAG} IMAGE_CHE=${BUILD_ORGANIZATION}/${BUILD_PREFIX}-server:${BUILD_TAG} -IMAGE_COMPOSE=docker/compose:1.8.1 +IMAGE_COMPOSE=docker/compose:1.10.1 IMAGE_TRAEFIK=traefik:v1.3.0-rc3 IMAGE_POSTGRES=postgres:9.6 IMAGE_KEYCLOACK=jboss/keycloak-postgres:3.1.0.Final diff --git a/dockerfiles/init/manifests/che.pp b/dockerfiles/init/manifests/che.pp index f4474c68a3..a9d8c72624 100644 --- a/dockerfiles/init/manifests/che.pp +++ b/dockerfiles/init/manifests/che.pp @@ -42,7 +42,7 @@ node default { ############################### # Small group # - $che_small_group = getValue("CHE_SMALL_GROUP","false") + $che_for_small_groups = getValue("CHE_FOR_SMALL_GROUPS","true") ################################ diff --git a/dockerfiles/init/modules/base/manifests/init.pp b/dockerfiles/init/modules/base/manifests/init.pp index c7036b4e93..2b39999b54 100644 --- a/dockerfiles/init/modules/base/manifests/init.pp +++ b/dockerfiles/init/modules/base/manifests/init.pp @@ -14,4 +14,5 @@ class base { include che include compose include traefik + include postgres } diff --git a/dockerfiles/init/modules/che/manifests/init.pp b/dockerfiles/init/modules/che/manifests/init.pp index 97105dc2d2..b9da743801 100644 --- a/dockerfiles/init/modules/che/manifests/init.pp +++ b/dockerfiles/init/modules/che/manifests/init.pp @@ -1,7 +1,10 @@ class che { - + file { "/opt/che/config/che": + ensure => "directory", + mode => "755", + } -> # creating che.env - file { "/opt/che/config/che.env": + file { "/opt/che/config/che/che.env": ensure => "present", content => template("che/che.env.erb"), mode => "644", @@ -16,13 +19,13 @@ class che { } # JMX - file { "/opt/che/config/jmxremote.access": + file { "/opt/che/config/che/jmxremote.access": ensure => "present", content => "$che_jmx_username readwrite", mode => "644", } - file { "/opt/che/config/jmxremote.password": + file { "/opt/che/config/che/jmxremote.password": ensure => "present", content => "$che_jmx_username $che_jmx_password", mode => "644", diff --git a/dockerfiles/init/modules/compose/templates/docker-compose.yml.erb b/dockerfiles/init/modules/compose/templates/docker-compose.yml.erb index 734f7be0f2..b679715dfe 100644 --- a/dockerfiles/init/modules/compose/templates/docker-compose.yml.erb +++ b/dockerfiles/init/modules/compose/templates/docker-compose.yml.erb @@ -3,8 +3,8 @@ # PLEASE DON'T MODIFY BY HAND # ################################### -<% if scope.lookupvar('che::che_small_group') == 'true' -%> -version: '2' +<% if scope.lookupvar('che::che_for_small_groups') == 'true' -%> +version: '2.1' services: <% end -%> @@ -15,7 +15,7 @@ services: image: <%= ENV["IMAGE_CHE"] %> env_file: <% if @compose_file_for_containers == true -%> - - '<%= ENV["CHE_CONTAINER_ROOT"] %>/instance/config/che.env' + - '<%= ENV["CHE_CONTAINER_ROOT"] %>/instance/config/che/che.env' <% else -%> - '<%= ENV["CHE_ENV_FILE"] %>' <% end -%> @@ -23,7 +23,7 @@ services: - '/var/run/docker.sock:/var/run/docker.sock' - '<%= scope.lookupvar('che::che_instance') -%>/data:/data' - '<%= scope.lookupvar('che::che_instance') -%>/logs:/logs' - - '<%= scope.lookupvar('che::che_instance') -%>/config:/conf' + - '<%= scope.lookupvar('che::che_instance') -%>/config/che:/conf' <% if scope.lookupvar('che::che_dev_env') == 'on' -%> - '<%= scope.lookupvar('che::che_assembly') -%>:/assembly' <% end -%> @@ -78,10 +78,10 @@ services: <% end -%> volumes: - /var/run/docker.sock:/var/run/docker.sock - - '<%= scope.lookupvar('che::che_instance') -%>/config/traefik.toml:/etc/traefik/traefik.toml' + - '<%= scope.lookupvar('che::che_instance') -%>/config/traefik/traefik.toml:/etc/traefik/traefik.toml' <% end -%> -<% if scope.lookupvar('che::che_small_group') == 'true' -%> +<% if scope.lookupvar('che::che_for_small_groups') == 'true' -%> ######################## # POSTGRES ######################## @@ -90,17 +90,27 @@ services: environment: - POSTGRES_USER=keycloak - POSTGRES_PASSWORD=keycloak + - POSTGRES_DB=keycloak volumes: + - '<%= scope.lookupvar('che::che_instance') -%>/config/postgres/docker-healthcheck.sh:/docker-healthcheck.sh' - '<%= scope.lookupvar('che::che_instance') -%>/data/postgres:/var/lib/postgresql/data' ports: - '5432:5432' restart: always + healthcheck: + test: ["CMD", "/docker-healthcheck.sh"] + interval: 10s + timeout: 10s + retries: 10 ######################## # KEYCLOAK ######################## keycloak: image: <%= ENV["IMAGE_KEYCLOACK"] %> + depends_on: + postgres: + condition: service_healthy ports: - '5050:8080' environment: diff --git a/dockerfiles/init/modules/postgres/manifests/init.pp b/dockerfiles/init/modules/postgres/manifests/init.pp new file mode 100644 index 0000000000..7c1d5dfa71 --- /dev/null +++ b/dockerfiles/init/modules/postgres/manifests/init.pp @@ -0,0 +1,11 @@ +class postgres { + file { "/opt/che/config/postgres": + ensure => "directory", + mode => "755", + } -> + file { "/opt/che/config/postgres/docker-healthcheck.sh": + content => template('postgres/docker-healthcheck.sh.erb'), + ensure => file, + mode => "755", + } +} diff --git a/dockerfiles/init/modules/postgres/templates/docker-healthcheck.sh.erb b/dockerfiles/init/modules/postgres/templates/docker-healthcheck.sh.erb new file mode 100644 index 0000000000..9eb6d50ae4 --- /dev/null +++ b/dockerfiles/init/modules/postgres/templates/docker-healthcheck.sh.erb @@ -0,0 +1,20 @@ +#!/bin/sh +# Copyright (c) 2016 Codenvy, S.A. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# + +set -e + +export PGUSER=${POSTGRES_USER} + +psql -h localhost -d template1 -c '\l' +ret_code=$? + +# Docker healthcheck requires we only over exit 0 or 1 so this captures the +# other exit codes and coverts them all to a simple exit 1 +if [ $ret_code != 0 ]; then + exit 1 +fi diff --git a/dockerfiles/init/modules/traefik/manifests/init.pp b/dockerfiles/init/modules/traefik/manifests/init.pp index 0071927ac4..d4ee00aed9 100644 --- a/dockerfiles/init/modules/traefik/manifests/init.pp +++ b/dockerfiles/init/modules/traefik/manifests/init.pp @@ -1,10 +1,12 @@ class traefik { - + file { "/opt/che/config/traefik": + ensure => "directory", + mode => "755", + } -> # creating traefik.toml - file { "/opt/che/config/traefik.toml": + file { "/opt/che/config/traefik/traefik.toml": ensure => "present", content => template("traefik/traefik.toml.erb"), mode => "644", } - }