diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 4b3e5bd..d228804 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,17 +1,32 @@ version: 2 updates: +# /docker/dev folder +- package-ecosystem: docker + directory: "/docker/dev/" + schedule: + interval: daily + time: "13:00" + open-pull-requests-limit: 10 +# /docker/prod-all-providers folder +- package-ecosystem: bundler + directory: "/docker/prod-all-providers/" + schedule: + interval: daily + time: "13:00" + open-pull-requests-limit: 10 +- package-ecosystem: docker + directory: "/docker/prod-all-providers/" + schedule: + interval: daily + time: "13:00" + open-pull-requests-limit: 10 +# /docker/test-all-providers folder - package-ecosystem: bundler directory: "/docker/test-all-providers/" schedule: interval: daily time: "13:00" open-pull-requests-limit: 10 -- package-ecosystem: docker - directory: "/docker/dev/" - schedule: - interval: daily - time: "13:00" - open-pull-requests-limit: 10 - package-ecosystem: docker directory: "/docker/test-all-providers/" schedule: diff --git a/docker/prod-all-providers/.bundle/config b/docker/prod-all-providers/.bundle/config new file mode 100644 index 0000000..2369228 --- /dev/null +++ b/docker/prod-all-providers/.bundle/config @@ -0,0 +1,2 @@ +--- +BUNDLE_PATH: "vendor/bundle" diff --git a/docker/prod-all-providers/.dockerignore b/docker/prod-all-providers/.dockerignore new file mode 100644 index 0000000..8dad93e --- /dev/null +++ b/docker/prod-all-providers/.dockerignore @@ -0,0 +1,3 @@ +.bundle/ +vendor/ +update-gemfile-lock.sh diff --git a/docker/prod-all-providers/Dockerfile b/docker/prod-all-providers/Dockerfile new file mode 100644 index 0000000..6c1c590 --- /dev/null +++ b/docker/prod-all-providers/Dockerfile @@ -0,0 +1,34 @@ +# Run vmpooler in a Docker container! Configuration can either be embedded +# and built within the current working directory, or stored in a +# VMPOOLER_CONFIG environment value and passed to the Docker daemon. +# +# BUILD: +# docker build -t vmpooler . +# +# RUN: +# docker run -e VMPOOLER_CONFIG -p 80:4567 -it vmpooler + +FROM jruby:9.2-jdk + +ENV RACK_ENV=production + +ENV LOGFILE=/dev/stdout \ + RACK_ENV=production + +RUN apt-get update -qq && \ + apt-get install -y --no-install-recommends make && \ + apt-get clean autoclean && \ + apt-get autoremove -y && \ + rm -rf /var/lib/apt/lists/* + +COPY ./docker-entrypoint.sh /usr/local/bin/ + +RUN chmod +x /usr/local/bin/docker-entrypoint.sh + +COPY ./Gemfile* ./ + +RUN gem install bundler && \ + bundle config set --local jobs 3 && \ + bundle install + +ENTRYPOINT ["docker-entrypoint.sh"] diff --git a/docker/prod-all-providers/Gemfile b/docker/prod-all-providers/Gemfile new file mode 100644 index 0000000..a0cf865 --- /dev/null +++ b/docker/prod-all-providers/Gemfile @@ -0,0 +1,4 @@ +source ENV['GEM_SOURCE'] || 'https://rubygems.org' + +gem 'vmpooler', '~> 2.0' +gem 'vmpooler-provider-vsphere', '~> 1.4' diff --git a/docker/prod-all-providers/Gemfile.lock b/docker/prod-all-providers/Gemfile.lock new file mode 100644 index 0000000..4209662 --- /dev/null +++ b/docker/prod-all-providers/Gemfile.lock @@ -0,0 +1,122 @@ +GEM + remote: https://rubygems.org/ + specs: + bindata (2.4.10) + builder (3.2.4) + concurrent-ruby (1.1.9) + connection_pool (2.2.5) + faraday (1.8.0) + faraday-em_http (~> 1.0) + faraday-em_synchrony (~> 1.0) + faraday-excon (~> 1.1) + faraday-httpclient (~> 1.0.1) + faraday-net_http (~> 1.0) + faraday-net_http_persistent (~> 1.1) + faraday-patron (~> 1.0) + faraday-rack (~> 1.0) + multipart-post (>= 1.2, < 3) + ruby2_keywords (>= 0.0.4) + faraday-em_http (1.0.0) + faraday-em_synchrony (1.0.0) + faraday-excon (1.1.0) + faraday-httpclient (1.0.1) + faraday-net_http (1.0.1) + faraday-net_http_persistent (1.2.0) + faraday-patron (1.0.0) + faraday-rack (1.0.0) + google-cloud-env (1.5.0) + faraday (>= 0.17.3, < 2.0) + json (2.6.1-java) + multipart-post (2.1.1) + mustermann (1.1.1) + ruby2_keywords (~> 0.0.1) + net-ldap (0.17.0) + nio4r (2.5.8-java) + nokogiri (1.12.5-java) + racc (~> 1.4) + opentelemetry-api (0.17.0) + opentelemetry-common (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-exporter-jaeger (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-common (~> 0.17.0) + opentelemetry-sdk (~> 0.17.0) + thrift + opentelemetry-instrumentation-base (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-instrumentation-concurrent_ruby (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-instrumentation-base (~> 0.17.0) + opentelemetry-instrumentation-redis (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-common (~> 0.17.0) + opentelemetry-instrumentation-base (~> 0.17.0) + opentelemetry-instrumentation-sinatra (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-instrumentation-base (~> 0.17.0) + opentelemetry-resource_detectors (0.17.0) + google-cloud-env + opentelemetry-sdk + opentelemetry-sdk (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-common (~> 0.17.0) + opentelemetry-instrumentation-base (~> 0.17.0) + optimist (3.0.1) + pickup (0.0.11) + prometheus-client (2.1.0) + puma (5.5.2-java) + nio4r (~> 2.0) + racc (1.6.0-java) + rack (2.2.3) + rack-protection (2.1.0) + rack + rake (13.0.6) + rbvmomi (3.0.0) + builder (~> 3.2) + json (~> 2.3) + nokogiri (~> 1.10) + optimist (~> 3.0) + redis (4.5.1) + ruby2_keywords (0.0.5) + sinatra (2.1.0) + mustermann (~> 1.0) + rack (~> 2.2) + rack-protection (= 2.1.0) + tilt (~> 2.0) + spicy-proton (2.1.13) + bindata (~> 2.3) + statsd-ruby (1.5.0) + thrift (0.15.0) + tilt (2.0.10) + vmpooler (2.0.0) + concurrent-ruby (~> 1.1) + connection_pool (~> 2.2) + net-ldap (~> 0.16) + nokogiri (~> 1.10) + opentelemetry-exporter-jaeger (= 0.17.0) + opentelemetry-instrumentation-concurrent_ruby (= 0.17.0) + opentelemetry-instrumentation-redis (= 0.17.0) + opentelemetry-instrumentation-sinatra (= 0.17.0) + opentelemetry-resource_detectors (= 0.17.0) + opentelemetry-sdk (= 0.17.0) + pickup (~> 0.0.11) + prometheus-client (~> 2.0) + puma (~> 5.0, >= 5.0.4) + rack (~> 2.2) + rake (~> 13.0) + redis (~> 4.1) + sinatra (~> 2.0) + spicy-proton (~> 2.1) + statsd-ruby (~> 1.4) + vmpooler-provider-vsphere (1.4.0) + rbvmomi (>= 2.1, < 4.0) + +PLATFORMS + universal-java-1.8 + +DEPENDENCIES + vmpooler (~> 2.0) + vmpooler-provider-vsphere (~> 1.4) + +BUNDLED WITH + 2.2.33 diff --git a/docker/prod-all-providers/docker-compose.yml b/docker/prod-all-providers/docker-compose.yml new file mode 100644 index 0000000..415a04c --- /dev/null +++ b/docker/prod-all-providers/docker-compose.yml @@ -0,0 +1,73 @@ +# For local development run with a dummy provider +version: '3.8' +services: + vmpooler-api: + build: + context: ./ + dockerfile: Dockerfile + volumes: + - type: bind + source: ${PWD}/vmpooler.yaml + target: /etc/vmpooler/vmpooler.yaml + ports: + - "8080:4567" + networks: + - redis-net + environment: + - VMPOOLER_DEBUG=true # for use of dummy auth + - VMPOOLER_CONFIG_FILE=/etc/vmpooler/vmpooler.yaml + - REDIS_SERVER=redislocal + - LOGFILE=/dev/null + - JRUBY_OPTS=-Xinvokedynamic.yield=false + - VMPOOLER_TRACING_ENABLED=true + - VMPOOLER_TRACING_JAEGER_HOST=http://jaeger-aio:14268/api/traces + image: vmpooler-local + command: api + depends_on: + - redislocal + vmpooler-manager: + build: + context: ./ + dockerfile: Dockerfile + volumes: + - type: bind + source: ${PWD}/vmpooler.yaml + target: /etc/vmpooler/vmpooler.yaml + ports: + - "8081:4567" + networks: + - redis-net + environment: + - VMPOOLER_DEBUG=true # for use of dummy auth + - VMPOOLER_CONFIG_FILE=/etc/vmpooler/vmpooler.yaml + - REDIS_SERVER=redislocal + - LOGFILE=/dev/null + - JRUBY_OPTS=-Xinvokedynamic.yield=false + - VMPOOLER_TRACING_ENABLED=true + - VMPOOLER_TRACING_JAEGER_HOST=http://jaeger-aio:14268/api/traces + image: vmpooler-local + command: manager + depends_on: + - redislocal + redislocal: + image: redis + # Uncomment this if you don't want the redis data to persist + #command: "redis-server --save '' --appendonly no" + ports: + - "6379:6379" + networks: + - redis-net + jaeger-aio: + image: jaegertracing/all-in-one:1.18 + ports: + - "14250:14250" + - "8082:16686" + networks: + - redis-net + user: '1001' + read_only: true + cap_drop: + - ALL + +networks: + redis-net: diff --git a/docker/prod-all-providers/docker-entrypoint.sh b/docker/prod-all-providers/docker-entrypoint.sh new file mode 100644 index 0000000..07d11de --- /dev/null +++ b/docker/prod-all-providers/docker-entrypoint.sh @@ -0,0 +1,6 @@ +#!/bin/sh +set -e + +set -- bundle exec vmpooler "$@" + +exec "$@" diff --git a/docker/prod-all-providers/update-gemfile-lock.sh b/docker/prod-all-providers/update-gemfile-lock.sh new file mode 100755 index 0000000..064103b --- /dev/null +++ b/docker/prod-all-providers/update-gemfile-lock.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +docker run -it --rm \ + -v $(pwd):/app \ + $(grep ^FROM ./Dockerfile |cut -d ' ' -f2) \ + /bin/bash -c 'apt-get update -qq && apt-get install -y --no-install-recommends make && cd /app && gem install bundler && bundle install --jobs 3 && bundle update; echo "LOCK_FILE_UPDATE_EXIT_CODE=$?"'