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.3.0-0.nightly-2020-04-24-134944
    tags: quickstart,ruby,rails
    template.openshift.io/bindable: "false"
  creationTimestamp: "2020-04-25T05:22:43Z"
  labels:
    samples.operator.openshift.io/managed: "true"
  name: rails-postgresql-example
  resourceVersion: "14258"
  selfLink: /apis/template.openshift.io/v1/namespaces/openshift/templates/rails-postgresql-example
  uid: a3a77684-dec2-4089-a1ff-21c29c5bc641
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: v1
  kind: Route
  metadata:
    name: ${NAME}
  spec:
    host: ${APPLICATION_DOMAIN}
    to:
      kind: Service
      name: ${NAME}
- apiVersion: v1
  kind: ImageStream
  metadata:
    annotations:
      description: Keeps track of changes in the application image
    name: ${NAME}
- apiVersion: 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
    postCommit:
      script: bundle exec rake test
    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:2.5
          namespace: ${NAMESPACE}
      type: Source
    triggers:
    - type: ImageChange
    - type: ConfigChange
    - github:
        secret: ${GITHUB_WEBHOOK_SECRET}
      type: GitHub
- apiVersion: v1
  kind: DeploymentConfig
  metadata:
    annotations:
      description: Defines how to deploy the application server
      template.alpha.openshift.io/wait-for-ready: "true"
    name: ${NAME}
  spec:
    replicas: 1
    selector:
      name: ${NAME}
    strategy:
      recreateParams:
        pre:
          execNewPod:
            command:
            - ./migrate-database.sh
            containerName: ${NAME}
          failurePolicy: Abort
      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}
    triggers:
    - imageChangeParams:
        automatic: true
        containerNames:
        - ${NAME}
        from:
          kind: ImageStreamTag
          name: ${NAME}:latest
      type: ImageChange
    - type: ConfigChange
- 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: v1
  kind: DeploymentConfig
  metadata:
    annotations:
      description: Defines how to deploy the database
      template.alpha.openshift.io/wait-for-ready: "true"
    name: ${DATABASE_SERVICE_NAME}
  spec:
    replicas: 1
    selector:
      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
    triggers:
    - imageChangeParams:
        automatic: true
        containerNames:
        - postgresql
        from:
          kind: ImageStreamTag
          name: postgresql:10
          namespace: ${NAMESPACE}
      type: ImageChange
    - type: ConfigChange
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: 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
