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
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