Upgrade to Ruby 2.7.
created from upstream commit: 9c8f75084ec39957bca57da8c9e178855baa31ea
This commit is contained in:
parent
a4e75f54ed
commit
5cd1e59d71
17 changed files with 3485 additions and 166 deletions
10
Dockerfile
10
Dockerfile
|
|
@ -1,4 +1,4 @@
|
|||
FROM registry.fedoraproject.org/f31/s2i-base
|
||||
FROM registry.fedoraproject.org/f33/s2i-base
|
||||
|
||||
# This image provides a Ruby environment you can use to run your Ruby
|
||||
# applications.
|
||||
|
|
@ -6,8 +6,8 @@ FROM registry.fedoraproject.org/f31/s2i-base
|
|||
EXPOSE 8080
|
||||
|
||||
ENV NAME=ruby \
|
||||
RUBY_VERSION=2.6 \
|
||||
RUBY_SHORT_VER=26 \
|
||||
RUBY_VERSION=2.7 \
|
||||
RUBY_SHORT_VER=27 \
|
||||
VERSION=0
|
||||
|
||||
ENV SUMMARY="Platform for building and running Ruby $RUBY_VERSION applications" \
|
||||
|
|
@ -26,11 +26,11 @@ LABEL summary="$SUMMARY" \
|
|||
com.redhat.component="$NAME" \
|
||||
name="$FGC/$NAME" \
|
||||
version="$VERSION" \
|
||||
usage="s2i build https://github.com/sclorg/s2i-ruby-container.git --context-dir=2.4/test/puma-test-app/ registry.fedoraproject.org/$FGC/ruby ruby-sample-app" \
|
||||
usage="s2i build https://github.com/sclorg/s2i-ruby-container.git --context-dir=${RUBY_VERSION}/test/puma-test-app/ registry.fedoraproject.org/$FGC/ruby ruby-sample-app" \
|
||||
maintainer="SoftwareCollections.org <sclorg@redhat.com>"
|
||||
|
||||
# Install required packages
|
||||
RUN INSTALL_PKGS="python2 ruby ruby-devel rubygem-bundler rubygem-rake rubygems-devel redhat-rpm-config" && \
|
||||
RUN INSTALL_PKGS="ruby ruby-devel rubygem-bundler rubygem-rake rubygems-devel redhat-rpm-config libffi-devel" && \
|
||||
dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS && \
|
||||
rpm -V $INSTALL_PKGS && \
|
||||
dnf clean all
|
||||
|
|
|
|||
27
README.md
27
README.md
|
|
@ -1,9 +1,10 @@
|
|||
Ruby 2.6 container image
|
||||
=================
|
||||
This container image includes Ruby 2.6 as a [S2I](https://github.com/openshift/source-to-image) base image for your Ruby 2.6 applications.
|
||||
Ruby 2.7 container image
|
||||
========================
|
||||
|
||||
This container image includes Ruby 2.7 as a [S2I](https://github.com/openshift/source-to-image) base image for your Ruby 2.7 applications.
|
||||
Users can choose between RHEL, CentOS and Fedora based builder images.
|
||||
The RHEL images are available in the [Red Hat Container Catalog](https://access.redhat.com/containers/),
|
||||
the CentOS images are available on [Docker Hub](https://hub.docker.com/r/centos/),
|
||||
the CentOS images are available on [Quay.io](https://quay.io/organization/centos7),
|
||||
and the Fedora images are available in [Fedora Registry](https://registry.fedoraproject.org/).
|
||||
The resulting image can be run using [podman](https://github.com/containers/libpod).
|
||||
|
||||
|
|
@ -12,8 +13,8 @@ Note: while the examples in this README are calling `podman`, you can replace an
|
|||
Description
|
||||
-----------
|
||||
|
||||
Ruby 2.6 available as container is a base platform for
|
||||
building and running various Ruby 2.6 applications and frameworks.
|
||||
Ruby 2.7 available as container is a base platform for
|
||||
building and running various Ruby 2.7 applications and frameworks.
|
||||
Ruby is the interpreted scripting language for quick and easy object-oriented programming.
|
||||
It has many features to process text files and to do system management tasks (as in Perl).
|
||||
It is simple, straight-forward, and extensible.
|
||||
|
|
@ -24,19 +25,19 @@ version, that is included in the image; those versions can be changed anytime an
|
|||
the nodejs itself is included just to make the npm work.
|
||||
|
||||
Usage
|
||||
---------------------
|
||||
For this, we will assume that you are using the `ubi8/ruby-26 image`, available via `ruby:2.6` imagestream tag in Openshift.
|
||||
Building a simple [ruby-sample-app](https://github.com/sclorg/s2i-ruby-container/tree/master/2.6/test/puma-test-app) application
|
||||
-----
|
||||
For this, we will assume that you are using the `ubi8/ruby-27 image`, available via `ruby:2.7` imagestream tag in Openshift.
|
||||
Building a simple [ruby-sample-app](https://github.com/sclorg/s2i-ruby-container/tree/master/2.7/test/puma-test-app) application
|
||||
in Openshift can be achieved with the following step:
|
||||
|
||||
```
|
||||
$ oc new-app ruby:2.6~https://github.com/sclorg/s2i-ruby-container.git --context-dir=2.6/test/puma-test-app/
|
||||
$ oc new-app ruby:2.7~https://github.com/sclorg/s2i-ruby-container.git --context-dir=2.7/test/puma-test-app/
|
||||
```
|
||||
|
||||
The same application can also be built using the standalone [S2I](https://github.com/openshift/source-to-image) application on systems that have it available:
|
||||
|
||||
```
|
||||
$ s2i build https://github.com/sclorg/s2i-ruby-container.git --context-dir=2.6/test/puma-test-app/ ubi8/ruby-26 ruby-sample-app
|
||||
$ s2i build https://github.com/sclorg/s2i-ruby-container.git --context-dir=2.7/test/puma-test-app/ ubi8/ruby-27 ruby-sample-app
|
||||
```
|
||||
|
||||
**Accessing the application:**
|
||||
|
|
@ -75,7 +76,7 @@ file inside your source code repository.
|
|||
Set this variable to use a custom RubyGems mirror URL to download required gem packages during build process.
|
||||
|
||||
Hot deploy
|
||||
---------------------
|
||||
----------
|
||||
In order to dynamically pick up changes made in your application source code, you need to make following steps:
|
||||
|
||||
* **For Ruby on Rails applications**
|
||||
|
|
@ -107,7 +108,7 @@ After you [podman exec](https://github.com/containers/libpod) into the running c
|
|||
directory is set to `/opt/app-root/src`, where the source code is located.
|
||||
|
||||
Performance tuning
|
||||
---------------------
|
||||
------------------
|
||||
You can tune the number of threads per worker using the
|
||||
`PUMA_MIN_THREADS` and `PUMA_MAX_THREADS` environment variables.
|
||||
Additionally, the number of worker processes is determined by the number of CPU
|
||||
|
|
|
|||
81
root/help.1
81
root/help.1
|
|
@ -1,7 +1,8 @@
|
|||
.TH Ruby 2.6 container image
|
||||
.nh
|
||||
.TH Ruby 2.7 container image
|
||||
.PP
|
||||
This container image includes Ruby 2.6 as a S2I
|
||||
\[la]https://github.com/openshift/source-to-image\[ra] base image for your Ruby 2.6 applications.
|
||||
This container image includes Ruby 2.7 as a S2I
|
||||
\[la]https://github.com/openshift/source-to-image\[ra] base image for your Ruby 2.7 applications.
|
||||
Users can choose between RHEL, CentOS and Fedora based builder images.
|
||||
The RHEL images are available in the Red Hat Container Catalog
|
||||
\[la]https://access.redhat.com/containers/\[ra],
|
||||
|
|
@ -17,8 +18,8 @@ Note: while the examples in this README are calling \fB\fCpodman\fR, you can rep
|
|||
|
||||
.SH Description
|
||||
.PP
|
||||
Ruby 2.6 available as container is a base platform for
|
||||
building and running various Ruby 2.6 applications and frameworks.
|
||||
Ruby 2.7 available as container is a base platform for
|
||||
building and running various Ruby 2.7 applications and frameworks.
|
||||
Ruby is the interpreted scripting language for quick and easy object\-oriented programming.
|
||||
It has many features to process text files and to do system management tasks (as in Perl).
|
||||
It is simple, straight\-forward, and extensible.
|
||||
|
|
@ -31,9 +32,9 @@ the nodejs itself is included just to make the npm work.
|
|||
|
||||
.SH Usage
|
||||
.PP
|
||||
For this, we will assume that you are using the \fB\fCubi8/ruby\-26 image\fR, available via \fB\fCruby:2.6\fR imagestream tag in Openshift.
|
||||
For this, we will assume that you are using the \fB\fCubi8/ruby\-27 image\fR, available via \fB\fCruby:2.7\fR imagestream tag in Openshift.
|
||||
Building a simple ruby\-sample\-app
|
||||
\[la]https://github.com/sclorg/s2i-ruby-container/tree/master/2.6/test/puma-test-app\[ra] application
|
||||
\[la]https://github.com/sclorg/s2i-ruby-container/tree/master/2.7/test/puma-test-app\[ra] application
|
||||
in Openshift can be achieved with the following step:
|
||||
|
||||
.PP
|
||||
|
|
@ -41,7 +42,7 @@ in Openshift can be achieved with the following step:
|
|||
|
||||
.nf
|
||||
```
|
||||
$ oc new\-app ruby:2.6\~https://github.com/sclorg/s2i\-ruby\-container.git \-\-context\-dir=2.6/test/puma\-test\-app/
|
||||
$ oc new\-app ruby:2.7\~https://github.com/sclorg/s2i\-ruby\-container.git \-\-context\-dir=2.7/test/puma\-test\-app/
|
||||
```
|
||||
|
||||
.fi
|
||||
|
|
@ -56,7 +57,7 @@ The same application can also be built using the standalone S2I
|
|||
|
||||
.nf
|
||||
```
|
||||
$ s2i build https://github.com/sclorg/s2i\-ruby\-container.git \-\-context\-dir=2.6/test/puma\-test\-app/ ubi8/ruby\-26 ruby\-sample\-app
|
||||
$ s2i build https://github.com/sclorg/s2i\-ruby\-container.git \-\-context\-dir=2.7/test/puma\-test\-app/ ubi8/ruby\-27 ruby\-sample\-app
|
||||
```
|
||||
|
||||
.fi
|
||||
|
|
@ -81,42 +82,19 @@ file inside your source code repository.
|
|||
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
|
||||
.PP
|
||||
\fBRACK\_ENV\fP
|
||||
.PP
|
||||
This variable specifies the environment where the Ruby application will be deployed (unless overwritten) \- \fB\fCproduction\fR, \fB\fCdevelopment\fR, \fB\fCtest\fR\&.
|
||||
Each level has different behaviors in terms of logging verbosity, error pages, ruby gem installation, etc.
|
||||
|
||||
.PP
|
||||
\fBNote\fP: Application assets will be compiled only if the \fB\fCRACK\_ENV\fR is set to \fB\fCproduction\fR
|
||||
\fBRACK\_ENV\fPThis variable specifies the environment where the Ruby application will be deployed (unless overwritten) \- \fB\fCproduction\fR, \fB\fCdevelopment\fR, \fB\fCtest\fR\&.
|
||||
Each level has different behaviors in terms of logging verbosity, error pages, ruby gem installation, etc.\fBNote\fP: Application assets will be compiled only if the \fB\fCRACK\_ENV\fR is set to \fB\fCproduction\fR
|
||||
.IP \(bu 2
|
||||
|
||||
.PP
|
||||
\fBDISABLE\_ASSET\_COMPILATION\fP
|
||||
.PP
|
||||
This variable set to \fB\fCtrue\fR indicates that the asset compilation process will be skipped. Since this only takes place
|
||||
\fBDISABLE\_ASSET\_COMPILATION\fPThis variable set to \fB\fCtrue\fR indicates that the asset compilation process will be skipped. Since this only takes place
|
||||
when the application is run in the \fB\fCproduction\fR environment, it should only be used when assets are already compiled.
|
||||
.IP \(bu 2
|
||||
|
||||
.PP
|
||||
\fBPUMA\_MIN\_THREADS\fP, \fBPUMA\_MAX\_THREADS\fP
|
||||
.PP
|
||||
These variables indicate the minimum and maximum threads that will be available in Puma
|
||||
\fBPUMA\_MIN\_THREADS\fP, \fBPUMA\_MAX\_THREADS\fPThese variables indicate the minimum and maximum threads that will be available in Puma
|
||||
\[la]https://github.com/puma/puma\[ra]\&'s thread pool.
|
||||
.IP \(bu 2
|
||||
|
||||
.PP
|
||||
\fBPUMA\_WORKERS\fP
|
||||
.PP
|
||||
This variable indicate the number of worker processes that will be launched. See documentation on Puma's clustered mode
|
||||
\fBPUMA\_WORKERS\fPThis variable indicate the number of worker processes that will be launched. See documentation on Puma's clustered mode
|
||||
\[la]https://github.com/puma/puma#clustered-mode\[ra]\&.
|
||||
.IP \(bu 2
|
||||
|
||||
.PP
|
||||
\fBRUBYGEM\_MIRROR\fP
|
||||
.PP
|
||||
Set this variable to use a custom RubyGems mirror URL to download required gem packages during build process.
|
||||
\fBRUBYGEM\_MIRROR\fPSet this variable to use a custom RubyGems mirror URL to download required gem packages during build process.
|
||||
|
||||
.RE
|
||||
|
||||
|
|
@ -126,13 +104,8 @@ In order to dynamically pick up changes made in your application source code, yo
|
|||
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
|
||||
.PP
|
||||
\fBFor Ruby on Rails applications\fP
|
||||
.PP
|
||||
Run the built Rails image with the \fB\fCRAILS\_ENV=development\fR environment variable passed to the podman
|
||||
\fBFor Ruby on Rails applications\fPRun the built Rails image with the \fB\fCRAILS\_ENV=development\fR environment variable passed to the podman
|
||||
\[la]https://github.com/containers/libpod\[ra] \fB\fC\-e\fR run flag:
|
||||
|
||||
.PP
|
||||
.RS
|
||||
|
||||
|
|
@ -141,13 +114,9 @@ $ podman run \-e RAILS\_ENV=development \-p 8080:8080 rails\-app
|
|||
|
||||
.fi
|
||||
.RE
|
||||
|
||||
.IP \(bu 2
|
||||
|
||||
.PP
|
||||
\fBFor other types of Ruby applications (Sinatra, Padrino, etc.)\fP
|
||||
.PP
|
||||
Your application needs to be built with one of gems that reloads the server every time changes in source code are done inside the running container. Those gems are:
|
||||
|
||||
\fBFor other types of Ruby applications (Sinatra, Padrino, etc.)\fPYour application needs to be built with one of gems that reloads the server every time changes in source code are done inside the running container. Those gems are:
|
||||
.RS
|
||||
.IP \(bu 2
|
||||
Shotgun
|
||||
|
|
@ -160,16 +129,10 @@ Rack\-livereload
|
|||
\[la]https://github.com/johnbintz/rack-livereload\[ra]
|
||||
|
||||
.RE
|
||||
|
||||
.PP
|
||||
Please note that in order to be able to run your application in development mode, you need to modify the S2I run script
|
||||
\[la]https://github.com/openshift/source-to-image#anatomy-of-a-builder-image\[ra], so the web server is launched by the chosen gem, which checks for changes in the source code.
|
||||
|
||||
.PP
|
||||
After you built your application image with your version of S2I run script
|
||||
\[la]https://github.com/openshift/source-to-image#anatomy-of-a-builder-image\[ra], so the web server is launched by the chosen gem, which checks for changes in the source code.After you built your application image with your version of S2I run script
|
||||
\[la]https://github.com/openshift/source-to-image#anatomy-of-a-builder-image\[ra], run the image with the RACK\_ENV=development environment variable passed to the podman
|
||||
\[la]https://github.com/containers/libpod\[ra] \-e run flag:
|
||||
|
||||
.PP
|
||||
.RS
|
||||
|
||||
|
|
@ -179,6 +142,7 @@ $ podman run \-e RACK\_ENV=development \-p 8080:8080 sinatra\-app
|
|||
.fi
|
||||
.RE
|
||||
|
||||
|
||||
.RE
|
||||
|
||||
.PP
|
||||
|
|
@ -257,8 +221,7 @@ workers can also be set explicitly by setting \fB\fCPUMA\_WORKERS\fR\&.
|
|||
|
||||
.SH See also
|
||||
.PP
|
||||
Dockerfile and other sources are available on
|
||||
\[la]https://github.com/sclorg/s2i-ruby-container\[ra]\&.
|
||||
Dockerfile and other sources are available on https://github.com/sclorg/s2i\-ruby\-container.
|
||||
In that repository you also can find another versions of Ruby environment Dockerfiles.
|
||||
Dockerfile for CentOS is called \fB\fCDockerfile\fR, Dockerfile for RHEL7 is called \fB\fCDockerfile.rhel7\fR,
|
||||
for RHEL8 it's \fB\fCDockerfile.rhel8\fR and the Fedora Dockerfile is called Dockerfile.fedora.
|
||||
|
|
|
|||
|
|
@ -3,4 +3,4 @@
|
|||
#
|
||||
# This will make scl collection binaries work out of box.
|
||||
unset BASH_ENV PROMPT_COMMAND ENV
|
||||
source scl_source enable rh-ruby26 $NODEJS_SCL
|
||||
source scl_source enable rh-ruby27 $NODEJS_SCL
|
||||
|
|
|
|||
193
test/imagestreams/ruby-centos.json
Normal file
193
test/imagestreams/ruby-centos.json
Normal file
|
|
@ -0,0 +1,193 @@
|
|||
{
|
||||
"kind": "ImageStream",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "ruby",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"tags": [
|
||||
{
|
||||
"name": "latest",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby (Latest)",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby applications on UBI. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/tree/master/2.6/README.md.\n\nWARNING: By selecting this tag, your application will automatically update to use the latest version of Ruby available on OpenShift, including major version updates.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby",
|
||||
"supports": "ruby",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "ImageStreamTag",
|
||||
"name": "2.7-ubi8"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.7-ubi8",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby 2.7 (UBI 8)",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby 2.7 applications on UBI 8. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/blob/master/2.7/README.md.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby",
|
||||
"supports": "ruby:2.7,ruby",
|
||||
"version": "2.7",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "DockerImage",
|
||||
"name": "registry.access.redhat.com/ubi8/ruby-27:latest"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.7-ubi7",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby 2.7 (UBI 7)",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby 2.7 applications on UBI 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/blob/master/2.7/README.md.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby",
|
||||
"supports": "ruby:2.7,ruby",
|
||||
"version": "2.7",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "DockerImage",
|
||||
"name": "registry.access.redhat.com/ubi7/ruby-27:latest"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.6-ubi8",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby 2.6 (UBI 8)",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby 2.6 applications on UBI 8. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/blob/master/2.6/README.md.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby",
|
||||
"supports": "ruby:2.6,ruby",
|
||||
"version": "2.6",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "DockerImage",
|
||||
"name": "registry.access.redhat.com/ubi8/ruby-26:latest"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.6-ubi7",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby 2.6 (UBI 7)",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby 2.6 applications on UBI 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/blob/master/2.6/README.md.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby",
|
||||
"supports": "ruby:2.6,ruby",
|
||||
"version": "2.6",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "DockerImage",
|
||||
"name": "registry.access.redhat.com/ubi7/ruby-26:latest"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.6",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby 2.6",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby 2.6 applications on CentOS 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/blob/master/2.6/README.md.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby,hidden",
|
||||
"supports": "ruby:2.6,ruby",
|
||||
"version": "2.6",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "DockerImage",
|
||||
"name": "quay.io/centos7/ruby-26-centos7:latest"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.5-ubi8",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby 2.5 (UBI 8)",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby 2.5 applications on UBI 8. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/blob/master/2.5/README.md.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby",
|
||||
"supports": "ruby:2.5,ruby",
|
||||
"version": "2.5",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "DockerImage",
|
||||
"name": "registry.access.redhat.com/ubi8/ruby-25:latest"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.5-ubi7",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby 2.5 (UBI 7)",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby 2.5 applications on UBI 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/blob/master/2.5/README.md.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby",
|
||||
"supports": "ruby:2.5,ruby",
|
||||
"version": "2.5",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "DockerImage",
|
||||
"name": "registry.access.redhat.com/ubi7/ruby-25:latest"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.5",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby 2.5",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby 2.5 applications on CentOS 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/blob/master/2.5/README.md.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby,hidden",
|
||||
"supports": "ruby:2.5,ruby",
|
||||
"version": "2.5",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "DockerImage",
|
||||
"name": "quay.io/centos7/ruby-25-centos7:latest"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
93
test/imagestreams/ruby-rhel-aarch64.json
Normal file
93
test/imagestreams/ruby-rhel-aarch64.json
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
{
|
||||
"kind": "ImageStream",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "ruby",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"tags": [
|
||||
{
|
||||
"name": "latest",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby (Latest)",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby applications on UBI. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/tree/master/2.7/README.md.\n\nWARNING: By selecting this tag, your application will automatically update to use the latest version of Ruby available on OpenShift, including major version updates.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby",
|
||||
"supports": "ruby",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "ImageStreamTag",
|
||||
"name": "2.7-ubi8"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.7-ubi8",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby 2.7 (UBI 8)",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby 2.7 applications on UBI 8. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/blob/master/2.7/README.md.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby",
|
||||
"supports": "ruby:2.7,ruby",
|
||||
"version": "2.7",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "DockerImage",
|
||||
"name": "registry.redhat.io/ubi8/ruby-27:latest"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.6-ubi8",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby 2.6 (UBI 8)",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby 2.6 applications on UBI 8. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/blob/master/2.6/README.md.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby",
|
||||
"supports": "ruby:2.6,ruby",
|
||||
"version": "2.6",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "DockerImage",
|
||||
"name": "registry.redhat.io/ubi8/ruby-26:latest"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.5-ubi8",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby 2.5 (UBI 8)",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby 2.5 applications on UBI 8. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/blob/master/2.5/README.md.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby",
|
||||
"supports": "ruby:2.5,ruby",
|
||||
"version": "2.5",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "DockerImage",
|
||||
"name": "registry.redhat.io/ubi8/ruby-25:latest"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
213
test/imagestreams/ruby-rhel.json
Normal file
213
test/imagestreams/ruby-rhel.json
Normal file
|
|
@ -0,0 +1,213 @@
|
|||
{
|
||||
"kind": "ImageStream",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "ruby",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"tags": [
|
||||
{
|
||||
"name": "latest",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby (Latest)",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby applications on UBI. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/tree/master/2.7/README.md.\n\nWARNING: By selecting this tag, your application will automatically update to use the latest version of Ruby available on OpenShift, including major version updates.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby",
|
||||
"supports": "ruby",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "ImageStreamTag",
|
||||
"name": "2.7-ubi8"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.7-ubi8",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby 2.7 (UBI 8)",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby 2.7 applications on UBI 8. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/blob/master/2.7/README.md.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby",
|
||||
"supports": "ruby:2.7,ruby",
|
||||
"version": "2.7",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "DockerImage",
|
||||
"name": "registry.redhat.io/ubi8/ruby-27:latest"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.7-ubi7",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby 2.7 (UBI 7)",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby 2.7 applications on UBI 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/blob/master/2.7/README.md.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby",
|
||||
"supports": "ruby:2.7,ruby",
|
||||
"version": "2.7",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "DockerImage",
|
||||
"name": "registry.redhat.io/ubi7/ruby-27:latest"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.7",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby 2.7",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby 2.7 applications on RHEL 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/blob/master/2.7/README.md.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby,hidden",
|
||||
"supports": "ruby:2.7,ruby",
|
||||
"version": "2.7",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "DockerImage",
|
||||
"name": "registry.redhat.io/rhscl/ruby-27-rhel7:latest"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.6-ubi8",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby 2.6 (UBI 8)",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby 2.6 applications on UBI 8. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/blob/master/2.6/README.md.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby",
|
||||
"supports": "ruby:2.6,ruby",
|
||||
"version": "2.6",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "DockerImage",
|
||||
"name": "registry.redhat.io/ubi8/ruby-26:latest"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.6-ubi7",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby 2.6 (UBI 7)",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby 2.6 applications on UBI 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/blob/master/2.6/README.md.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby",
|
||||
"supports": "ruby:2.6,ruby",
|
||||
"version": "2.6",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "DockerImage",
|
||||
"name": "registry.redhat.io/ubi7/ruby-26:latest"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.6",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby 2.6",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby 2.6 applications on RHEL 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/blob/master/2.6/README.md.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby,hidden",
|
||||
"supports": "ruby:2.6,ruby",
|
||||
"version": "2.6",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "DockerImage",
|
||||
"name": "registry.redhat.io/rhscl/ruby-26-rhel7:latest"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.5-ubi8",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby 2.5 (UBI 8)",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby 2.5 applications on UBI 8. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/blob/master/2.5/README.md.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby",
|
||||
"supports": "ruby:2.5,ruby",
|
||||
"version": "2.5",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "DockerImage",
|
||||
"name": "registry.redhat.io/ubi8/ruby-25:latest"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.5-ubi7",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby 2.5 (UBI 7)",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby 2.5 applications on UBI 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/blob/master/2.5/README.md.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby",
|
||||
"supports": "ruby:2.5,ruby",
|
||||
"version": "2.5",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "DockerImage",
|
||||
"name": "registry.redhat.io/ubi7/ruby-25:latest"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "2.5",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Ruby 2.5",
|
||||
"openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"description": "Build and run Ruby 2.5 applications on RHEL 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/sclorg/s2i-ruby-container/blob/master/2.5/README.md.",
|
||||
"iconClass": "icon-ruby",
|
||||
"tags": "builder,ruby,hidden",
|
||||
"supports": "ruby:2.5,ruby",
|
||||
"version": "2.5",
|
||||
"sampleRepo": "https://github.com/sclorg/ruby-ex.git"
|
||||
},
|
||||
"from": {
|
||||
"kind": "DockerImage",
|
||||
"name": "registry.redhat.io/rhscl/ruby-25-rhel7:latest"
|
||||
},
|
||||
"referencePolicy": {
|
||||
"type": "Local"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
612
test/rails-postgresql-persistent.json
Normal file
612
test/rails-postgresql-persistent.json
Normal file
|
|
@ -0,0 +1,612 @@
|
|||
{
|
||||
"kind": "Template",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "rails-pgsql-persistent",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Rails + PostgreSQL (Persistent)",
|
||||
"description": "An example Rails application with a PostgreSQL database. For more information about using this template, including OpenShift considerations, see https://github.com/sclorg/rails-ex/blob/master/README.md.",
|
||||
"tags": "quickstart,ruby,rails",
|
||||
"iconClass": "icon-ruby",
|
||||
"template.openshift.io/long-description": "This template defines resources needed to develop a Rails application, including a build configuration, application deployment configuration, and database deployment configuration.",
|
||||
"template.openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"template.openshift.io/documentation-url": "https://github.com/sclorg/rails-ex",
|
||||
"template.openshift.io/support-url": "https://access.redhat.com"
|
||||
}
|
||||
},
|
||||
"message": "The following service(s) have been created in your project: ${NAME}, ${DATABASE_SERVICE_NAME}.\n\nFor more information about using this template, including OpenShift considerations, see https://github.com/sclorg/rails-ex/blob/master/README.md.",
|
||||
"labels": {
|
||||
"template": "rails-pgsql-persistent"
|
||||
},
|
||||
"objects": [
|
||||
{
|
||||
"kind": "Secret",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "${NAME}",
|
||||
"annotations": {
|
||||
"template.openshift.io/expose-username": "{.data['application-user']}",
|
||||
"template.openshift.io/expose-password": "{.data['application-password']}"
|
||||
}
|
||||
},
|
||||
"stringData" : {
|
||||
"database-user" : "${DATABASE_USER}",
|
||||
"database-password" : "${DATABASE_PASSWORD}",
|
||||
"application-user" : "${APPLICATION_USER}",
|
||||
"application-password" : "${APPLICATION_PASSWORD}",
|
||||
"keybase" : "${SECRET_KEY_BASE}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "Service",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "${NAME}",
|
||||
"annotations": {
|
||||
"description": "Exposes and load balances the application pods",
|
||||
"service.alpha.openshift.io/dependencies": "[{\"name\": \"${DATABASE_SERVICE_NAME}\", \"kind\": \"Service\"}]"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"ports": [
|
||||
{
|
||||
"name": "web",
|
||||
"port": 8080,
|
||||
"targetPort": 8080
|
||||
}
|
||||
],
|
||||
"selector": {
|
||||
"name": "${NAME}"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "Route",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "${NAME}",
|
||||
"annotations": {
|
||||
"template.openshift.io/expose-uri": "http://{.spec.host}{.spec.path}"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"host": "${APPLICATION_DOMAIN}",
|
||||
"to": {
|
||||
"kind": "Service",
|
||||
"name": "${NAME}"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "ImageStream",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "${NAME}",
|
||||
"annotations": {
|
||||
"description": "Keeps track of changes in the application image"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "BuildConfig",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "${NAME}",
|
||||
"annotations": {
|
||||
"description": "Defines how to build the application",
|
||||
"template.alpha.openshift.io/wait-for-ready": "true"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"source": {
|
||||
"type": "Git",
|
||||
"git": {
|
||||
"uri": "${SOURCE_REPOSITORY_URL}",
|
||||
"ref": "${SOURCE_REPOSITORY_REF}"
|
||||
},
|
||||
"contextDir": "${CONTEXT_DIR}"
|
||||
},
|
||||
"strategy": {
|
||||
"type": "Source",
|
||||
"sourceStrategy": {
|
||||
"from": {
|
||||
"kind": "ImageStreamTag",
|
||||
"namespace": "${NAMESPACE}",
|
||||
"name": "ruby:2.5"
|
||||
},
|
||||
"env": [
|
||||
{
|
||||
"name": "RUBYGEM_MIRROR",
|
||||
"value": "${RUBYGEM_MIRROR}"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"output": {
|
||||
"to": {
|
||||
"kind": "ImageStreamTag",
|
||||
"name": "${NAME}:latest"
|
||||
}
|
||||
},
|
||||
"triggers": [
|
||||
{
|
||||
"type": "ImageChange"
|
||||
},
|
||||
{
|
||||
"type": "ConfigChange"
|
||||
},
|
||||
{
|
||||
"type": "GitHub",
|
||||
"github": {
|
||||
"secret": "${GITHUB_WEBHOOK_SECRET}"
|
||||
}
|
||||
}
|
||||
],
|
||||
"postCommit": {
|
||||
"script": "bundle exec rake test"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "DeploymentConfig",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "${NAME}",
|
||||
"annotations": {
|
||||
"description": "Defines how to deploy the application server",
|
||||
"template.alpha.openshift.io/wait-for-ready": "true"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"strategy": {
|
||||
"type": "Recreate",
|
||||
"recreateParams": {
|
||||
"pre": {
|
||||
"failurePolicy": "Abort",
|
||||
"execNewPod": {
|
||||
"command": [
|
||||
"./migrate-database.sh"
|
||||
],
|
||||
"containerName": "${NAME}"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"triggers": [
|
||||
{
|
||||
"type": "ImageChange",
|
||||
"imageChangeParams": {
|
||||
"automatic": true,
|
||||
"containerNames": [
|
||||
"${NAME}"
|
||||
],
|
||||
"from": {
|
||||
"kind": "ImageStreamTag",
|
||||
"name": "${NAME}:latest"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "ConfigChange"
|
||||
}
|
||||
],
|
||||
"replicas": 1,
|
||||
"selector": {
|
||||
"name": "${NAME}"
|
||||
},
|
||||
"template": {
|
||||
"metadata": {
|
||||
"name": "${NAME}",
|
||||
"labels": {
|
||||
"name": "${NAME}"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"containers": [
|
||||
{
|
||||
"name": "${NAME}",
|
||||
"image": " ",
|
||||
"ports": [
|
||||
{
|
||||
"containerPort": 8080
|
||||
}
|
||||
],
|
||||
"readinessProbe": {
|
||||
"timeoutSeconds": 3,
|
||||
"initialDelaySeconds": 5,
|
||||
"httpGet": {
|
||||
"path": "/articles",
|
||||
"port": 8080
|
||||
}
|
||||
},
|
||||
"livenessProbe": {
|
||||
"timeoutSeconds": 3,
|
||||
"initialDelaySeconds": 10,
|
||||
"httpGet": {
|
||||
"path": "/articles",
|
||||
"port": 8080
|
||||
}
|
||||
},
|
||||
"env": [
|
||||
{
|
||||
"name": "DATABASE_SERVICE_NAME",
|
||||
"value": "${DATABASE_SERVICE_NAME}"
|
||||
},
|
||||
{
|
||||
"name": "POSTGRESQL_USER",
|
||||
"valueFrom": {
|
||||
"secretKeyRef" : {
|
||||
"name" : "${NAME}",
|
||||
"key" : "database-user"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "POSTGRESQL_PASSWORD",
|
||||
"valueFrom": {
|
||||
"secretKeyRef" : {
|
||||
"name" : "${NAME}",
|
||||
"key" : "database-password"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "SECRET_KEY_BASE",
|
||||
"valueFrom": {
|
||||
"secretKeyRef" : {
|
||||
"name" : "${NAME}",
|
||||
"key" : "keybase"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "POSTGRESQL_DATABASE",
|
||||
"value": "${DATABASE_NAME}"
|
||||
},
|
||||
{
|
||||
"name": "POSTGRESQL_MAX_CONNECTIONS",
|
||||
"value": "${POSTGRESQL_MAX_CONNECTIONS}"
|
||||
},
|
||||
{
|
||||
"name": "POSTGRESQL_SHARED_BUFFERS",
|
||||
"value": "${POSTGRESQL_SHARED_BUFFERS}"
|
||||
},
|
||||
{
|
||||
"name": "APPLICATION_DOMAIN",
|
||||
"value": "${APPLICATION_DOMAIN}"
|
||||
},
|
||||
{
|
||||
"name": "APPLICATION_USER",
|
||||
"valueFrom": {
|
||||
"secretKeyRef" : {
|
||||
"name" : "${NAME}",
|
||||
"key" : "application-user"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "APPLICATION_PASSWORD",
|
||||
"valueFrom": {
|
||||
"secretKeyRef" : {
|
||||
"name" : "${NAME}",
|
||||
"key" : "application-password"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "RAILS_ENV",
|
||||
"value": "${RAILS_ENV}"
|
||||
}
|
||||
],
|
||||
"resources": {
|
||||
"limits": {
|
||||
"memory": "${MEMORY_LIMIT}"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "PersistentVolumeClaim",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "${DATABASE_SERVICE_NAME}"
|
||||
},
|
||||
"spec": {
|
||||
"accessModes": [
|
||||
"ReadWriteOnce"
|
||||
],
|
||||
"resources": {
|
||||
"requests": {
|
||||
"storage": "${VOLUME_CAPACITY}"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "Service",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "${DATABASE_SERVICE_NAME}",
|
||||
"annotations": {
|
||||
"description": "Exposes the database server"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"ports": [
|
||||
{
|
||||
"name": "postgresql",
|
||||
"port": 5432,
|
||||
"targetPort": 5432
|
||||
}
|
||||
],
|
||||
"selector": {
|
||||
"name": "${DATABASE_SERVICE_NAME}"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "DeploymentConfig",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "${DATABASE_SERVICE_NAME}",
|
||||
"annotations": {
|
||||
"description": "Defines how to deploy the database",
|
||||
"template.alpha.openshift.io/wait-for-ready": "true"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"strategy": {
|
||||
"type": "Recreate"
|
||||
},
|
||||
"triggers": [
|
||||
{
|
||||
"type": "ImageChange",
|
||||
"imageChangeParams": {
|
||||
"automatic": true,
|
||||
"containerNames": [
|
||||
"postgresql"
|
||||
],
|
||||
"from": {
|
||||
"kind": "ImageStreamTag",
|
||||
"namespace": "${NAMESPACE}",
|
||||
"name": "postgresql:10"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "ConfigChange"
|
||||
}
|
||||
],
|
||||
"replicas": 1,
|
||||
"selector": {
|
||||
"name": "${DATABASE_SERVICE_NAME}"
|
||||
},
|
||||
"template": {
|
||||
"metadata": {
|
||||
"name": "${DATABASE_SERVICE_NAME}",
|
||||
"labels": {
|
||||
"name": "${DATABASE_SERVICE_NAME}"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"volumes": [
|
||||
{
|
||||
"name": "${DATABASE_SERVICE_NAME}-data",
|
||||
"persistentVolumeClaim": {
|
||||
"claimName": "${DATABASE_SERVICE_NAME}"
|
||||
}
|
||||
}
|
||||
],
|
||||
"containers": [
|
||||
{
|
||||
"name": "postgresql",
|
||||
"image": " ",
|
||||
"ports": [
|
||||
{
|
||||
"containerPort": 5432
|
||||
}
|
||||
],
|
||||
"readinessProbe": {
|
||||
"timeoutSeconds": 1,
|
||||
"initialDelaySeconds": 5,
|
||||
"exec": {
|
||||
"command": [ "/bin/sh", "-i", "-c", "psql -h 127.0.0.1 -U ${POSTGRESQL_USER} -q -d ${POSTGRESQL_DATABASE} -c 'SELECT 1'"]
|
||||
}
|
||||
},
|
||||
"livenessProbe": {
|
||||
"timeoutSeconds": 1,
|
||||
"initialDelaySeconds": 30,
|
||||
"tcpSocket": {
|
||||
"port": 5432
|
||||
}
|
||||
},
|
||||
"volumeMounts": [
|
||||
{
|
||||
"name": "${DATABASE_SERVICE_NAME}-data",
|
||||
"mountPath": "/var/lib/pgsql/data"
|
||||
}
|
||||
],
|
||||
"env": [
|
||||
{
|
||||
"name": "POSTGRESQL_USER",
|
||||
"valueFrom": {
|
||||
"secretKeyRef" : {
|
||||
"name" : "${NAME}",
|
||||
"key" : "database-user"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "POSTGRESQL_PASSWORD",
|
||||
"valueFrom": {
|
||||
"secretKeyRef" : {
|
||||
"name" : "${NAME}",
|
||||
"key" : "database-password"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "POSTGRESQL_DATABASE",
|
||||
"value": "${DATABASE_NAME}"
|
||||
},
|
||||
{
|
||||
"name": "POSTGRESQL_MAX_CONNECTIONS",
|
||||
"value": "${POSTGRESQL_MAX_CONNECTIONS}"
|
||||
},
|
||||
{
|
||||
"name": "POSTGRESQL_SHARED_BUFFERS",
|
||||
"value": "${POSTGRESQL_SHARED_BUFFERS}"
|
||||
}
|
||||
],
|
||||
"resources": {
|
||||
"limits": {
|
||||
"memory": "${MEMORY_POSTGRESQL_LIMIT}"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
{
|
||||
"name": "NAME",
|
||||
"displayName": "Name",
|
||||
"description": "The name assigned to all of the frontend objects defined in this template.",
|
||||
"required": true,
|
||||
"value": "rails-pgsql-persistent"
|
||||
},
|
||||
{
|
||||
"name": "NAMESPACE",
|
||||
"displayName": "Namespace",
|
||||
"required": true,
|
||||
"description": "The OpenShift Namespace where the ImageStream resides.",
|
||||
"value": "openshift"
|
||||
},
|
||||
{
|
||||
"name": "MEMORY_LIMIT",
|
||||
"displayName": "Memory Limit",
|
||||
"required": true,
|
||||
"description": "Maximum amount of memory the Rails container can use.",
|
||||
"value": "512Mi"
|
||||
},
|
||||
{
|
||||
"name": "MEMORY_POSTGRESQL_LIMIT",
|
||||
"displayName": "Memory Limit (PostgreSQL)",
|
||||
"required": true,
|
||||
"description": "Maximum amount of memory the PostgreSQL container can use.",
|
||||
"value": "512Mi"
|
||||
},
|
||||
{
|
||||
"name": "VOLUME_CAPACITY",
|
||||
"displayName": "Volume Capacity",
|
||||
"description": "Volume space available for data, e.g. 512Mi, 2Gi",
|
||||
"value": "1Gi",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"name": "SOURCE_REPOSITORY_URL",
|
||||
"displayName": "Git Repository URL",
|
||||
"required": true,
|
||||
"description": "The URL of the repository with your application source code.",
|
||||
"value": "https://github.com/sclorg/rails-ex.git"
|
||||
},
|
||||
{
|
||||
"name": "SOURCE_REPOSITORY_REF",
|
||||
"displayName": "Git Reference",
|
||||
"description": "Set this to a branch name, tag or other ref of your repository if you are not using the default branch."
|
||||
},
|
||||
{
|
||||
"name": "CONTEXT_DIR",
|
||||
"displayName": "Context Directory",
|
||||
"description": "Set this to the relative path to your project if it is not in the root of your repository."
|
||||
},
|
||||
{
|
||||
"name": "APPLICATION_DOMAIN",
|
||||
"displayName": "Application Hostname",
|
||||
"description": "The exposed hostname that will route to the Rails service, if left blank a value will be defaulted.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"name": "GITHUB_WEBHOOK_SECRET",
|
||||
"displayName": "GitHub Webhook Secret",
|
||||
"description": "Github trigger secret. A difficult to guess string encoded as part of the webhook URL. Not encrypted.",
|
||||
"generate": "expression",
|
||||
"from": "[a-zA-Z0-9]{40}"
|
||||
},
|
||||
{
|
||||
"name": "SECRET_KEY_BASE",
|
||||
"displayName": "Secret Key",
|
||||
"description": "Your secret key for verifying the integrity of signed cookies.",
|
||||
"generate": "expression",
|
||||
"from": "[a-z0-9]{127}"
|
||||
},
|
||||
{
|
||||
"name": "APPLICATION_USER",
|
||||
"displayName": "Application Username",
|
||||
"required": true,
|
||||
"description": "The application user that is used within the sample application to authorize access on pages.",
|
||||
"value": "openshift"
|
||||
},
|
||||
{
|
||||
"name": "APPLICATION_PASSWORD",
|
||||
"displayName": "Application Password",
|
||||
"required": true,
|
||||
"description": "The application password that is used within the sample application to authorize access on pages.",
|
||||
"value": "secret"
|
||||
},
|
||||
{
|
||||
"name": "RAILS_ENV",
|
||||
"displayName": "Rails Environment",
|
||||
"required": true,
|
||||
"description": "Environment under which the sample application will run. Could be set to production, development or test.",
|
||||
"value": "production"
|
||||
},
|
||||
{
|
||||
"name": "DATABASE_SERVICE_NAME",
|
||||
"required": true,
|
||||
"displayName": "Database Service Name",
|
||||
"value": "postgresql"
|
||||
},
|
||||
{
|
||||
"name": "DATABASE_USER",
|
||||
"displayName": "Database Username",
|
||||
"generate": "expression",
|
||||
"from": "user[A-Z0-9]{3}"
|
||||
},
|
||||
{
|
||||
"name": "DATABASE_PASSWORD",
|
||||
"displayName": "Database Password",
|
||||
"generate": "expression",
|
||||
"from": "[a-zA-Z0-9]{8}"
|
||||
},
|
||||
{
|
||||
"name": "DATABASE_NAME",
|
||||
"required": true,
|
||||
"displayName": "Database Name",
|
||||
"value": "root"
|
||||
},
|
||||
{
|
||||
"name": "POSTGRESQL_MAX_CONNECTIONS",
|
||||
"displayName": "Maximum Database Connections",
|
||||
"value": "100"
|
||||
},
|
||||
{
|
||||
"name": "POSTGRESQL_SHARED_BUFFERS",
|
||||
"displayName": "Shared Buffer Amount",
|
||||
"value": "12MB"
|
||||
},
|
||||
{
|
||||
"name": "RUBYGEM_MIRROR",
|
||||
"displayName": "Custom RubyGems Mirror URL",
|
||||
"description": "The custom RubyGems mirror URL",
|
||||
"value": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
586
test/rails-postgresql.json
Normal file
586
test/rails-postgresql.json
Normal file
|
|
@ -0,0 +1,586 @@
|
|||
{
|
||||
"kind": "Template",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "rails-postgresql-example",
|
||||
"annotations": {
|
||||
"openshift.io/display-name": "Rails + PostgreSQL (Ephemeral)",
|
||||
"description": "An example Rails application with a PostgreSQL database. For more information about using this template, including OpenShift considerations, see https://github.com/sclorg/rails-ex/blob/master/README.md.\n\nWARNING: Any data stored will be lost upon pod destruction. Only use this template for testing.",
|
||||
"tags": "quickstart,ruby,rails",
|
||||
"iconClass": "icon-ruby",
|
||||
"template.openshift.io/long-description": "This template defines resources needed to develop a Rails application, including a build configuration, application deployment configuration, and database deployment configuration. The database is stored in non-persistent storage, so this configuration should be used for experimental purposes only.",
|
||||
"template.openshift.io/provider-display-name": "Red Hat, Inc.",
|
||||
"template.openshift.io/documentation-url": "https://github.com/sclorg/rails-ex",
|
||||
"template.openshift.io/support-url": "https://access.redhat.com"
|
||||
}
|
||||
},
|
||||
"message": "The following service(s) have been created in your project: ${NAME}, ${DATABASE_SERVICE_NAME}.\n\nFor more information about using this template, including OpenShift considerations, see https://github.com/sclorg/rails-ex/blob/master/README.md.",
|
||||
"labels": {
|
||||
"template": "rails-postgresql-example"
|
||||
},
|
||||
"objects": [
|
||||
{
|
||||
"kind": "Secret",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "${NAME}",
|
||||
"annotations": {
|
||||
"template.openshift.io/expose-username": "{.data['application-user']}",
|
||||
"template.openshift.io/expose-password": "{.data['application-password']}"
|
||||
}
|
||||
},
|
||||
"stringData" : {
|
||||
"database-user" : "${DATABASE_USER}",
|
||||
"database-password" : "${DATABASE_PASSWORD}",
|
||||
"application-user" : "${APPLICATION_USER}",
|
||||
"application-password" : "${APPLICATION_PASSWORD}",
|
||||
"keybase" : "${SECRET_KEY_BASE}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "Service",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "${NAME}",
|
||||
"annotations": {
|
||||
"description": "Exposes and load balances the application pods",
|
||||
"service.alpha.openshift.io/dependencies": "[{\"name\": \"${DATABASE_SERVICE_NAME}\", \"kind\": \"Service\"}]"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"ports": [
|
||||
{
|
||||
"name": "web",
|
||||
"port": 8080,
|
||||
"targetPort": 8080
|
||||
}
|
||||
],
|
||||
"selector": {
|
||||
"name": "${NAME}"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "Route",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "${NAME}",
|
||||
"annotations": {
|
||||
"template.openshift.io/expose-uri": "http://{.spec.host}{.spec.path}"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"host": "${APPLICATION_DOMAIN}",
|
||||
"to": {
|
||||
"kind": "Service",
|
||||
"name": "${NAME}"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "ImageStream",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "${NAME}",
|
||||
"annotations": {
|
||||
"description": "Keeps track of changes in the application image"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "BuildConfig",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "${NAME}",
|
||||
"annotations": {
|
||||
"description": "Defines how to build the application",
|
||||
"template.alpha.openshift.io/wait-for-ready": "true"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"source": {
|
||||
"type": "Git",
|
||||
"git": {
|
||||
"uri": "${SOURCE_REPOSITORY_URL}",
|
||||
"ref": "${SOURCE_REPOSITORY_REF}"
|
||||
},
|
||||
"contextDir": "${CONTEXT_DIR}"
|
||||
},
|
||||
"strategy": {
|
||||
"type": "Source",
|
||||
"sourceStrategy": {
|
||||
"from": {
|
||||
"kind": "ImageStreamTag",
|
||||
"namespace": "${NAMESPACE}",
|
||||
"name": "ruby:2.5"
|
||||
},
|
||||
"env": [
|
||||
{
|
||||
"name": "RUBYGEM_MIRROR",
|
||||
"value": "${RUBYGEM_MIRROR}"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"output": {
|
||||
"to": {
|
||||
"kind": "ImageStreamTag",
|
||||
"name": "${NAME}:latest"
|
||||
}
|
||||
},
|
||||
"triggers": [
|
||||
{
|
||||
"type": "ImageChange"
|
||||
},
|
||||
{
|
||||
"type": "ConfigChange"
|
||||
},
|
||||
{
|
||||
"type": "GitHub",
|
||||
"github": {
|
||||
"secret": "${GITHUB_WEBHOOK_SECRET}"
|
||||
}
|
||||
}
|
||||
],
|
||||
"postCommit": {
|
||||
"script": "bundle exec rake test"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "DeploymentConfig",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "${NAME}",
|
||||
"annotations": {
|
||||
"description": "Defines how to deploy the application server",
|
||||
"template.alpha.openshift.io/wait-for-ready": "true"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"strategy": {
|
||||
"type": "Recreate",
|
||||
"recreateParams": {
|
||||
"pre": {
|
||||
"failurePolicy": "Abort",
|
||||
"execNewPod": {
|
||||
"command": [
|
||||
"./migrate-database.sh"
|
||||
],
|
||||
"containerName": "${NAME}"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"triggers": [
|
||||
{
|
||||
"type": "ImageChange",
|
||||
"imageChangeParams": {
|
||||
"automatic": true,
|
||||
"containerNames": [
|
||||
"${NAME}"
|
||||
],
|
||||
"from": {
|
||||
"kind": "ImageStreamTag",
|
||||
"name": "${NAME}:latest"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "ConfigChange"
|
||||
}
|
||||
],
|
||||
"replicas": 1,
|
||||
"selector": {
|
||||
"name": "${NAME}"
|
||||
},
|
||||
"template": {
|
||||
"metadata": {
|
||||
"name": "${NAME}",
|
||||
"labels": {
|
||||
"name": "${NAME}"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"containers": [
|
||||
{
|
||||
"name": "${NAME}",
|
||||
"image": " ",
|
||||
"ports": [
|
||||
{
|
||||
"containerPort": 8080
|
||||
}
|
||||
],
|
||||
"readinessProbe": {
|
||||
"timeoutSeconds": 3,
|
||||
"initialDelaySeconds": 5,
|
||||
"httpGet": {
|
||||
"path": "/articles",
|
||||
"port": 8080
|
||||
}
|
||||
},
|
||||
"livenessProbe": {
|
||||
"timeoutSeconds": 3,
|
||||
"initialDelaySeconds": 10,
|
||||
"httpGet": {
|
||||
"path": "/articles",
|
||||
"port": 8080
|
||||
}
|
||||
},
|
||||
"env": [
|
||||
{
|
||||
"name": "DATABASE_SERVICE_NAME",
|
||||
"value": "${DATABASE_SERVICE_NAME}"
|
||||
},
|
||||
{
|
||||
"name": "POSTGRESQL_USER",
|
||||
"valueFrom": {
|
||||
"secretKeyRef" : {
|
||||
"name" : "${NAME}",
|
||||
"key" : "database-user"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "POSTGRESQL_PASSWORD",
|
||||
"valueFrom": {
|
||||
"secretKeyRef" : {
|
||||
"name" : "${NAME}",
|
||||
"key" : "database-password"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "POSTGRESQL_DATABASE",
|
||||
"value": "${DATABASE_NAME}"
|
||||
},
|
||||
{
|
||||
"name": "SECRET_KEY_BASE",
|
||||
"valueFrom": {
|
||||
"secretKeyRef" : {
|
||||
"name" : "${NAME}",
|
||||
"key" : "keybase"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "POSTGRESQL_MAX_CONNECTIONS",
|
||||
"value": "${POSTGRESQL_MAX_CONNECTIONS}"
|
||||
},
|
||||
{
|
||||
"name": "POSTGRESQL_SHARED_BUFFERS",
|
||||
"value": "${POSTGRESQL_SHARED_BUFFERS}"
|
||||
},
|
||||
{
|
||||
"name": "APPLICATION_DOMAIN",
|
||||
"value": "${APPLICATION_DOMAIN}"
|
||||
},
|
||||
{
|
||||
"name": "APPLICATION_USER",
|
||||
"valueFrom": {
|
||||
"secretKeyRef" : {
|
||||
"name" : "${NAME}",
|
||||
"key" : "application-user"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "APPLICATION_PASSWORD",
|
||||
"valueFrom": {
|
||||
"secretKeyRef" : {
|
||||
"name" : "${NAME}",
|
||||
"key" : "application-password"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "RAILS_ENV",
|
||||
"value": "${RAILS_ENV}"
|
||||
}
|
||||
],
|
||||
"resources": {
|
||||
"limits": {
|
||||
"memory": "${MEMORY_LIMIT}"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "Service",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "${DATABASE_SERVICE_NAME}",
|
||||
"annotations": {
|
||||
"description": "Exposes the database server"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"ports": [
|
||||
{
|
||||
"name": "postgresql",
|
||||
"port": 5432,
|
||||
"targetPort": 5432
|
||||
}
|
||||
],
|
||||
"selector": {
|
||||
"name": "${DATABASE_SERVICE_NAME}"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"kind": "DeploymentConfig",
|
||||
"apiVersion": "v1",
|
||||
"metadata": {
|
||||
"name": "${DATABASE_SERVICE_NAME}",
|
||||
"annotations": {
|
||||
"description": "Defines how to deploy the database",
|
||||
"template.alpha.openshift.io/wait-for-ready": "true"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"strategy": {
|
||||
"type": "Recreate"
|
||||
},
|
||||
"triggers": [
|
||||
{
|
||||
"type": "ImageChange",
|
||||
"imageChangeParams": {
|
||||
"automatic": true,
|
||||
"containerNames": [
|
||||
"postgresql"
|
||||
],
|
||||
"from": {
|
||||
"kind": "ImageStreamTag",
|
||||
"namespace": "${NAMESPACE}",
|
||||
"name": "postgresql:10"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "ConfigChange"
|
||||
}
|
||||
],
|
||||
"replicas": 1,
|
||||
"selector": {
|
||||
"name": "${DATABASE_SERVICE_NAME}"
|
||||
},
|
||||
"template": {
|
||||
"metadata": {
|
||||
"name": "${DATABASE_SERVICE_NAME}",
|
||||
"labels": {
|
||||
"name": "${DATABASE_SERVICE_NAME}"
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"volumes": [
|
||||
{
|
||||
"name": "data",
|
||||
"emptyDir": {}
|
||||
}
|
||||
],
|
||||
"containers": [
|
||||
{
|
||||
"name": "postgresql",
|
||||
"image": " ",
|
||||
"ports": [
|
||||
{
|
||||
"containerPort": 5432
|
||||
}
|
||||
],
|
||||
"readinessProbe": {
|
||||
"timeoutSeconds": 1,
|
||||
"initialDelaySeconds": 5,
|
||||
"exec": {
|
||||
"command": [ "/bin/sh", "-i", "-c", "psql -h 127.0.0.1 -U ${POSTGRESQL_USER} -q -d ${POSTGRESQL_DATABASE} -c 'SELECT 1'"]
|
||||
}
|
||||
},
|
||||
"livenessProbe": {
|
||||
"timeoutSeconds": 1,
|
||||
"initialDelaySeconds": 30,
|
||||
"tcpSocket": {
|
||||
"port": 5432
|
||||
}
|
||||
},
|
||||
"volumeMounts": [
|
||||
{
|
||||
"name": "data",
|
||||
"mountPath": "/var/lib/pgsql/data"
|
||||
}
|
||||
],
|
||||
"env": [
|
||||
{
|
||||
"name": "POSTGRESQL_USER",
|
||||
"valueFrom": {
|
||||
"secretKeyRef" : {
|
||||
"name" : "${NAME}",
|
||||
"key" : "database-user"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "POSTGRESQL_PASSWORD",
|
||||
"valueFrom": {
|
||||
"secretKeyRef" : {
|
||||
"name" : "${NAME}",
|
||||
"key" : "database-password"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "POSTGRESQL_DATABASE",
|
||||
"value": "${DATABASE_NAME}"
|
||||
},
|
||||
{
|
||||
"name": "POSTGRESQL_MAX_CONNECTIONS",
|
||||
"value": "${POSTGRESQL_MAX_CONNECTIONS}"
|
||||
},
|
||||
{
|
||||
"name": "POSTGRESQL_SHARED_BUFFERS",
|
||||
"value": "${POSTGRESQL_SHARED_BUFFERS}"
|
||||
}
|
||||
],
|
||||
"resources": {
|
||||
"limits": {
|
||||
"memory": "${MEMORY_POSTGRESQL_LIMIT}"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
{
|
||||
"name": "NAME",
|
||||
"displayName": "Name",
|
||||
"description": "The name assigned to all of the frontend objects defined in this template.",
|
||||
"required": true,
|
||||
"value": "rails-postgresql-example"
|
||||
},
|
||||
{
|
||||
"name": "NAMESPACE",
|
||||
"displayName": "Namespace",
|
||||
"required": true,
|
||||
"description": "The OpenShift Namespace where the ImageStream resides.",
|
||||
"value": "openshift"
|
||||
},
|
||||
{
|
||||
"name": "MEMORY_LIMIT",
|
||||
"displayName": "Memory Limit",
|
||||
"required": true,
|
||||
"description": "Maximum amount of memory the Rails container can use.",
|
||||
"value": "512Mi"
|
||||
},
|
||||
{
|
||||
"name": "MEMORY_POSTGRESQL_LIMIT",
|
||||
"displayName": "Memory Limit (PostgreSQL)",
|
||||
"required": true,
|
||||
"description": "Maximum amount of memory the PostgreSQL container can use.",
|
||||
"value": "512Mi"
|
||||
},
|
||||
{
|
||||
"name": "SOURCE_REPOSITORY_URL",
|
||||
"displayName": "Git Repository URL",
|
||||
"required": true,
|
||||
"description": "The URL of the repository with your application source code.",
|
||||
"value": "https://github.com/sclorg/rails-ex.git"
|
||||
},
|
||||
{
|
||||
"name": "SOURCE_REPOSITORY_REF",
|
||||
"displayName": "Git Reference",
|
||||
"description": "Set this to a branch name, tag or other ref of your repository if you are not using the default branch."
|
||||
},
|
||||
{
|
||||
"name": "CONTEXT_DIR",
|
||||
"displayName": "Context Directory",
|
||||
"description": "Set this to the relative path to your project if it is not in the root of your repository."
|
||||
},
|
||||
{
|
||||
"name": "APPLICATION_DOMAIN",
|
||||
"displayName": "Application Hostname",
|
||||
"description": "The exposed hostname that will route to the Rails service, if left blank a value will be defaulted.",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"name": "GITHUB_WEBHOOK_SECRET",
|
||||
"displayName": "GitHub Webhook Secret",
|
||||
"description": "Github trigger secret. A difficult to guess string encoded as part of the webhook URL. Not encrypted.",
|
||||
"generate": "expression",
|
||||
"from": "[a-zA-Z0-9]{40}"
|
||||
},
|
||||
{
|
||||
"name": "SECRET_KEY_BASE",
|
||||
"displayName": "Secret Key",
|
||||
"description": "Your secret key for verifying the integrity of signed cookies.",
|
||||
"generate": "expression",
|
||||
"from": "[a-z0-9]{127}"
|
||||
},
|
||||
{
|
||||
"name": "APPLICATION_USER",
|
||||
"displayName": "Application Username",
|
||||
"required": true,
|
||||
"description": "The application user that is used within the sample application to authorize access on pages.",
|
||||
"value": "openshift"
|
||||
},
|
||||
{
|
||||
"name": "APPLICATION_PASSWORD",
|
||||
"displayName": "Application Password",
|
||||
"required": true,
|
||||
"description": "The application password that is used within the sample application to authorize access on pages.",
|
||||
"value": "secret"
|
||||
},
|
||||
{
|
||||
"name": "RAILS_ENV",
|
||||
"displayName": "Rails Environment",
|
||||
"required": true,
|
||||
"description": "Environment under which the sample application will run. Could be set to production, development or test.",
|
||||
"value": "production"
|
||||
},
|
||||
{
|
||||
"name": "DATABASE_SERVICE_NAME",
|
||||
"required": true,
|
||||
"displayName": "Database Service Name",
|
||||
"value": "postgresql"
|
||||
},
|
||||
{
|
||||
"name": "DATABASE_USER",
|
||||
"displayName": "Database Username",
|
||||
"generate": "expression",
|
||||
"from": "user[A-Z0-9]{3}"
|
||||
},
|
||||
{
|
||||
"name": "DATABASE_PASSWORD",
|
||||
"displayName": "Database Password",
|
||||
"generate": "expression",
|
||||
"from": "[a-zA-Z0-9]{8}"
|
||||
},
|
||||
{
|
||||
"name": "DATABASE_NAME",
|
||||
"required": true,
|
||||
"displayName": "Database Name",
|
||||
"value": "root"
|
||||
},
|
||||
{
|
||||
"name": "POSTGRESQL_MAX_CONNECTIONS",
|
||||
"displayName": "Maximum Database Connections",
|
||||
"value": "100"
|
||||
},
|
||||
{
|
||||
"name": "POSTGRESQL_SHARED_BUFFERS",
|
||||
"displayName": "Shared Buffer Amount",
|
||||
"value": "12MB"
|
||||
},
|
||||
{
|
||||
"name": "RUBYGEM_MIRROR",
|
||||
"displayName": "Custom RubyGems Mirror URL",
|
||||
"description": "The custom RubyGems mirror URL",
|
||||
"value": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
22
test/run
22
test/run
|
|
@ -6,7 +6,7 @@
|
|||
# IMAGE_NAME specifies a name of the candidate image used for testing.
|
||||
# The image has to be available before this script is executed.
|
||||
#
|
||||
IMAGE_NAME=${IMAGE_NAME-centos/ruby-26-centos7-candidate}
|
||||
IMAGE_NAME=${IMAGE_NAME-centos/ruby-27-centos7-candidate}
|
||||
|
||||
declare -a WEB_SERVERS=(db puma rack)
|
||||
#declare -a WEB_SERVERS=(db)
|
||||
|
|
@ -175,12 +175,26 @@ for server in ${WEB_SERVERS[@]}; do
|
|||
test_scl_usage "ruby --version" "ruby ${RUBY_VERSION}."
|
||||
check_result $?
|
||||
|
||||
info "Testing npm availibility"
|
||||
ct_npm_works
|
||||
check_result $?
|
||||
|
||||
info "All tests for the ${server}-test-app finished successfully."
|
||||
cleanup ${server}
|
||||
done
|
||||
|
||||
info "Testing npm availibility"
|
||||
ct_npm_works
|
||||
check_result $?
|
||||
if [ "$OS" == "rhel7" ] || [ "$OS" == "centos7" ]; then
|
||||
 # autocleanup only enabled here as only the following tests so far use it
|
||||
CID_FILE_DIR=$(mktemp -d)
|
||||
ct_enable_cleanup
|
||||

|
||||
info "Testing variable presence during \`docker exec\`"
|
||||
ct_check_exec_env_vars
|
||||
check_result $?
|
||||

|
||||
info "Checking if all scl variables are defined in Dockerfile"
|
||||
ct_check_scl_enable_vars
|
||||
check_result $?
|
||||
fi
|
||||
|
||||
info "All tests finished successfully."
|
||||
|
|
|
|||
49
test/run-openshift-local-cluster
Executable file
49
test/run-openshift-local-cluster
Executable file
|
|
@ -0,0 +1,49 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# Test the Ruby S2I image in OpenShift (local cluster)
|
||||
#
|
||||
# IMAGE_NAME specifies a name of the candidate image used for testing.
|
||||
# The image has to be available before this script is executed.
|
||||
# VERSION specifies the major version of the Ruby runtime in format of X.Y
|
||||
# OS specifies RHEL version (e.g. OS=rhel7)
|
||||
#
|
||||
|
||||
THISDIR=$(dirname ${BASH_SOURCE[0]})
|
||||
|
||||
source ${THISDIR}/test-lib-ruby.sh
|
||||
|
||||
set -eo nounset
|
||||
|
||||
trap ct_os_cleanup EXIT SIGINT
|
||||
|
||||
ct_os_check_compulsory_vars
|
||||
|
||||
ct_os_enable_print_logs
|
||||
|
||||
ct_os_cluster_up
|
||||
|
||||
# test with the just built image and an integrated template
|
||||
test_ruby_integration "${IMAGE_NAME}"
|
||||
|
||||
# Check the imagestream
|
||||
test_ruby_imagestream
|
||||
|
||||
# test with a released image and an integrated template
|
||||
PUBLIC_IMAGE_NAME=${PUBLIC_IMAGE_NAME:-$(ct_get_public_image_name "${OS}" "${BASE_IMAGE_NAME}" "${VERSION}")}
|
||||
|
||||
# Try pulling the image first to see if it is accessible
|
||||
if docker pull "${PUBLIC_IMAGE_NAME}"; then
|
||||
export CT_SKIP_UPLOAD_IMAGE=true
|
||||
test_ruby_integration "${PUBLIC_IMAGE_NAME}"
|
||||
else
|
||||
echo "Warning: ${PUBLIC_IMAGE_NAME} could not be downloaded via 'docker'"
|
||||
# ignore possible failure of this test for centos images
|
||||
[ "${OS}" == "rhel7" ] && false "ERROR: Failed to pull image"
|
||||
fi
|
||||
|
||||
OS_TESTSUITE_RESULT=0
|
||||
|
||||
ct_os_cluster_down
|
||||
|
||||
# vim: set tabstop=2:shiftwidth=2:expandtab:
|
||||
|
||||
|
|
@ -24,7 +24,12 @@ export CT_SKIP_NEW_PROJECT=true
|
|||
export CT_SKIP_UPLOAD_IMAGE=true
|
||||
export CT_NAMESPACE=openshift
|
||||
|
||||
test_ruby_integration ruby ${VERSION} "${IMAGE_NAME}"
|
||||
test_ruby_integration "${IMAGE_NAME}"
|
||||
|
||||
# Check the imagestream
|
||||
test_ruby_imagestream
|
||||
|
||||
OS_TESTSUITE_RESULT=0
|
||||
|
||||
# vim: set tabstop=2:shiftwidth=2:expandtab:
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
../common/test-lib-openshift.sh
|
||||
1278
test/test-lib-openshift.sh
Normal file
1278
test/test-lib-openshift.sh
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -13,13 +13,24 @@ source ${THISDIR}/test-lib-openshift.sh
|
|||
|
||||
function test_ruby_integration() {
|
||||
local image_name=$1
|
||||
local version=$2
|
||||
local import_image=${3:-}
|
||||
VERSION=$version ct_os_test_s2i_app "${image_name}" \
|
||||
"https://github.com/sclorg/s2i-ruby-container.git" \
|
||||
${version}/test/puma-test-app \
|
||||
".*" \
|
||||
8080 http 200 "" \
|
||||
"${import_image}"
|
||||
ct_os_test_s2i_app "${image_name}" \
|
||||
"https://github.com/sclorg/s2i-ruby-container.git" \
|
||||
"${VERSION}/test/puma-test-app" \
|
||||
".*"
|
||||
}
|
||||
|
||||
# Check the imagestream
|
||||
function test_ruby_imagestream() {
|
||||
case ${OS} in
|
||||
rhel7|centos7) ;;
|
||||
*) echo "Imagestream testing not supported for $OS environment." ; return 0 ;;
|
||||
esac
|
||||
|
||||
ct_os_test_image_stream_s2i "${THISDIR}/imagestreams/ruby-${OS%[0-9]*}.json" "${IMAGE_NAME}" \
|
||||
"https://github.com/sclorg/s2i-ruby-container.git" \
|
||||
"${VERSION}/test/puma-test-app" \
|
||||
".*"
|
||||
}
|
||||
|
||||
# vim: set tabstop=2:shiftwidth=2:expandtab:
|
||||
|
||||
|
|
|
|||
441
test/test-lib.sh
441
test/test-lib.sh
|
|
@ -1,3 +1,4 @@
|
|||
# shellcheck shell=bash
|
||||
#
|
||||
# Test a container image.
|
||||
#
|
||||
|
|
@ -24,20 +25,23 @@ EXPECTED_EXIT_CODE=0
|
|||
# Uses: $CID_FILE_DIR - path to directory containing cid_files
|
||||
# Uses: $EXPECTED_EXIT_CODE - expected container exit code
|
||||
function ct_cleanup() {
|
||||
for cid_file in $CID_FILE_DIR/* ; do
|
||||
local container=$(cat $cid_file)
|
||||
ct_show_resources
|
||||
for cid_file in "$CID_FILE_DIR"/* ; do
|
||||
[ -f "$cid_file" ] || continue
|
||||
local container
|
||||
container=$(cat "$cid_file")
|
||||
|
||||
: "Stopping and removing container $container..."
|
||||
docker stop $container
|
||||
exit_status=$(docker inspect -f '{{.State.ExitCode}}' $container)
|
||||
docker stop "$container"
|
||||
exit_status=$(docker inspect -f '{{.State.ExitCode}}' "$container")
|
||||
if [ "$exit_status" != "$EXPECTED_EXIT_CODE" ]; then
|
||||
: "Dumping logs for $container"
|
||||
docker logs $container
|
||||
docker logs "$container"
|
||||
fi
|
||||
docker rm -v $container
|
||||
rm $cid_file
|
||||
docker rm -v "$container"
|
||||
rm "$cid_file"
|
||||
done
|
||||
rmdir $CID_FILE_DIR
|
||||
rmdir "$CID_FILE_DIR"
|
||||
: "Done."
|
||||
}
|
||||
|
||||
|
|
@ -48,6 +52,46 @@ function ct_enable_cleanup() {
|
|||
trap ct_cleanup EXIT SIGINT
|
||||
}
|
||||
|
||||
# ct_check_envs_set env_filter check_envs loop_envs [env_format]
|
||||
# --------------------
|
||||
# Compares values from one list of environment variable definitions against such list,
|
||||
# checking if the values are present and have a specific format.
|
||||
# Argument: env_filter - optional string passed to grep used for
|
||||
# choosing which variables to filter out in env var lists.
|
||||
# Argument: check_envs - list of env var definitions to check values against
|
||||
# Argument: loop_envs - list of env var definitions to check values for
|
||||
# Argument: env_format (optional) - format string for bash substring deletion used
|
||||
# for checking whether the value is contained in check_envs.
|
||||
# Defaults to: "*VALUE*", VALUE string gets replaced by actual value from loop_envs
|
||||
function ct_check_envs_set {
|
||||
local env_filter check_envs env_format
|
||||
env_filter=$1; shift
|
||||
check_envs=$1; shift
|
||||
loop_envs=$1; shift
|
||||
env_format=${1:-"*VALUE*"}
|
||||
while read -r variable; do
|
||||
[ -z "$variable" ] && continue
|
||||
var_name=$(echo "$variable" | awk -F= '{ print $1 }')
|
||||
stripped=$(echo "$variable" | awk -F= '{ print $2 }')
|
||||
filtered_envs=$(echo "$check_envs" | grep "^$var_name=")
|
||||
[ -z "$filtered_envs" ] && { echo "$var_name not found during \` docker exec\`"; return 1; }
|
||||
old_IFS=$IFS
|
||||
# For each such variable compare its content with the `docker exec` result, use `:` as delimiter
|
||||
IFS=:
|
||||
for value in $stripped; do
|
||||
# If the falue checked does not go through env_filter we do not care about it
|
||||
echo "$value" | grep -q "$env_filter" || continue
|
||||
if [ -n "${filtered_envs##${env_format//VALUE/$value}}" ]; then
|
||||
echo " Value $value is missing from variable $var_name"
|
||||
echo "$filtered_envs"
|
||||
IFS=$old_IFS
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
IFS=$old_IFS
|
||||
done <<< "$(echo "$loop_envs" | grep "$env_filter" | grep -v "^PWD=")"
|
||||
}
|
||||
|
||||
# ct_get_cid [name]
|
||||
# --------------------
|
||||
# Prints container id from cid_file based on the name of the file.
|
||||
|
|
@ -55,7 +99,7 @@ function ct_enable_cleanup() {
|
|||
# Uses: $CID_FILE_DIR - path to directory containing cid_files
|
||||
function ct_get_cid() {
|
||||
local name="$1" ; shift || return 1
|
||||
echo $(cat "$CID_FILE_DIR/$name")
|
||||
cat "$CID_FILE_DIR/$name"
|
||||
}
|
||||
|
||||
# ct_get_cip [id]
|
||||
|
|
@ -64,7 +108,7 @@ function ct_get_cid() {
|
|||
# Argument: id - container id
|
||||
function ct_get_cip() {
|
||||
local id="$1" ; shift
|
||||
docker inspect --format='{{.NetworkSettings.IPAddress}}' $(ct_get_cid "$id")
|
||||
docker inspect --format='{{.NetworkSettings.IPAddress}}' "$(ct_get_cid "$id")"
|
||||
}
|
||||
|
||||
# ct_wait_for_cid [cid_file]
|
||||
|
|
@ -79,9 +123,9 @@ function ct_wait_for_cid() {
|
|||
local attempt=1
|
||||
local result=1
|
||||
while [ $attempt -le $max_attempts ]; do
|
||||
[ -f $cid_file ] && [ -s $cid_file ] && return 0
|
||||
[ -f "$cid_file" ] && [ -s "$cid_file" ] && return 0
|
||||
: "Waiting for container start..."
|
||||
attempt=$(( $attempt + 1 ))
|
||||
attempt=$(( attempt + 1 ))
|
||||
sleep $sleep_time
|
||||
done
|
||||
return 1
|
||||
|
|
@ -100,30 +144,32 @@ function ct_assert_container_creation_fails() {
|
|||
local cid_file=assert
|
||||
set +e
|
||||
local old_container_args="${CONTAINER_ARGS-}"
|
||||
# we really work with CONTAINER_ARGS as with a string
|
||||
# shellcheck disable=SC2124
|
||||
CONTAINER_ARGS="$@"
|
||||
ct_create_container $cid_file
|
||||
if [ $? -eq 0 ]; then
|
||||
local cid=$(ct_get_cid $cid_file)
|
||||
if ct_create_container "$cid_file" ; then
|
||||
local cid
|
||||
cid=$(ct_get_cid "$cid_file")
|
||||
|
||||
while [ "$(docker inspect -f '{{.State.Running}}' $cid)" == "true" ] ; do
|
||||
while [ "$(docker inspect -f '{{.State.Running}}' "$cid")" == "true" ] ; do
|
||||
sleep 2
|
||||
attempt=$(( $attempt + 1 ))
|
||||
if [ $attempt -gt $max_attempts ]; then
|
||||
docker stop $cid
|
||||
attempt=$(( attempt + 1 ))
|
||||
if [ "$attempt" -gt "$max_attempts" ]; then
|
||||
docker stop "$cid"
|
||||
ret=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
exit_status=$(docker inspect -f '{{.State.ExitCode}}' $cid)
|
||||
exit_status=$(docker inspect -f '{{.State.ExitCode}}' "$cid")
|
||||
if [ "$exit_status" == "0" ]; then
|
||||
ret=1
|
||||
fi
|
||||
docker rm -v $cid
|
||||
rm $CID_FILE_DIR/$cid_file
|
||||
docker rm -v "$cid"
|
||||
rm "$CID_FILE_DIR/$cid_file"
|
||||
fi
|
||||
[ ! -z $old_container_args ] && CONTAINER_ARGS="$old_container_args"
|
||||
[ -n "$old_container_args" ] && CONTAINER_ARGS="$old_container_args"
|
||||
set -e
|
||||
return $ret
|
||||
return "$ret"
|
||||
}
|
||||
|
||||
# ct_create_container [name, command]
|
||||
|
|
@ -139,9 +185,10 @@ function ct_assert_container_creation_fails() {
|
|||
function ct_create_container() {
|
||||
local cid_file="$CID_FILE_DIR/$1" ; shift
|
||||
# create container with a cidfile in a directory for cleanup
|
||||
docker run --cidfile="$cid_file" -d ${CONTAINER_ARGS:-} $IMAGE_NAME "$@"
|
||||
ct_wait_for_cid $cid_file || return 1
|
||||
: "Created container $(cat $cid_file)"
|
||||
# shellcheck disable=SC2086
|
||||
docker run --cidfile="$cid_file" -d ${CONTAINER_ARGS:-} "$IMAGE_NAME" "$@"
|
||||
ct_wait_for_cid "$cid_file" || return 1
|
||||
: "Created container $(cat "$cid_file")"
|
||||
}
|
||||
|
||||
# ct_scl_usage_old [name, command, expected]
|
||||
|
|
@ -159,19 +206,19 @@ function ct_scl_usage_old() {
|
|||
local expected="$3"
|
||||
local out=""
|
||||
: " Testing the image SCL enable"
|
||||
out=$(docker run --rm ${IMAGE_NAME} /bin/bash -c "${command}")
|
||||
out=$(docker run --rm "${IMAGE_NAME}" /bin/bash -c "${command}")
|
||||
if ! echo "${out}" | grep -q "${expected}"; then
|
||||
echo "ERROR[/bin/bash -c "${command}"] Expected '${expected}', got '${out}'" >&2
|
||||
echo "ERROR[/bin/bash -c \"${command}\"] Expected '${expected}', got '${out}'" >&2
|
||||
return 1
|
||||
fi
|
||||
out=$(docker exec $(ct_get_cid $name) /bin/bash -c "${command}" 2>&1)
|
||||
out=$(docker exec "$(ct_get_cid "$name")" /bin/bash -c "${command}" 2>&1)
|
||||
if ! echo "${out}" | grep -q "${expected}"; then
|
||||
echo "ERROR[exec /bin/bash -c "${command}"] Expected '${expected}', got '${out}'" >&2
|
||||
echo "ERROR[exec /bin/bash -c \"${command}\"] Expected '${expected}', got '${out}'" >&2
|
||||
return 1
|
||||
fi
|
||||
out=$(docker exec $(ct_get_cid $name) /bin/sh -ic "${command}" 2>&1)
|
||||
out=$(docker exec "$(ct_get_cid "$name")" /bin/sh -ic "${command}" 2>&1)
|
||||
if ! echo "${out}" | grep -q "${expected}"; then
|
||||
echo "ERROR[exec /bin/sh -ic "${command}"] Expected '${expected}', got '${out}'" >&2
|
||||
echo "ERROR[exec /bin/sh -ic \"${command}\"] Expected '${expected}', got '${out}'" >&2
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
|
@ -183,22 +230,24 @@ function ct_scl_usage_old() {
|
|||
# Argument: strings - strings expected to appear in the documentation
|
||||
# Uses: $IMAGE_NAME - name of the image being tested
|
||||
function ct_doc_content_old() {
|
||||
local tmpdir=$(mktemp -d)
|
||||
local tmpdir
|
||||
tmpdir=$(mktemp -d)
|
||||
local f
|
||||
: " Testing documentation in the container image"
|
||||
# Extract the help files from the container
|
||||
# shellcheck disable=SC2043
|
||||
for f in help.1 ; do
|
||||
docker run --rm ${IMAGE_NAME} /bin/bash -c "cat /${f}" >${tmpdir}/$(basename ${f})
|
||||
docker run --rm "${IMAGE_NAME}" /bin/bash -c "cat /${f}" >"${tmpdir}/$(basename "${f}")"
|
||||
# Check whether the files contain some important information
|
||||
for term in $@ ; do
|
||||
if ! cat ${tmpdir}/$(basename ${f}) | grep -F -q -e "${term}" ; then
|
||||
for term in "$@" ; do
|
||||
if ! grep -F -q -e "${term}" "${tmpdir}/$(basename "${f}")" ; then
|
||||
echo "ERROR: File /${f} does not include '${term}'." >&2
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
# Check whether the files use the correct format
|
||||
for term in TH PP SH ; do
|
||||
if ! grep -q "^\.${term}" ${tmpdir}/help.1 ; then
|
||||
if ! grep -q "^\.${term}" "${tmpdir}/help.1" ; then
|
||||
echo "ERROR: /help.1 is probably not in troff or groff format, since '${term}' is missing." >&2
|
||||
return 1
|
||||
fi
|
||||
|
|
@ -244,23 +293,22 @@ function ct_build_s2i_npm_variables()
|
|||
# --------------------
|
||||
# Checks existance of the npm tool and runs it.
|
||||
function ct_npm_works() {
|
||||
local tmpdir=$(mktemp -d)
|
||||
local tmpdir
|
||||
tmpdir=$(mktemp -d)
|
||||
: " Testing npm in the container image"
|
||||
cid_file="${tmpdir}/cid"
|
||||
docker run --rm ${IMAGE_NAME} /bin/bash -c "npm --version" >${tmpdir}/version
|
||||
if [ $? -ne 0 ] ; then
|
||||
local cid_file="${tmpdir}/cid"
|
||||
if ! docker run --rm "${IMAGE_NAME}" /bin/bash -c "npm --version" >"${tmpdir}/version" ; then
|
||||
echo "ERROR: 'npm --version' does not work inside the image ${IMAGE_NAME}." >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
docker run -d $(ct_mount_ca_file) --rm --cidfile="$cid_file" ${IMAGE_NAME}-testapp
|
||||
# shellcheck disable=SC2046
|
||||
docker run -d $(ct_mount_ca_file) --rm --cidfile="$cid_file" "${IMAGE_NAME}-testapp"
|
||||
|
||||
# Wait for the container to write it's CID file
|
||||
# Wait for the container to write it's CID file
|
||||
ct_wait_for_cid "$cid_file" || return 1
|
||||
|
||||
docker exec $(cat "$cid_file") /bin/bash -c "npm --verbose install jquery && test -f node_modules/jquery/src/jquery.js" >${tmpdir}/jquery 2>&1
|
||||
|
||||
if [ $? -ne 0 ] ; then
|
||||
if ! docker exec "$(cat "$cid_file")" /bin/bash -c "npm --verbose install jquery && test -f node_modules/jquery/src/jquery.js" >"${tmpdir}/jquery" 2>&1 ; then
|
||||
echo "ERROR: npm could not install jquery inside the image ${IMAGE_NAME}." >&2
|
||||
return 1
|
||||
fi
|
||||
|
|
@ -273,12 +321,97 @@ function ct_npm_works() {
|
|||
fi
|
||||
|
||||
if [ -f "$cid_file" ]; then
|
||||
docker stop $(cat "$cid_file")
|
||||
docker stop "$(cat "$cid_file")"
|
||||
rm "$cid_file"
|
||||
fi
|
||||
: " Success!"
|
||||
}
|
||||
|
||||
# ct_binary_found_from_df binary [path]
|
||||
# --------------------
|
||||
# Checks if a binary can be found in PATH during Dockerfile build
|
||||
# Argument: binary - name of the binary to test accessibility for
|
||||
# Argument: path - optional path in which the binary should reside in
|
||||
# /opt/rh by default
|
||||
function ct_binary_found_from_df() {
|
||||
local tmpdir
|
||||
local binary=$1; shift
|
||||
local binary_path=${1:-"^/opt/rh"}
|
||||
tmpdir=$(mktemp -d)
|
||||
: " Testing $binary in build from Dockerfile"
|
||||
|
||||
# Create Dockerfile that looks for the binary
|
||||
cat <<EOF >"$tmpdir/Dockerfile"
|
||||
FROM $IMAGE_NAME
|
||||
RUN command -v $binary | grep "$binary_path"
|
||||
EOF
|
||||
# Build an image, looking for expected path in the output
|
||||
if ! docker build -f "$tmpdir/Dockerfile" --no-cache "$tmpdir"; then
|
||||
echo " ERROR: Failed to find $binary in Dockerfile!" >&2
|
||||
return 1
|
||||
fi
|
||||
: " Success!"
|
||||
}
|
||||
|
||||
# ct_check_exec_env_vars [env_filter]
|
||||
# --------------------
|
||||
# Checks if all relevant environment variables from `docker run`
|
||||
# can be found in `docker exec` as well.
|
||||
# Argument: env_filter - optional string passed to grep used for
|
||||
# choosing which variables to check in the test case.
|
||||
# Defaults to X_SCLS and variables containing /opt/app-root, /opt/rh
|
||||
# Uses: $CID_FILE_DIR - path to directory containing cid_files
|
||||
# Uses: $IMAGE_NAME - name of the image being tested
|
||||
function ct_check_exec_env_vars() {
|
||||
local tmpdir exec_envs cid old_IFS env_filter
|
||||
local var_name stripped filtered_envs run_envs
|
||||
env_filter=${1:-"^X_SCLS=\|/opt/rh\|/opt/app-root"}
|
||||
tmpdir=$(mktemp -d)
|
||||
CID_FILE_DIR=${CID_FILE_DIR:-$(mktemp -d)}
|
||||
# Get environment variables from `docker run`
|
||||
run_envs=$(docker run --rm "$IMAGE_NAME" /bin/bash -c "env")
|
||||
# Get environment variables from `docker exec`
|
||||
ct_create_container "test_exec_envs" bash -c "sleep 1000" >/dev/null
|
||||
cid=$(ct_get_cid "test_exec_envs")
|
||||
exec_envs=$(docker exec "$cid" env)
|
||||
# Filter out variables we are not interested in
|
||||
# Always check X_SCLS, ignore PWD
|
||||
# Check variables from `docker run` that have alternative paths inside (/opt/rh, /opt/app-root)
|
||||
ct_check_envs_set "$env_filter" "$exec_envs" "$run_envs" "*VALUE*" || return 1
|
||||
echo " All values present in \`docker exec\`"
|
||||
return 0
|
||||
}
|
||||
|
||||
# ct_check_scl_enable_vars [env_filter]
|
||||
# --------------------
|
||||
# Checks if all relevant environment variables from `docker run`
|
||||
# are set twice after a second call of `scl enable $SCLS`.
|
||||
# Argument: env_filter - optional string passed to grep used for
|
||||
# choosing which variables to check in the test case.
|
||||
# Defaults to paths containing enabled SCLS in the image
|
||||
# Uses: $IMAGE_NAME - name of the image being tested
|
||||
function ct_check_scl_enable_vars() {
|
||||
local tmpdir exec_envs cid old_IFS env_filter enabled_scls
|
||||
local var_name stripped filtered_envs loop_envs
|
||||
env_filter=$1
|
||||
tmpdir=$(mktemp -d)
|
||||
enabled_scls=$(docker run --rm "$IMAGE_NAME" /bin/bash -c "echo \$X_SCLS")
|
||||
if [ -z "$env_filter" ]; then
|
||||
for scl in $enabled_scls; do
|
||||
[ -z "$env_filter" ] && env_filter="/$scl" && continue
|
||||
# env_filter not empty, append to the existing list
|
||||
env_filter="$env_filter|/$scl"
|
||||
done
|
||||
fi
|
||||
# Get environment variables from `docker run`
|
||||
loop_envs=$(docker run --rm "$IMAGE_NAME" /bin/bash -c "env")
|
||||
run_envs=$(docker run --rm "$IMAGE_NAME" /bin/bash -c "X_SCLS= scl enable $enabled_scls env")
|
||||
# Check if the values are set twice in the second set of envs
|
||||
ct_check_envs_set "$env_filter" "$run_envs" "$loop_envs" "*VALUE*VALUE*" || return 1
|
||||
echo " All scl_enable values present"
|
||||
return 0
|
||||
}
|
||||
|
||||
# ct_path_append PATH_VARNAME DIRECTORY
|
||||
# -------------------------------------
|
||||
# Append DIRECTORY to VARIABLE of name PATH_VARNAME, the VARIABLE must consist
|
||||
|
|
@ -318,8 +451,10 @@ ct_path_foreach ()
|
|||
function ct_run_test_list() {
|
||||
for test_case in $TEST_LIST; do
|
||||
: "Running test $test_case"
|
||||
[ -f test/$test_case ] && source test/$test_case
|
||||
[ -f ../test/$test_case ] && source ../test/$test_case
|
||||
# shellcheck source=/dev/null
|
||||
[ -f "test/$test_case" ] && source "test/$test_case"
|
||||
# shellcheck source=/dev/null
|
||||
[ -f "../test/$test_case" ] && source "../test/$test_case"
|
||||
$test_case
|
||||
done;
|
||||
}
|
||||
|
|
@ -335,9 +470,9 @@ function ct_run_test_list() {
|
|||
ct_gen_self_signed_cert_pem() {
|
||||
local output_dir=$1 ; shift
|
||||
local base_name=$1 ; shift
|
||||
mkdir -p ${output_dir}
|
||||
openssl req -newkey rsa:2048 -nodes -keyout ${output_dir}/${base_name}-key.pem -subj '/C=GB/ST=Berkshire/L=Newbury/O=My Server Company' > ${base_name}-req.pem
|
||||
openssl req -new -x509 -nodes -key ${output_dir}/${base_name}-key.pem -batch > ${output_dir}/${base_name}-cert-selfsigned.pem
|
||||
mkdir -p "${output_dir}"
|
||||
openssl req -newkey rsa:2048 -nodes -keyout "${output_dir}"/"${base_name}"-key.pem -subj '/C=GB/ST=Berkshire/L=Newbury/O=My Server Company' > "${base_name}"-req.pem
|
||||
openssl req -new -x509 -nodes -key "${output_dir}"/"${base_name}"-key.pem -batch > "${output_dir}"/"${base_name}"-cert-selfsigned.pem
|
||||
}
|
||||
|
||||
# ct_obtain_input FILE|DIR|URL
|
||||
|
|
@ -353,7 +488,8 @@ function ct_obtain_input() {
|
|||
# Try to use same extension for the temporary file if possible
|
||||
[[ "${extension}" =~ ^[a-z0-9]*$ ]] && extension=".${extension}" || extension=""
|
||||
|
||||
local output=$(mktemp "/var/tmp/test-input-XXXXXX$extension")
|
||||
local output
|
||||
output=$(mktemp "/var/tmp/test-input-XXXXXX$extension")
|
||||
if [ -f "${input}" ] ; then
|
||||
cp -f "${input}" "${output}"
|
||||
elif [ -d "${input}" ] ; then
|
||||
|
|
@ -390,27 +526,28 @@ ct_test_response() {
|
|||
local result=1
|
||||
local status
|
||||
local response_code
|
||||
local response_file=$(mktemp /tmp/ct_test_response_XXXXXX)
|
||||
while [ ${attempt} -le ${max_attempts} ]; do
|
||||
curl --connect-timeout 10 -s -w '%{http_code}' "${url}" >${response_file} && status=0 || status=1
|
||||
if [ ${status} -eq 0 ]; then
|
||||
response_code=$(cat ${response_file} | tail -c 3)
|
||||
local response_file
|
||||
response_file=$(mktemp /tmp/ct_test_response_XXXXXX)
|
||||
while [ "${attempt}" -le "${max_attempts}" ]; do
|
||||
curl --connect-timeout 10 -s -w '%{http_code}' "${url}" >"${response_file}" && status=0 || status=1
|
||||
if [ "${status}" -eq 0 ]; then
|
||||
response_code=$(tail -c 3 "${response_file}")
|
||||
if [ "${response_code}" -eq "${expected_code}" ]; then
|
||||
result=0
|
||||
fi
|
||||
cat ${response_file} | grep -qP -e "${body_regexp}" || result=1;
|
||||
grep -qP -e "${body_regexp}" "${response_file}" || result=1;
|
||||
# Some services return 40x code until they are ready, so let's give them
|
||||
# some chance and not end with failure right away
|
||||
# Do not wait if we already have expected outcome though
|
||||
if [ ${result} -eq 0 -o ${attempt} -gt ${ignore_error_attempts} -o ${attempt} -eq ${max_attempts} ] ; then
|
||||
if [ "${result}" -eq 0 ] || [ "${attempt}" -gt "${ignore_error_attempts}" ] || [ "${attempt}" -eq "${max_attempts}" ] ; then
|
||||
break
|
||||
fi
|
||||
fi
|
||||
attempt=$(( ${attempt} + 1 ))
|
||||
sleep ${sleep_time}
|
||||
attempt=$(( attempt + 1 ))
|
||||
sleep "${sleep_time}"
|
||||
done
|
||||
rm -f ${response_file}
|
||||
return ${result}
|
||||
rm -f "${response_file}"
|
||||
return "${result}"
|
||||
}
|
||||
|
||||
# ct_registry_from_os OS
|
||||
|
|
@ -421,15 +558,43 @@ ct_registry_from_os() {
|
|||
local registry=""
|
||||
case $1 in
|
||||
rhel*)
|
||||
registry=registry.access.redhat.com
|
||||
registry=registry.redhat.io
|
||||
;;
|
||||
*)
|
||||
registry=docker.io
|
||||
registry=quay.io
|
||||
;;
|
||||
esac
|
||||
echo "$registry"
|
||||
}
|
||||
|
||||
# ct_get_public_image_name OS BASE_IMAGE_NAME VERSION
|
||||
# ----------------
|
||||
# Transform the arguments into public image name
|
||||
# Argument: OS - string containing the os version
|
||||
# Argument: BASE_IMAGE_NAME - string containing the base name of the image as defined in the Makefile
|
||||
# Argument: VERSION - string containing the version of the image as defined in the Makefile
|
||||
ct_get_public_image_name() {
|
||||
local os=$1; shift
|
||||
local base_image_name=$1; shift
|
||||
local version=$1; shift
|
||||
|
||||
local public_image_name
|
||||
local registry
|
||||
|
||||
registry=$(ct_registry_from_os "$os")
|
||||
if [ "x$os" == "xrhel7" ]; then
|
||||
public_image_name=$registry/rhscl/$base_image_name-${version//./}-rhel7
|
||||
elif [ "x$os" == "xrhel8" ]; then
|
||||
public_image_name=$registry/rhel8/$base_image_name-${version//./}
|
||||
elif [ "x$os" == "xcentos7" ]; then
|
||||
public_image_name=$registry/centos7/$base_image_name-${version//./}-centos7
|
||||
elif [ "x$os" == "xcentos8" ]; then
|
||||
public_image_name=$registry/centos8/$base_image_name-${version//./}-centos8
|
||||
fi
|
||||
|
||||
echo "$public_image_name"
|
||||
}
|
||||
|
||||
# ct_assert_cmd_success CMD
|
||||
# ----------------
|
||||
# Evaluates [cmd] and fails if it does not succeed.
|
||||
|
|
@ -572,9 +737,9 @@ EOF
|
|||
|
||||
# Add in artifacts if doing an incremental build
|
||||
if $incremental; then
|
||||
echo "RUN mkdir /tmp/artifacts" >>"$df_name"
|
||||
echo "ADD artifacts.tar /tmp/artifacts" >>"$df_name"
|
||||
echo "RUN chown -R $user_id:0 /tmp/artifacts" >>"$df_name"
|
||||
{ echo "RUN mkdir /tmp/artifacts"
|
||||
echo "ADD artifacts.tar /tmp/artifacts"
|
||||
echo "RUN chown -R $user_id:0 /tmp/artifacts" ; } >>"$df_name"
|
||||
fi
|
||||
|
||||
echo "USER $user_id" >>"$df_name"
|
||||
|
|
@ -595,8 +760,144 @@ EOF
|
|||
mount_options=$(echo "$s2i_args" | grep -o -e '\(-v\)[[:space:]]\.*\S*' || true)
|
||||
|
||||
# Run the build and tag the result
|
||||
# shellcheck disable=SC2086
|
||||
docker build $mount_options -f "$df_name" --no-cache=true -t "$dst_image" .
|
||||
)
|
||||
}
|
||||
|
||||
# ct_check_image_availability PUBLIC_IMAGE_NAME
|
||||
# ----------------------------
|
||||
# Pull an image from the public repositories to see if the image is already available.
|
||||
# Argument: PUBLIC_IMAGE_NAME - string containing the public name of the image to pull
|
||||
ct_check_image_availability() {
|
||||
local public_image_name=$1;
|
||||
|
||||
# Try pulling the image to see if it is accessible
|
||||
if ! docker pull "$public_image_name" &>/dev/null; then
|
||||
echo "$public_image_name could not be downloaded via 'docker'"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# ct_check_latest_imagestreams
|
||||
# -----------------------------
|
||||
# Check if the latest version present in Makefile in the variable VERSIONS
|
||||
# is present in all imagestreams.
|
||||
# Also the latest tag in the imagestreams has to contain the latest version
|
||||
ct_check_latest_imagestreams() {
|
||||
local latest_version=
|
||||
local test_lib_dir=
|
||||
|
||||
# We only maintain imagestreams for RHEL and CentOS (Community)
|
||||
if [[ "$OS" =~ ^fedora.* ]] ; then
|
||||
echo "Imagestreams for Fedora are not maintained, skipping ct_check_latest_imagestreams"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Check only lines which starts with VERSIONS
|
||||
latest_version=$(grep '^VERSIONS' Makefile | rev | cut -d ' ' -f 1 | rev )
|
||||
# Fall back to previous version if the latest is excluded for this OS
|
||||
[ -f "$latest_version/.exclude-$OS" ] && latest_version=$(grep '^VERSIONS' Makefile | rev | cut -d ' ' -f 2 | rev )
|
||||
# Only test the imagestream once, when the version matches
|
||||
# ignore the SC warning, $VERSION is always available
|
||||
# shellcheck disable=SC2153
|
||||
if [ "$latest_version" == "$VERSION" ]; then
|
||||
test_lib_dir=$(dirname "$(readlink -f "$0")")
|
||||
python3 "${test_lib_dir}/check_imagestreams.py" "$latest_version"
|
||||
else
|
||||
echo "Image version $VERSION is not latest, skipping ct_check_latest_imagestreams"
|
||||
fi
|
||||
}
|
||||
|
||||
# ct_show_resources
|
||||
# ----------------
|
||||
# Prints the available resources
|
||||
ct_show_resources()
|
||||
{
|
||||
echo "Resources info:"
|
||||
echo "Memory:"
|
||||
free -h
|
||||
echo "Storage:"
|
||||
df -h
|
||||
echo "CPU"
|
||||
lscpu
|
||||
}
|
||||
|
||||
# ct_test_app_dockerfile
|
||||
# -----------------------------
|
||||
# Argument: dockerfile - path to a Dockerfile that will be used for building an image
|
||||
# (must work with an application directory called 'app-src')
|
||||
# Argument: app_url - git URI with a testing application
|
||||
# Argument: body_regexp - PCRE regular expression that must match the response body
|
||||
# Argument: app_dir - name of the application directory that is used in the Dockerfile
|
||||
# Argument: port - Optional port number (default: 8080)
|
||||
ct_test_app_dockerfile() {
|
||||
local dockerfile=$1
|
||||
local app_url=$2
|
||||
local expected_text=$3
|
||||
local app_dir=$4 # this is a directory that must match with the name in the Dockerfile
|
||||
local port=${5:-8080}
|
||||
local app_image_name=myapp
|
||||
local ret
|
||||
local cname=app_dockerfile
|
||||
|
||||
if [ -z "$app_dir" ] ; then
|
||||
echo "ERROR: Option app_dir not set. Terminating the Dockerfile build."
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! [ -r "${dockerfile}" ] || ! [ -s "${dockerfile}" ] ; then
|
||||
echo "ERROR: Dockerfile ${dockerfile} does not exist or is empty."
|
||||
echo "Terminating the Dockerfile build."
|
||||
return 1
|
||||
fi
|
||||
|
||||
CID_FILE_DIR=${CID_FILE_DIR:-$(mktemp -d)}
|
||||
local dockerfile_abs
|
||||
dockerfile_abs=$(readlink -f "${dockerfile}")
|
||||
tmpdir=$(mktemp -d)
|
||||
pushd "$tmpdir" >/dev/null
|
||||
cp "${dockerfile_abs}" Dockerfile
|
||||
|
||||
# Rewrite the source image to what we test
|
||||
sed -i -e "s|^FROM.*$|FROM $IMAGE_NAME|" Dockerfile
|
||||
# a bit more verbose, but should help debugging failures
|
||||
echo "Using this Dockerfile:"
|
||||
cat Dockerfile
|
||||
|
||||
if ! git clone "${app_url}" "${app_dir}" ; then
|
||||
echo "ERROR: Git repository ${app_url} cannot be cloned into ${app_dir}."
|
||||
echo "Terminating the Dockerfile build."
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "Building '${app_image_name}' image using docker build"
|
||||
if ! docker build --no-cache=true -t "${app_image_name}" . ; then
|
||||
echo "ERROR: The image cannot be built from ${dockerfile} and application ${app_url}."
|
||||
echo "Terminating the Dockerfile build."
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! docker run -d --cidfile="${CID_FILE_DIR}/app_dockerfile" --rm "${app_image_name}" ; then
|
||||
echo "ERROR: The image ${app_image_name} cannot be run for ${dockerfile} and application ${app_url}."
|
||||
echo "Terminating the Dockerfile build."
|
||||
return 1
|
||||
fi
|
||||
echo "Waiting for ${app_image_name} to start"
|
||||
ct_wait_for_cid "${CID_FILE_DIR}/app_dockerfile"
|
||||
|
||||
ip="$(ct_get_cip "${cname}")"
|
||||
ct_test_response "http://$ip:${port}" 200 "${expected_text}"
|
||||
ret=$?
|
||||
|
||||
# cleanup
|
||||
docker kill "$(ct_get_cid "${cname}")"
|
||||
sleep 2
|
||||
docker rmi "${app_image_name}"
|
||||
popd >/dev/null
|
||||
rm -rf "${tmpdir}"
|
||||
rm -f "${CID_FILE_DIR}/${cname}"
|
||||
return $ret
|
||||
}
|
||||
|
||||
# vim: set tabstop=2:shiftwidth=2:expandtab:
|
||||
|
|
|
|||
|
|
@ -8,7 +8,8 @@ from conu import DockerBackend, S2IDockerImage, Probe, DockerRunBuilder
|
|||
import pytest
|
||||
|
||||
|
||||
image_name = os.environ.get("IMAGE_NAME", "ruby")
|
||||
image_name = os.environ.get("IMAGE_NAME", "ruby").split(":")[0]
|
||||
image_tag = os.environ.get("IMAGE_NAME", "ruby").split(":")[1]
|
||||
test_dir = os.path.abspath(os.path.dirname(__file__))
|
||||
puma_app_path = os.path.join(test_dir, "puma-test-app")
|
||||
rack_app_path = os.path.join(test_dir, "rack-test-app")
|
||||
|
|
@ -23,7 +24,7 @@ backend = DockerBackend(logging_level=logging.DEBUG)
|
|||
|
||||
@pytest.fixture(scope="module", params=app_paths)
|
||||
def app(request):
|
||||
i = S2IDockerImage(image_name)
|
||||
i = S2IDockerImage(image_name, tag=image_tag)
|
||||
app_name = os.path.basename(request.param)
|
||||
app = i.extend(request.param, app_name)
|
||||
yield app
|
||||
|
|
@ -50,7 +51,7 @@ class TestSuite:
|
|||
c.delete()
|
||||
|
||||
def test_invoking_container(self):
|
||||
image = backend.ImageClass(image_name)
|
||||
image = backend.ImageClass(image_name, tag=image_tag)
|
||||
c = image.run_via_binary(DockerRunBuilder(command=["bash", "-c", "ruby --version"]))
|
||||
try:
|
||||
c.wait()
|
||||
|
|
@ -64,7 +65,7 @@ class TestSuite:
|
|||
assert os.environ["VERSION"] in logs
|
||||
|
||||
def test_usage(self):
|
||||
i = S2IDockerImage(image_name)
|
||||
i = S2IDockerImage(image_name, tag=image_tag)
|
||||
c = i.run_via_binary()
|
||||
|
||||
def logs_received():
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue