apiVersion: template.openshift.io/v1 kind: Template labels: app: multi-test-postgresql-persistent template: multi-postgresql-persistent 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/linuxacademy/Red-Hat-Certified-Specialist-in-Containers-and-Kubernetes/blob/main/nodejs-rest-http-crud/README.md. metadata: annotations: description: An example Node.js application with a PostgreSQL database. modified from openshift example template Node.js+PostgreSQL and a application https://github.com/nodeshift-starters/nodejs-rest-http-crud/ iconClass: openshift.io/display-name: Multi-Container Test openshift.io/documentation-url: https://github.com/nodeshift-starters/nodejs-rest-http-crud openshift.io/long-description: openshift.io/provider-display-name: JB openshift.io/support-url: samples.operator.openshift.io/version: 4.8.5 tags: quickstart,nodejs template.openshift.io/bindable: "false" creationTimestamp: "2021-09-02T13:42:21Z" labels: samples.operator.openshift.io/managed: "true" name: multi-test-postgresql-persistent namespace: resourceVersion: "14091" uid: bc4db629-54f1-4929-a993-a6f455a1ef4b objects: - apiVersion: v1 kind: Secret metadata: name: ${NAME} stringData: database-admin-password: ${DATABASE_ADMIN_PASSWORD} database-password: ${DATABASE_PASSWORD} database-user: ${DATABASE_USER} - 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: {} source: contextDir: ${CONTEXT_DIR} git: ref: ${SOURCE_REPOSITORY_REF} uri: ${SOURCE_REPOSITORY_URL} type: Git strategy: sourceStrategy: env: - name: NPM_MIRROR value: ${NPM_MIRROR} from: kind: ImageStreamTag name: nodejs:${NODEJS_VERSION} namespace: ${NAMESPACE} type: Source triggers: - type: ImageChange - type: ConfigChange - github: secret: ${GITHUB_WEBHOOK_SECRET} type: GitHub - generic: secret: ${GENERIC_WEBHOOK_SECRET} type: Generic - apiVersion: v1 kind: DeploymentConfig metadata: annotations: description: Defines how to deploy the application server template.alpha.openshift.io/wait-for-ready: "true" labels: app.openshift.io/runtime: nodejs name: ${NAME} spec: replicas: 1 selector: name: ${NAME} strategy: type: Recreate template: metadata: labels: app.openshift.io/runtime: nodejs 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: POSTGRESQL_ADMIN_PASSWORD valueFrom: secretKeyRef: key: database-admin-password name: ${NAME} image: ' ' livenessProbe: httpGet: path: / port: 8080 initialDelaySeconds: 30 timeoutSeconds: 3 name: nodejs-postgresql-persistent ports: - containerPort: 8080 readinessProbe: httpGet: path: / port: 8080 initialDelaySeconds: 3 timeoutSeconds: 3 resources: limits: memory: ${MEMORY_LIMIT} triggers: - imageChangeParams: automatic: true containerNames: - nodejs-postgresql-persistent from: kind: ImageStreamTag name: ${NAME}:latest type: ImageChange - type: ConfigChange - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: ${DATABASE_SERVICE_NAME} spec: accessModes: - ReadWriteOnce resources: requests: storage: ${VOLUME_CAPACITY} - 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_ADMIN_PASSWORD valueFrom: secretKeyRef: key: database-admin-password name: ${NAME} image: ' ' livenessProbe: initialDelaySeconds: 30 tcpSocket: port: 5432 timeoutSeconds: 1 name: postgresql ports: - containerPort: 5432 resources: limits: memory: ${MEMORY_POSTGRESQL_LIMIT} volumeMounts: - mountPath: /var/lib/postgresql/data name: ${DATABASE_SERVICE_NAME}-data volumes: - name: ${DATABASE_SERVICE_NAME}-data persistentVolumeClaim: claimName: ${DATABASE_SERVICE_NAME} triggers: - imageChangeParams: automatic: true containerNames: - postgresql from: kind: ImageStreamTag name: postgresql:${POSTGRESQL_VERSION} 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: nodejs-postgresql-persistent - description: The OpenShift Namespace where the ImageStream resides. displayName: Namespace name: NAMESPACE required: true value: openshift - description: Version of NodeJS image to be used (10-ubi8, 12-ubi8, or latest). displayName: Version of NodeJS Image name: NODEJS_VERSION required: true value: 14-ubi8 - description: Version of PostgreSQL image to be used (12-el8, or latest). displayName: Version of PostgreSQL Image name: POSTGRESQL_VERSION required: true value: 12-el8 - description: Maximum amount of memory the Node.js container can use. displayName: Memory Limit name: MEMORY_LIMIT required: true value: 256Mi - description: Maximum amount of memory the PostgreSQL container can use. displayName: Memory Limit (PostgreSQL) name: MEMORY_POSTGRESQL_LIMIT required: true value: 256Mi - description: Volume space available for data, e.g. 512Mi, 2Gi displayName: Volume Capacity name: VOLUME_CAPACITY required: true value: 1Gi - 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/linuxacademy/Red-Hat-Certified-Specialist-in-Containers-and-Kubernetes - 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 value: nodejs-rest-http-crud - description: The exposed hostname that will route to the Node.js 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: A secret string used to configure the Generic webhook. displayName: Generic Webhook Secret from: '[a-zA-Z0-9]{40}' generate: expression name: GENERIC_WEBHOOK_SECRET - displayName: Database Service Name name: DATABASE_SERVICE_NAME required: true value: postgresql - description: Username for PostgreSQL user that will be used for accessing the database. displayName: PostgreSQL Username from: user[A-Z0-9]{3} generate: expression name: DATABASE_USER - description: Password for the PostgreSQL user. displayName: PostgreSQL Password from: '[a-zA-Z0-9]{16}' generate: expression name: DATABASE_PASSWORD - displayName: Database Name name: DATABASE_NAME required: true value: my_data - description: Password for the database admin user. displayName: Database Administrator Password from: '[a-zA-Z0-9]{16}' generate: expression name: DATABASE_ADMIN_PASSWORD - description: The custom NPM mirror URL displayName: Custom NPM Mirror URL name: NPM_MIRROR