--- apiVersion: template.openshift.io/v1 kind: Template labels: app: rails-postgresql-example template: rails-postgresql-example message: |- The following service(s) have been created in your project: ${NAME}, ${DATABASE_SERVICE_NAME}. For more information about using this template, including OpenShift considerations, see https://github.com/sclorg/rails-ex/blob/master/README.md. metadata: annotations: 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. WARNING: Any data stored will be lost upon pod destruction. Only use this template for testing. iconClass: icon-ruby openshift.io/display-name: Rails + PostgreSQL (Ephemeral) openshift.io/documentation-url: https://github.com/sclorg/rails-ex 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. openshift.io/provider-display-name: Red Hat, Inc. openshift.io/support-url: https://access.redhat.com samples.operator.openshift.io/version: 4.18.25 tags: quickstart,ruby,rails template.openshift.io/bindable: "false" creationTimestamp: "2025-10-11T10:37:43Z" labels: samples.operator.openshift.io/managed: "true" managedFields: - apiVersion: template.openshift.io/v1 fieldsType: FieldsV1 fieldsV1: f:labels: .: {} f:app: {} f:template: {} f:message: {} f:metadata: f:annotations: .: {} f:description: {} f:iconClass: {} f:openshift.io/display-name: {} f:openshift.io/documentation-url: {} f:openshift.io/long-description: {} f:openshift.io/provider-display-name: {} f:openshift.io/support-url: {} f:samples.operator.openshift.io/version: {} f:tags: {} f:template.openshift.io/bindable: {} f:labels: .: {} f:samples.operator.openshift.io/managed: {} f:objects: {} f:parameters: {} manager: cluster-samples-operator operation: Update time: "2025-10-11T10:37:43Z" name: rails-postgresql-example namespace: openshift resourceVersion: "17286" uid: c174b039-bd6a-4720-bb63-3ffbfb6c5111 objects: - apiVersion: v1 kind: Secret metadata: name: ${NAME} stringData: application-password: ${APPLICATION_PASSWORD} application-user: ${APPLICATION_USER} database-password: ${DATABASE_PASSWORD} database-user: ${DATABASE_USER} keybase: ${SECRET_KEY_BASE} - apiVersion: v1 kind: Service metadata: annotations: description: Exposes and load balances the application pods service.alpha.openshift.io/dependencies: '[{"name": "${DATABASE_SERVICE_NAME}", "kind": "Service"}]' name: ${NAME} spec: ports: - name: web port: 8080 targetPort: 8080 selector: name: ${NAME} - apiVersion: route.openshift.io/v1 kind: Route metadata: name: ${NAME} spec: host: ${APPLICATION_DOMAIN} to: kind: Service name: ${NAME} - apiVersion: image.openshift.io/v1 kind: ImageStream metadata: annotations: description: Keeps track of changes in the application image name: ${NAME} - apiVersion: build.openshift.io/v1 kind: BuildConfig metadata: annotations: description: Defines how to build the application template.alpha.openshift.io/wait-for-ready: "true" name: ${NAME} spec: output: to: kind: ImageStreamTag name: ${NAME}:latest source: contextDir: ${CONTEXT_DIR} git: ref: ${SOURCE_REPOSITORY_REF} uri: ${SOURCE_REPOSITORY_URL} type: Git strategy: sourceStrategy: env: - name: RUBYGEM_MIRROR value: ${RUBYGEM_MIRROR} from: kind: ImageStreamTag name: ruby:${RUBY_VERSION} namespace: ${NAMESPACE} type: Source triggers: - type: ImageChange - type: ConfigChange - github: secret: ${GITHUB_WEBHOOK_SECRET} type: GitHub - apiVersion: apps/v1 kind: Deployment metadata: annotations: description: Defines how to deploy the application server image.openshift.io/triggers: '[{"from":{"kind":"ImageStreamTag","name":"${NAME}:latest"},"fieldPath": "spec.template.spec.containers[0].image"},{"from":{"kind":"ImageStreamTag","name":"${NAME}:latest"},"fieldPath": "spec.template.spec.initContainers[0].image"}]' template.alpha.openshift.io/wait-for-ready: "true" name: ${NAME} spec: replicas: 1 selector: matchLabels: name: ${NAME} strategy: type: Recreate template: metadata: labels: name: ${NAME} name: ${NAME} spec: containers: - env: - name: DATABASE_SERVICE_NAME value: ${DATABASE_SERVICE_NAME} - name: POSTGRESQL_USER valueFrom: secretKeyRef: key: database-user name: ${NAME} - name: POSTGRESQL_PASSWORD valueFrom: secretKeyRef: key: database-password name: ${NAME} - name: POSTGRESQL_DATABASE value: ${DATABASE_NAME} - name: SECRET_KEY_BASE valueFrom: secretKeyRef: key: keybase name: ${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: key: application-user name: ${NAME} - name: APPLICATION_PASSWORD valueFrom: secretKeyRef: key: application-password name: ${NAME} - name: RAILS_ENV value: ${RAILS_ENV} image: ' ' livenessProbe: httpGet: path: /articles port: 8080 initialDelaySeconds: 10 timeoutSeconds: 3 name: ${NAME} ports: - containerPort: 8080 readinessProbe: httpGet: path: /articles port: 8080 initialDelaySeconds: 5 timeoutSeconds: 3 resources: limits: memory: ${MEMORY_LIMIT} initContainers: - command: - ./migrate-database.sh env: - name: DATABASE_SERVICE_NAME value: ${DATABASE_SERVICE_NAME} - name: POSTGRESQL_USER valueFrom: secretKeyRef: key: database-user name: ${NAME} - name: POSTGRESQL_PASSWORD valueFrom: secretKeyRef: key: database-password name: ${NAME} - name: SECRET_KEY_BASE valueFrom: secretKeyRef: key: keybase name: ${NAME} - 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: key: application-user name: ${NAME} - name: APPLICATION_PASSWORD valueFrom: secretKeyRef: key: application-password name: ${NAME} - name: RAILS_ENV value: ${RAILS_ENV} image: ' ' name: ruby-init-container - apiVersion: v1 kind: Service metadata: annotations: description: Exposes the database server name: ${DATABASE_SERVICE_NAME} spec: ports: - name: postgresql port: 5432 targetPort: 5432 selector: name: ${DATABASE_SERVICE_NAME} - apiVersion: apps/v1 kind: Deployment metadata: annotations: description: Defines how to deploy the database image.openshift.io/triggers: '[{"from":{"kind":"ImageStreamTag","name":"postgresql:${POSTGRESQL_VERSION}", "namespace": "${NAMESPACE}"},"fieldPath": "spec.template.spec.containers[0].image"}]' template.alpha.openshift.io/wait-for-ready: "true" name: ${DATABASE_SERVICE_NAME} spec: replicas: 1 selector: matchLabels: name: ${DATABASE_SERVICE_NAME} strategy: type: Recreate template: metadata: labels: name: ${DATABASE_SERVICE_NAME} name: ${DATABASE_SERVICE_NAME} spec: containers: - env: - name: POSTGRESQL_USER valueFrom: secretKeyRef: key: database-user name: ${NAME} - name: POSTGRESQL_PASSWORD valueFrom: secretKeyRef: key: database-password name: ${NAME} - name: POSTGRESQL_DATABASE value: ${DATABASE_NAME} - name: POSTGRESQL_MAX_CONNECTIONS value: ${POSTGRESQL_MAX_CONNECTIONS} - name: POSTGRESQL_SHARED_BUFFERS value: ${POSTGRESQL_SHARED_BUFFERS} image: ' ' livenessProbe: exec: command: - /usr/libexec/check-container - --live initialDelaySeconds: 120 timeoutSeconds: 10 name: postgresql ports: - containerPort: 5432 readinessProbe: exec: command: - /usr/libexec/check-container initialDelaySeconds: 5 timeoutSeconds: 1 resources: limits: memory: ${MEMORY_POSTGRESQL_LIMIT} volumeMounts: - mountPath: /var/lib/pgsql/data name: data volumes: - emptyDir: {} name: data parameters: - description: The name assigned to all of the frontend objects defined in this template. displayName: Name name: NAME required: true value: rails-postgresql-example - description: The OpenShift Namespace where the ImageStream resides. displayName: Namespace name: NAMESPACE required: true value: openshift - description: Version of Ruby image to be used (3.1-ubi8 by default). displayName: Ruby Version name: RUBY_VERSION required: true value: 3.1-ubi8 - description: Version of Postgresql image to be used (12-el8 by default). displayName: Postgresql Version name: POSTGRESQL_VERSION required: true value: 12-el8 - description: Maximum amount of memory the Rails container can use. displayName: Memory Limit name: MEMORY_LIMIT required: true value: 512Mi - description: Maximum amount of memory the PostgreSQL container can use. displayName: Memory Limit (PostgreSQL) name: MEMORY_POSTGRESQL_LIMIT required: true value: 512Mi - description: The URL of the repository with your application source code. displayName: Git Repository URL name: SOURCE_REPOSITORY_URL required: true value: https://github.com/sclorg/rails-ex.git - description: Set this to a branch name, tag or other ref of your repository if you are not using the default branch. displayName: Git Reference name: SOURCE_REPOSITORY_REF - description: Set this to the relative path to your project if it is not in the root of your repository. displayName: Context Directory name: CONTEXT_DIR - description: The exposed hostname that will route to the Rails service, if left blank a value will be defaulted. displayName: Application Hostname name: APPLICATION_DOMAIN - description: Github trigger secret. A difficult to guess string encoded as part of the webhook URL. Not encrypted. displayName: GitHub Webhook Secret from: '[a-zA-Z0-9]{40}' generate: expression name: GITHUB_WEBHOOK_SECRET - description: Your secret key for verifying the integrity of signed cookies. displayName: Secret Key from: '[a-z0-9]{127}' generate: expression name: SECRET_KEY_BASE - description: The application user that is used within the sample application to authorize access on pages. displayName: Application Username name: APPLICATION_USER required: true value: openshift - description: The application password that is used within the sample application to authorize access on pages. displayName: Application Password name: APPLICATION_PASSWORD required: true value: secret - description: Environment under which the sample application will run. Could be set to production, development or test. displayName: Rails Environment name: RAILS_ENV required: true value: production - displayName: Database Service Name name: DATABASE_SERVICE_NAME required: true value: postgresql - displayName: Database Username from: user[A-Z0-9]{3} generate: expression name: DATABASE_USER - displayName: Database Password from: '[a-zA-Z0-9]{8}' generate: expression name: DATABASE_PASSWORD - displayName: Database Name name: DATABASE_NAME required: true value: root - displayName: Maximum Database Connections name: POSTGRESQL_MAX_CONNECTIONS value: "100" - displayName: Shared Buffer Amount name: POSTGRESQL_SHARED_BUFFERS value: 12MB - description: The custom RubyGems mirror URL displayName: Custom RubyGems Mirror URL name: RUBYGEM_MIRROR