mirror of
https://github.com/puppetlabs/vmpooler-deployment.git
synced 2026-01-26 03:28:41 -05:00
Initial commit
This commit is contained in:
commit
074778d0b0
34 changed files with 1381 additions and 0 deletions
20
.github/dependabot.yml
vendored
Normal file
20
.github/dependabot.yml
vendored
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
version: 2
|
||||
updates:
|
||||
- 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:
|
||||
interval: daily
|
||||
time: "13:00"
|
||||
open-pull-requests-limit: 10
|
||||
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
/*/**/vendor/bundle/
|
||||
/docker/**/vmpooler.yaml
|
||||
.vagrant/
|
||||
201
LICENSE
Normal file
201
LICENSE
Normal file
|
|
@ -0,0 +1,201 @@
|
|||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
7
README.md
Normal file
7
README.md
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# vmpooler-deployment
|
||||
|
||||
This repo contains Dockerfiles and a Helm chart that can be used to deploy [VMPooler](https://github.com/puppetlabs/vmpooler).
|
||||
|
||||
## Status
|
||||
|
||||
This repo is a work in progress. It mostly works but many bits need adjusting here and there as they were compiled from other locations. More details will be added soon.
|
||||
17
Vagrantfile
vendored
Normal file
17
Vagrantfile
vendored
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
# -*- mode: ruby -*-
|
||||
# vi: set ft=ruby :
|
||||
|
||||
Vagrant.configure("2") do |config|
|
||||
config.vm.box = "genebean/almalinux-8-docker-ce"
|
||||
config.vm.network "forwarded_port", guest: 8080, host: 8080 # VMPooler api in docker-compose
|
||||
config.vm.network "forwarded_port", guest: 8081, host: 8081 # VMPooler manager in docker-compose
|
||||
config.vm.network "forwarded_port", guest: 8082, host: 8082 # Jaeger in docker-compose
|
||||
config.vm.provision "shell", inline: <<-SCRIPT
|
||||
mkdir /var/log/vmpooler
|
||||
chown vagrant:vagrant /var/log/vmpooler
|
||||
curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
||||
chmod +x /usr/local/bin/docker-compose
|
||||
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
|
||||
docker-compose --version
|
||||
SCRIPT
|
||||
end
|
||||
3
docker/dev/.dockerignore
Normal file
3
docker/dev/.dockerignore
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
.bundle/
|
||||
vendor/
|
||||
update-gemfile-lock.sh
|
||||
36
docker/dev/Dockerfile
Normal file
36
docker/dev/Dockerfile
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
# 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
|
||||
|
||||
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/docker-entrypoint.sh /usr/local/bin/
|
||||
COPY ./Gemfile ./
|
||||
COPY ./vmpooler.gemspec ./
|
||||
COPY ./lib/vmpooler/version.rb ./lib/vmpooler/version.rb
|
||||
|
||||
RUN gem install bundler && \
|
||||
bundle config set --local jobs 3 && \
|
||||
bundle install
|
||||
|
||||
COPY ./ ./
|
||||
|
||||
RUN gem build vmpooler.gemspec && \
|
||||
gem install vmpooler*.gem && \
|
||||
chmod +x /usr/local/bin/docker-entrypoint.sh
|
||||
|
||||
ENTRYPOINT ["docker-entrypoint.sh"]
|
||||
39
docker/dev/Dockerfile-aio
Normal file
39
docker/dev/Dockerfile-aio
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
# 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.9-jdk
|
||||
|
||||
RUN mkdir -p /var/lib/vmpooler
|
||||
|
||||
WORKDIR /var/lib/vmpooler
|
||||
|
||||
RUN echo "deb http://httpredir.debian.org/debian jessie main" >/etc/apt/sources.list.d/jessie-main.list
|
||||
|
||||
RUN apt-get update -qq && \
|
||||
apt-get install -y --no-install-recommends make redis-server && \
|
||||
apt-get clean autoclean && \
|
||||
apt-get autoremove -y && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ADD Gemfile* /var/lib/vmpooler/
|
||||
|
||||
RUN bundle install --system
|
||||
|
||||
RUN ln -s /opt/jruby/bin/jruby /usr/bin/jruby
|
||||
|
||||
COPY . /var/lib/vmpooler
|
||||
|
||||
ENV VMPOOLER_LOG /var/log/vmpooler.log
|
||||
|
||||
CMD \
|
||||
/etc/init.d/redis-server start \
|
||||
&& /var/lib/vmpooler/scripts/vmpooler_init.sh start \
|
||||
&& while [ ! -f ${VMPOOLER_LOG} ]; do sleep 1; done ; \
|
||||
tail -f ${VMPOOLER_LOG}
|
||||
73
docker/dev/docker-compose.yml
Normal file
73
docker/dev/docker-compose.yml
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
# For local development run with a dummy provider
|
||||
version: '3.8'
|
||||
services:
|
||||
vmpooler-api:
|
||||
build:
|
||||
context: ../
|
||||
dockerfile: docker/Dockerfile_local
|
||||
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: docker/Dockerfile_local
|
||||
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:
|
||||
6
docker/dev/docker-entrypoint.sh
Normal file
6
docker/dev/docker-entrypoint.sh
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
set -- bundle exec vmpooler "$@"
|
||||
|
||||
exec "$@"
|
||||
2
docker/test-all-providers/.bundle/config
Normal file
2
docker/test-all-providers/.bundle/config
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
BUNDLE_PATH: "vendor/bundle"
|
||||
3
docker/test-all-providers/.dockerignore
Normal file
3
docker/test-all-providers/.dockerignore
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
.bundle/
|
||||
vendor/
|
||||
update-gemfile-lock.sh
|
||||
34
docker/test-all-providers/Dockerfile
Normal file
34
docker/test-all-providers/Dockerfile
Normal file
|
|
@ -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"]
|
||||
4
docker/test-all-providers/Gemfile
Normal file
4
docker/test-all-providers/Gemfile
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
source ENV['GEM_SOURCE'] || 'https://rubygems.org'
|
||||
|
||||
gem 'vmpooler', git: 'https://github.com/puppetlabs/vmpooler.git', branch: 'extract-vsphere-provider'
|
||||
gem 'vmpooler-vsphere-provider', git: 'https://github.com/puppetlabs/vmpooler-provider-vsphere.git'
|
||||
141
docker/test-all-providers/Gemfile.lock
Normal file
141
docker/test-all-providers/Gemfile.lock
Normal file
|
|
@ -0,0 +1,141 @@
|
|||
GIT
|
||||
remote: https://github.com/puppetlabs/vmpooler-provider-vsphere.git
|
||||
revision: a08cba099f867b1db01a50940ec3ae9239245db5
|
||||
specs:
|
||||
vmpooler-vsphere-provider (1.3.0)
|
||||
rbvmomi (>= 2.1, < 4.0)
|
||||
|
||||
GIT
|
||||
remote: https://github.com/puppetlabs/vmpooler.git
|
||||
revision: d1c86eaf9b8fc1945213dad009db1172dffac7f2
|
||||
branch: extract-vsphere-provider
|
||||
specs:
|
||||
vmpooler (1.3.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)
|
||||
|
||||
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)
|
||||
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)
|
||||
nio4r (2.5.8-java)
|
||||
nokogiri (1.12.5-java)
|
||||
racc (~> 1.4)
|
||||
nokogiri (1.12.5-x86_64-linux)
|
||||
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)
|
||||
nio4r (~> 2.0)
|
||||
puma (5.5.2-java)
|
||||
nio4r (~> 2.0)
|
||||
racc (1.6.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)
|
||||
|
||||
PLATFORMS
|
||||
universal-java-1.8
|
||||
x86_64-linux
|
||||
|
||||
DEPENDENCIES
|
||||
vmpooler!
|
||||
vmpooler-vsphere-provider!
|
||||
|
||||
BUNDLED WITH
|
||||
2.2.32
|
||||
73
docker/test-all-providers/docker-compose.yml
Normal file
73
docker/test-all-providers/docker-compose.yml
Normal file
|
|
@ -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:
|
||||
6
docker/test-all-providers/docker-entrypoint.sh
Normal file
6
docker/test-all-providers/docker-entrypoint.sh
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
set -- bundle exec vmpooler "$@"
|
||||
|
||||
exec "$@"
|
||||
6
docker/test-all-providers/update-gemfile-lock.sh
Executable file
6
docker/test-all-providers/update-gemfile-lock.sh
Executable file
|
|
@ -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'
|
||||
23
helm/vmpooler/.helmignore
Normal file
23
helm/vmpooler/.helmignore
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
# Patterns to ignore when building packages.
|
||||
# This supports shell glob matching, relative path matching, and
|
||||
# negation (prefixed with !). Only one pattern per line.
|
||||
.DS_Store
|
||||
# Common VCS dirs
|
||||
.git/
|
||||
.gitignore
|
||||
.bzr/
|
||||
.bzrignore
|
||||
.hg/
|
||||
.hgignore
|
||||
.svn/
|
||||
# Common backup files
|
||||
*.swp
|
||||
*.bak
|
||||
*.tmp
|
||||
*.orig
|
||||
*~
|
||||
# Various IDEs
|
||||
.project
|
||||
.idea/
|
||||
*.tmproj
|
||||
.vscode/
|
||||
6
helm/vmpooler/Chart.lock
Normal file
6
helm/vmpooler/Chart.lock
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
dependencies:
|
||||
- name: redis
|
||||
repository: https://charts.bitnami.com/bitnami
|
||||
version: 10.7.12
|
||||
digest: sha256:cd2b6498209e347387f3467403cb063d93a44fdd345cd75fb090eed1eb8debee
|
||||
generated: "2020-08-03T16:14:08.491207-07:00"
|
||||
10
helm/vmpooler/Chart.yaml
Normal file
10
helm/vmpooler/Chart.yaml
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
apiVersion: v2
|
||||
name: vmpooler
|
||||
description: A Helm chart to deploy vmpooler
|
||||
type: application
|
||||
version: 1.5.2
|
||||
appVersion: 1.3.0
|
||||
dependencies:
|
||||
- name: redis
|
||||
repository: https://charts.bitnami.com/bitnami
|
||||
version: 10.7.12
|
||||
BIN
helm/vmpooler/charts/redis-10.7.12.tgz
Normal file
BIN
helm/vmpooler/charts/redis-10.7.12.tgz
Normal file
Binary file not shown.
21
helm/vmpooler/templates/NOTES.txt
Normal file
21
helm/vmpooler/templates/NOTES.txt
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
1. Get the application URL by running these commands:
|
||||
{{- if .Values.ingress.enabled }}
|
||||
{{- range $host := .Values.ingress.hosts }}
|
||||
{{- range .paths }}
|
||||
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- else if contains "NodePort" .Values.service.type }}
|
||||
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "vmpooler.fullname" . }})
|
||||
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||
echo http://$NODE_IP:$NODE_PORT
|
||||
{{- else if contains "LoadBalancer" .Values.service.type }}
|
||||
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||
You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "vmpooler.fullname" . }}'
|
||||
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "vmpooler.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
|
||||
echo http://$SERVICE_IP:{{ .Values.service.port }}
|
||||
{{- else if contains "ClusterIP" .Values.service.type }}
|
||||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "vmpooler.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||
echo "Visit http://127.0.0.1:8080 to use your application"
|
||||
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80
|
||||
{{- end }}
|
||||
63
helm/vmpooler/templates/_helpers.tpl
Normal file
63
helm/vmpooler/templates/_helpers.tpl
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
{{/* vim: set filetype=mustache: */}}
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "vmpooler.name" -}}
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create a default fully qualified app name.
|
||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||
If release name contains chart name it will be used as a full name.
|
||||
*/}}
|
||||
{{- define "vmpooler.fullname" -}}
|
||||
{{- if .Values.fullnameOverride -}}
|
||||
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||
{{- if contains $name .Release.Name -}}
|
||||
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create chart name and version as used by the chart label.
|
||||
*/}}
|
||||
{{- define "vmpooler.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Common labels
|
||||
*/}}
|
||||
{{- define "vmpooler.labels" -}}
|
||||
helm.sh/chart: {{ include "vmpooler.chart" . }}
|
||||
{{ include "vmpooler.selectorLabels" . }}
|
||||
{{- if .Chart.AppVersion }}
|
||||
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||
{{- end }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Selector labels
|
||||
*/}}
|
||||
{{- define "vmpooler.selectorLabels" -}}
|
||||
app.kubernetes.io/name: {{ include "vmpooler.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create the name of the service account to use
|
||||
*/}}
|
||||
{{- define "vmpooler.serviceAccountName" -}}
|
||||
{{- if .Values.serviceAccount.create -}}
|
||||
{{ default (include "vmpooler.fullname" .) .Values.serviceAccount.name }}
|
||||
{{- else -}}
|
||||
{{ default "default" .Values.serviceAccount.name }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
20
helm/vmpooler/templates/configmap-vmpooler-baseconfig.yaml
Normal file
20
helm/vmpooler/templates/configmap-vmpooler-baseconfig.yaml
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: vmpooler-baseconfig
|
||||
data:
|
||||
vmpooler.yaml: |
|
||||
---
|
||||
{{- with .Values.baseconfig_extras }}
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
|
||||
:tagfilter:
|
||||
project: '^([^/]+)'
|
||||
|
||||
:auth:
|
||||
{{- with .Values.auth }}
|
||||
{{- toYaml . | nindent 6 }}
|
||||
{{- end }}
|
||||
:prometheus:
|
||||
prefix: {{ .Values.vmpoolerInstance }}
|
||||
11
helm/vmpooler/templates/configmap-vmpooler-pools.yaml
Normal file
11
helm/vmpooler/templates/configmap-vmpooler-pools.yaml
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{{- if eq .Values.poolsConfigMapName "vmpooler-pools" -}}
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: vmpooler-pools
|
||||
data:
|
||||
pools.yaml: |
|
||||
---
|
||||
:pools:
|
||||
{{- toYaml .Values.pools | nindent 6 }}
|
||||
{{- end -}}
|
||||
122
helm/vmpooler/templates/deployment-api.yaml
Normal file
122
helm/vmpooler/templates/deployment-api.yaml
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
{{- $fullName := include "vmpooler.fullname" . -}}
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ $fullName }}-api
|
||||
labels:
|
||||
app: {{ $fullName }}-api
|
||||
redis-client: "true"
|
||||
{{- include "vmpooler.labels" . | nindent 4 }}
|
||||
test: liveness
|
||||
annotations:
|
||||
configmap.reloader.stakater.com/reload: "{{ .Values.configmapName }},vmpooler-pools"
|
||||
secret.reloader.stakater.com/reload: 'redis'
|
||||
spec:
|
||||
replicas: {{ .Values.api.replicaCount }}
|
||||
selector:
|
||||
matchLabels:
|
||||
app: {{ $fullName }}-api
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ $fullName }}-api
|
||||
spec:
|
||||
{{- with .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
serviceAccountName: {{ include "vmpooler.serviceAccountName" . }}
|
||||
securityContext:
|
||||
{{- toYaml .Values.podSecurityContext | nindent 8 }}
|
||||
containers:
|
||||
- name: {{ $fullName }}-api
|
||||
securityContext:
|
||||
{{- toYaml .Values.securityContext | nindent 12 }}
|
||||
image: "{{ .Values.image.repository }}:{{ .Chart.AppVersion }}"
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
ports:
|
||||
- containerPort: {{ .Values.service.port }}
|
||||
resources:
|
||||
{{- toYaml .Values.api.resources | nindent 12 }}
|
||||
args:
|
||||
- 'api'
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /api/v1/status
|
||||
port: {{ .Values.service.port }}
|
||||
initialDelaySeconds: 40
|
||||
periodSeconds: 10
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /api/v1/status
|
||||
port: {{ .Values.service.port }}
|
||||
initialDelaySeconds: 40
|
||||
periodSeconds: 10
|
||||
env:
|
||||
- name: JRUBY_OPTS
|
||||
value: '-J-XX:+UseG1GC'
|
||||
- name: PORT
|
||||
value: {{ .Values.service.port | quote }}
|
||||
- name: SITE_NAME
|
||||
value: '<b>{{ .Values.vmpoolerInstance }}</b>.{{ .Values.ingress.domain }}'
|
||||
- name: DOMAIN
|
||||
value: {{ .Values.sut_domain }}
|
||||
- name: EXPERIMENTAL_FEATURES
|
||||
value: 'true'
|
||||
- name: USAGE_STATS
|
||||
value: '{{ .Values.usage_stats }}'
|
||||
- name: VMPOOLER_CONFIG_FILE
|
||||
value: /etc/vmpooler/vmpooler.yaml
|
||||
- name: VMPOOLER_TRACING_ENABLED
|
||||
value: '{{ .Values.tracing.enabled }}'
|
||||
- name: VMPOOLER_TRACING_JAEGER_HOST
|
||||
value: '{{ .Values.tracing.jaegerHost }}'
|
||||
- name: EXTRA_CONFIG
|
||||
value: '/etc/vmpooler/config/pools.yaml'
|
||||
- name: REDIS_SERVER
|
||||
value: 'redis-master'
|
||||
- name: ONDEMAND_REQUEST_TTL
|
||||
value: "50"
|
||||
- name: ONDEMAND_CLONE_LIMIT
|
||||
value: "50"
|
||||
- name: MAX_LIFETIME_UPPER_LIMIT
|
||||
value: "336"
|
||||
- name: VM_LIFETIME
|
||||
value: '2'
|
||||
- name: VM_LIFETIME_AUTH
|
||||
value: '12'
|
||||
- name: REDIS_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: redis
|
||||
key: redis-password
|
||||
volumeMounts:
|
||||
- name: config-volume
|
||||
mountPath: /etc/vmpooler
|
||||
- name: pools-config
|
||||
mountPath: /etc/vmpooler/config
|
||||
volumes:
|
||||
- name: config-volume
|
||||
configMap:
|
||||
name: {{ .Values.configmapName }}
|
||||
items:
|
||||
- key: vmpooler.yaml
|
||||
path: vmpooler.yaml
|
||||
- name: pools-config
|
||||
configMap:
|
||||
name: vmpooler-pools
|
||||
items:
|
||||
- key: pools.yaml
|
||||
path: pools.yaml
|
||||
{{- with .Values.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.affinity }}
|
||||
affinity:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.tolerations }}
|
||||
tolerations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
162
helm/vmpooler/templates/deployment-manager.yaml
Normal file
162
helm/vmpooler/templates/deployment-manager.yaml
Normal file
|
|
@ -0,0 +1,162 @@
|
|||
{{- $fullName := include "vmpooler.fullname" . -}}
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ $fullName }}-manager
|
||||
labels:
|
||||
app: {{ $fullName }}-manager
|
||||
redis-client: "true"
|
||||
{{- include "vmpooler.labels" . | nindent 4 }}
|
||||
test: liveness
|
||||
annotations:
|
||||
configmap.reloader.stakater.com/reload: "{{ .Values.configmapName }},vmpooler-pools"
|
||||
secret.reloader.stakater.com/reload: 'redis'
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: {{ $fullName }}-manager
|
||||
strategy:
|
||||
type: Recreate
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ $fullName }}-manager
|
||||
{{- with .Values.manager.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- with .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
serviceAccountName: {{ include "vmpooler.serviceAccountName" . }}
|
||||
securityContext:
|
||||
{{- toYaml .Values.podSecurityContext | nindent 8 }}
|
||||
containers:
|
||||
- name: {{ $fullName }}-manager
|
||||
securityContext:
|
||||
{{- toYaml .Values.securityContext | nindent 12 }}
|
||||
image: "{{ .Values.image.repository }}:{{ .Chart.AppVersion }}"
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
ports:
|
||||
- containerPort: {{ .Values.service.port }}
|
||||
resources:
|
||||
{{- toYaml .Values.manager.resources | nindent 12 }}
|
||||
args:
|
||||
- 'manager'
|
||||
livenessProbe:
|
||||
exec:
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- ps -p 1 > /dev/null
|
||||
initialDelaySeconds: 40
|
||||
periodSeconds: 10
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- ps -p 1 > /dev/null
|
||||
initialDelaySeconds: 40
|
||||
periodSeconds: 10
|
||||
env:
|
||||
- name: JRUBY_OPTS
|
||||
value: '-J-XX:+UseG1GC -Xinvokedynamic.yield=false'
|
||||
- name: TASK_LIMIT
|
||||
value: '30'
|
||||
- name: MIGRATION_LIMIT
|
||||
value: '10'
|
||||
- name: VM_LIFETIME
|
||||
value: '2'
|
||||
- name: VM_LIFETIME_AUTH
|
||||
value: '12'
|
||||
- name: VM_CHECKTIME
|
||||
value: '1'
|
||||
- name: CREATE_FOLDERS
|
||||
value: 'true'
|
||||
- name: CREATE_TEMPLATE_DELTA_DISKS
|
||||
value: 'true'
|
||||
- name: CREATE_LINKED_CLONES
|
||||
value: 'true'
|
||||
- name: MAX_TRIES
|
||||
value: '3'
|
||||
- name: RETRY_FACTOR
|
||||
value: '20'
|
||||
- name: PURGE_UNCONFIGURED_FOLDERS
|
||||
value: 'true'
|
||||
- name: DOMAIN
|
||||
value: {{ .Values.sut_domain }}
|
||||
- name: VMPOOLER_CONFIG_FILE
|
||||
value: /etc/vmpooler/vmpooler.yaml
|
||||
- name: VMPOOLER_TRACING_ENABLED
|
||||
value: '{{ .Values.tracing.enabled }}'
|
||||
- name: VMPOOLER_TRACING_JAEGER_HOST
|
||||
value: '{{ .Values.tracing.jaegerHost }}'
|
||||
- name: LOGFILE
|
||||
value: /dev/stdout
|
||||
- name: EXTRA_CONFIG
|
||||
value: '{{ .Values.additionalConfigFiles }}'
|
||||
- name: TIMEOUT
|
||||
value: '15'
|
||||
- name: READY_TTL
|
||||
value: "480"
|
||||
- name: REDIS_SERVER
|
||||
value: 'redis-master'
|
||||
- name: REDIS_CONNECTION_POOL_SIZE
|
||||
value: "200"
|
||||
- name: REDIS_CONNECTION_POOL_TIMEOUT
|
||||
value: "40"
|
||||
- name: ONDEMAND_REQUEST_TTL
|
||||
value: "50"
|
||||
- name: ONDEMAND_CLONE_LIMIT
|
||||
value: "50"
|
||||
- name: REDIS_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: redis
|
||||
key: redis-password
|
||||
volumeMounts:
|
||||
- name: base-config
|
||||
mountPath: /etc/vmpooler
|
||||
- name: pools-config
|
||||
mountPath: /etc/vmpooler/config
|
||||
volumes:
|
||||
- name: base-config
|
||||
configMap:
|
||||
name: {{ .Values.configmapName }}
|
||||
items:
|
||||
- key: vmpooler.yaml
|
||||
path: vmpooler.yaml
|
||||
- name: pools-config
|
||||
configMap:
|
||||
name: {{ .Values.poolsConfigMapName }}
|
||||
items:
|
||||
- key: pools.yaml
|
||||
path: pools.yaml
|
||||
{{- with .Values.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.affinity }}
|
||||
affinity:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.tolerations }}
|
||||
tolerations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.affinity }}
|
||||
affinity:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.tolerations }}
|
||||
tolerations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
33
helm/vmpooler/templates/ingress.yaml
Normal file
33
helm/vmpooler/templates/ingress.yaml
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
{{- if .Values.ingress.enabled -}}
|
||||
{{- $fullName := include "vmpooler.fullname" . -}}
|
||||
{{- $svcPort := .Values.service.port -}}
|
||||
{{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
|
||||
apiVersion: networking.k8s.io/v1beta1
|
||||
{{- else -}}
|
||||
apiVersion: extensions/v1beta1
|
||||
{{- end }}
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: {{ $fullName }}
|
||||
labels:
|
||||
{{- include "vmpooler.labels" . | nindent 4 }}
|
||||
{{- with .Values.ingress.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
rules:
|
||||
- host: '{{ .Values.vmpoolerInstance }}.{{ .Values.ingress.domain }}'
|
||||
http:
|
||||
paths:
|
||||
- backend:
|
||||
serviceName: {{ $fullName }}-api
|
||||
servicePort: {{ $svcPort }}
|
||||
path: /
|
||||
{{ if .Values.ingress.useTLS -}}
|
||||
tls:
|
||||
- hosts:
|
||||
- '{{ .Values.vmpoolerInstance }}.{{ .Values.ingress.domain }}'
|
||||
secretName: '{{ .Values.vmpoolerInstance }}.{{ .Values.ingress.domain }}-tls'
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
19
helm/vmpooler/templates/service-api.yaml
Normal file
19
helm/vmpooler/templates/service-api.yaml
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ include "vmpooler.fullname" . }}-api
|
||||
labels:
|
||||
{{- include "vmpooler.labels" . | nindent 4 }}
|
||||
annotations:
|
||||
prometheus.io/scrape: {{ .Values.service.metricsEnabled | quote }}
|
||||
prometheus.io/path: '/prometheus'
|
||||
spec:
|
||||
type: {{ .Values.service.type }}
|
||||
ports:
|
||||
- port: {{ .Values.service.port }}
|
||||
targetPort: {{ .Values.service.port }}
|
||||
protocol: TCP
|
||||
name: http
|
||||
clusterIP: None
|
||||
selector:
|
||||
app: {{ include "vmpooler.fullname" . }}-api
|
||||
19
helm/vmpooler/templates/service-manager.yaml
Normal file
19
helm/vmpooler/templates/service-manager.yaml
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ include "vmpooler.fullname" . }}-manager
|
||||
labels:
|
||||
{{- include "vmpooler.labels" . | nindent 4 }}
|
||||
annotations:
|
||||
prometheus.io/scrape: {{ .Values.service.metricsEnabled | quote }}
|
||||
prometheus.io/path: '/prometheus'
|
||||
spec:
|
||||
type: {{ .Values.service.type }}
|
||||
ports:
|
||||
- port: {{ .Values.service.port }}
|
||||
targetPort: {{ .Values.service.port }}
|
||||
protocol: TCP
|
||||
name: http
|
||||
clusterIP: None
|
||||
selector:
|
||||
app: {{ include "vmpooler.fullname" . }}-manager
|
||||
12
helm/vmpooler/templates/serviceaccount.yaml
Normal file
12
helm/vmpooler/templates/serviceaccount.yaml
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{{- if .Values.serviceAccount.create -}}
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: {{ include "vmpooler.serviceAccountName" . }}
|
||||
labels:
|
||||
{{- include "vmpooler.labels" . | nindent 4 }}
|
||||
{{- with .Values.serviceAccount.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
15
helm/vmpooler/templates/tests/test-connection.yaml
Normal file
15
helm/vmpooler/templates/tests/test-connection.yaml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: "{{ include "vmpooler.fullname" . }}-test-connection"
|
||||
labels:
|
||||
{{- include "vmpooler.labels" . | nindent 4 }}
|
||||
annotations:
|
||||
"helm.sh/hook": test-success
|
||||
spec:
|
||||
containers:
|
||||
- name: wget
|
||||
image: busybox
|
||||
command: ['wget']
|
||||
args: ['{{ include "vmpooler.fullname" . }}:{{ .Values.service.port }}']
|
||||
restartPolicy: Never
|
||||
171
helm/vmpooler/values.yaml
Normal file
171
helm/vmpooler/values.yaml
Normal file
|
|
@ -0,0 +1,171 @@
|
|||
# this is used for the site name, the metrics prefix, and is
|
||||
# the hostname in the ingress
|
||||
vmpoolerInstance: 'test-instance'
|
||||
|
||||
image:
|
||||
repository: vmpooler
|
||||
pullPolicy: Always
|
||||
|
||||
configmapName: 'vmpooler-baseconfig'
|
||||
sut_domain: 'vmpooler.example.com'
|
||||
usage_stats: true
|
||||
|
||||
tracing:
|
||||
enabled: 'false'
|
||||
# jaegerHost: 'http://otel-collector.otel-collector.svc:14268/api/traces'
|
||||
|
||||
baseconfig_extras: {}
|
||||
# :config:
|
||||
# backend_weight:
|
||||
# vmware_cluster1: 0
|
||||
# vmware_cluster2: 100
|
||||
# vmware_cluster4: 180
|
||||
|
||||
auth:
|
||||
provider: 'dummy'
|
||||
# provider: 'ldap'
|
||||
# :ldap:
|
||||
# host: 'ldap.example.com'
|
||||
# port: 636
|
||||
# encryption:
|
||||
# :method: :simple_tls
|
||||
# :tls_options:
|
||||
# :ssl_version: 'TLSv1_2'
|
||||
# base:
|
||||
# - 'ou=dept1,dc=example,dc=com'
|
||||
# - 'ou=dept2,dc=example,dc=com'
|
||||
# user_object:
|
||||
# - 'uid'
|
||||
# - 'cn'
|
||||
|
||||
additionalConfigFiles: '/etc/vmpooler/config/pools.yaml'
|
||||
|
||||
api:
|
||||
replicaCount: 1
|
||||
resources:
|
||||
requests:
|
||||
cpu: 1500m
|
||||
memory: 2Gi
|
||||
limits:
|
||||
cpu: 2000m
|
||||
memory: 2Gi
|
||||
|
||||
manager:
|
||||
resources:
|
||||
requests:
|
||||
cpu: 4000m
|
||||
memory: 4Gi
|
||||
limits:
|
||||
cpu: 4000m
|
||||
memory: 4Gi
|
||||
annotations: {}
|
||||
|
||||
serviceAccount:
|
||||
# Specifies whether a service account should be created
|
||||
create: true
|
||||
# Annotations to add to the service account
|
||||
annotations: {}
|
||||
# The name of the service account to use.
|
||||
# If not set and create is true, a name is generated using the fullname template
|
||||
# Letting the name be created automatically will prevent the SA resource from being
|
||||
# shared between multiple instances of vmpooler such as when stage and prod are both
|
||||
# deployed to the same cluster.
|
||||
name: ''
|
||||
|
||||
podSecurityContext:
|
||||
fsGroup: 1001
|
||||
|
||||
securityContext:
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
runAsNonRoot: true
|
||||
readOnlyRootFilesystem: true
|
||||
runAsUser: 1001
|
||||
runAsGroup: 1001
|
||||
|
||||
service:
|
||||
type: ClusterIP
|
||||
port: 4567
|
||||
metricsEnabled: true
|
||||
|
||||
ingress:
|
||||
enabled: false
|
||||
# useTLS: true
|
||||
# annotations:
|
||||
# cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||
# kubernetes.io/ingress.class: nginx
|
||||
# kubernetes.io/tls-acme: 'true'
|
||||
# nginx.ingress.kubernetes.io/ssl-redirect: 'true'
|
||||
# domain: k8s.example.com
|
||||
|
||||
nodeSelector: {}
|
||||
|
||||
tolerations: []
|
||||
|
||||
affinity: {}
|
||||
|
||||
# Redis provided by bitnami/redis
|
||||
# For a full list of parameters see: https://github.com/bitnami/charts/tree/master/bitnami/redis/
|
||||
redis:
|
||||
fullnameOverride: redis
|
||||
cluster:
|
||||
enabled: false
|
||||
networkPolicy:
|
||||
enabled: true
|
||||
securityContext:
|
||||
enabled: true
|
||||
fsGroup: 1001
|
||||
runAsUser: 1001
|
||||
master:
|
||||
resources:
|
||||
requests:
|
||||
cpu: 1000m
|
||||
memory: 2048Mi
|
||||
limits:
|
||||
cpu: 1000m
|
||||
memory: 2048Mi
|
||||
livenessProbe:
|
||||
failureThreshold: 10
|
||||
readinessProbe:
|
||||
failureThreshold: 10
|
||||
metrics:
|
||||
enabled: true
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 64Mi
|
||||
limits:
|
||||
cpu: 200m
|
||||
memory: 256Mi
|
||||
|
||||
|
||||
# Pools are listed last becaue the list can be really long when listed here.
|
||||
# The default ConfigMap uses the value of the pools key to create pools.yaml.
|
||||
# You could, instead, provide your own ConfigMap and specify its name below.
|
||||
poolsConfigMapName: vmpooler-pools
|
||||
pools:
|
||||
- name: 'almalinux-8-x86_64-pixa4'
|
||||
template: 'templates/cluster2/almalinux-8-x86_64-0.0.2'
|
||||
folder: 'test-instance/cluster2/almalinux-8-x86_64'
|
||||
datastore: 'vmpooler_cluster2'
|
||||
clone_target: 'cluster2'
|
||||
size: 5
|
||||
datacenter: 'pix'
|
||||
provider: 'vsphere-ci67'
|
||||
snapshot_mainMem_ioBlockPages: '2048'
|
||||
snapshot_mainMem_iowait: '5'
|
||||
network: 'vmpooler1'
|
||||
- name: 'centos-6-x86_64-pixa4'
|
||||
alias: [ 'centos-6-x86_64' ]
|
||||
template: 'templates/cluster2/centos-6.8-x86_64-0.0.2-8gb'
|
||||
folder: test-instance/cluster2/centos-6-x86_64'
|
||||
datastore: 'vmpooler_cluster2'
|
||||
clone_target: 'cluster2'
|
||||
size: 0
|
||||
timeout: 5
|
||||
datacenter: 'pix'
|
||||
provider: 'vsphere-ci67'
|
||||
snapshot_mainMem_ioBlockPages: '2048'
|
||||
snapshot_mainMem_iowait: '5'
|
||||
network: 'vmpooler2'
|
||||
Loading…
Add table
Add a link
Reference in a new issue