apiVersion: v1 kind: Template labels: template: cloudforms metadata: name: cloudforms annotations: description: "CloudForms appliance with persistent storage" tags: "instant-app,cloudforms,cfme" iconClass: "icon-rails" objects: - apiVersion: v1 kind: Service metadata: annotations: description: "Exposes and load balances CloudForms pods" service.alpha.openshift.io/dependencies: '[{"name":"${DATABASE_SERVICE_NAME}","namespace":"","kind":"Service"},{"name":"${MEMCACHED_SERVICE_NAME}","namespace":"","kind":"Service"}]' name: ${NAME} spec: ports: - name: http port: 80 protocol: TCP targetPort: 80 - name: https port: 443 protocol: TCP targetPort: 443 selector: name: ${NAME} - apiVersion: v1 kind: Route metadata: name: ${NAME} spec: host: ${APPLICATION_DOMAIN} port: targetPort: https tls: termination: passthrough to: kind: Service name: ${NAME} - apiVersion: v1 kind: ImageStream metadata: name: cfme-openshift-app annotations: description: "Keeps track of changes in the CloudForms app image" spec: dockerImageRepository: registry.access.redhat.com/cloudforms/cfme-openshift-app - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: ${DATABASE_SERVICE_NAME} spec: accessModes: - ReadWriteOnce resources: requests: storage: ${DATABASE_VOLUME_CAPACITY} - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: ${NAME} spec: accessModes: - ReadWriteOnce resources: requests: storage: ${APPLICATION_VOLUME_CAPACITY} - apiVersion: v1 kind: "DeploymentConfig" metadata: name: ${NAME} annotations: description: "Defines how to deploy the CloudForms appliance" spec: template: metadata: labels: name: ${NAME} name: ${NAME} spec: volumes: - name: "cfme-app-volume" persistentVolumeClaim: claimName: ${NAME} containers: - image: cloudforms/cfme-openshift-app:${APPLICATION_IMG_TAG} imagePullPolicy: IfNotPresent name: cloudforms livenessProbe: httpGet: path: / port: 80 initialDelaySeconds: 480 timeoutSeconds: 3 readinessProbe: httpGet: path: / port: 80 initialDelaySeconds: 200 timeoutSeconds: 3 ports: - containerPort: 80 protocol: TCP - containerPort: 443 protocol: TCP securityContext: privileged: true volumeMounts: - name: "cfme-app-volume" mountPath: "/persistent" env: - name: "APPLICATION_INIT_DELAY" value: "${APPLICATION_INIT_DELAY}" - name: "DATABASE_SERVICE_NAME" value: "${DATABASE_SERVICE_NAME}" - name: "DATABASE_REGION" value: "${DATABASE_REGION}" - name: "MEMCACHED_SERVICE_NAME" value: "${MEMCACHED_SERVICE_NAME}" - name: "POSTGRESQL_USER" value: "${DATABASE_USER}" - name: "POSTGRESQL_PASSWORD" value: "${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: requests: memory: "${MEMORY_APPLICATION_MIN}" lifecycle: preStop: exec: command: - /opt/rh/cfme-container-scripts/sync-pv-data replicas: 1 selector: name: ${NAME} triggers: - type: "ConfigChange" - type: "ImageChange" imageChangeParams: automatic: true containerNames: - "cloudforms" from: kind: "ImageStreamTag" name: "cfme-openshift-app:${APPLICATION_IMG_TAG}" strategy: type: "Recreate" recreateParams: timeoutSeconds: 1200 - apiVersion: v1 kind: "Service" metadata: name: "${MEMCACHED_SERVICE_NAME}" annotations: description: "Exposes the memcached server" spec: ports: - name: "memcached" port: 11211 targetPort: 11211 selector: name: "${MEMCACHED_SERVICE_NAME}" - apiVersion: v1 kind: ImageStream metadata: name: cfme-openshift-memcached annotations: description: "Keeps track of changes in the CloudForms memcached image" spec: dockerImageRepository: registry.access.redhat.com/cloudforms/cfme-openshift-memcached - apiVersion: v1 kind: "DeploymentConfig" metadata: name: "${MEMCACHED_SERVICE_NAME}" annotations: description: "Defines how to deploy memcached" spec: strategy: type: "Recreate" triggers: - type: "ImageChange" imageChangeParams: automatic: true containerNames: - "memcached" from: kind: "ImageStreamTag" name: "cfme-openshift-memcached:${MEMCACHED_IMG_TAG}" - type: "ConfigChange" replicas: 1 selector: name: "${MEMCACHED_SERVICE_NAME}" template: metadata: name: "${MEMCACHED_SERVICE_NAME}" labels: name: "${MEMCACHED_SERVICE_NAME}" spec: volumes: [] containers: - name: "memcached" image: "cloudforms/cfme-openshift-memcached:${MEMCACHED_IMG_TAG}" ports: - containerPort: 11211 readinessProbe: timeoutSeconds: 1 initialDelaySeconds: 5 tcpSocket: port: 11211 livenessProbe: timeoutSeconds: 1 initialDelaySeconds: 30 tcpSocket: port: 11211 volumeMounts: [] env: - name: "MEMCACHED_MAX_MEMORY" value: "${MEMCACHED_MAX_MEMORY}" - name: "MEMCACHED_MAX_CONNECTIONS" value: "${MEMCACHED_MAX_CONNECTIONS}" - name: "MEMCACHED_SLAB_PAGE_SIZE" value: "${MEMCACHED_SLAB_PAGE_SIZE}" resources: limits: memory: "${MEMORY_MEMCACHED_LIMIT}" - apiVersion: v1 kind: "Service" metadata: name: "${DATABASE_SERVICE_NAME}" annotations: description: "Exposes the database server" spec: ports: - name: "postgresql" port: 5432 targetPort: 5432 selector: name: "${DATABASE_SERVICE_NAME}" - apiVersion: v1 kind: ImageStream metadata: name: cfme-openshift-postgresql annotations: description: "Keeps track of changes in the CloudForms postgresql image" spec: dockerImageRepository: registry.access.redhat.com/cloudforms/cfme-openshift-postgresql - apiVersion: v1 kind: "DeploymentConfig" metadata: name: "${DATABASE_SERVICE_NAME}" annotations: description: "Defines how to deploy the database" spec: strategy: type: "Recreate" triggers: - type: "ImageChange" imageChangeParams: automatic: true containerNames: - "postgresql" from: kind: "ImageStreamTag" name: "cfme-openshift-postgresql:${POSTGRESQL_IMG_TAG}" - type: "ConfigChange" replicas: 1 selector: name: "${DATABASE_SERVICE_NAME}" template: metadata: name: "${DATABASE_SERVICE_NAME}" labels: name: "${DATABASE_SERVICE_NAME}" spec: volumes: - name: "cfme-pgdb-volume" persistentVolumeClaim: claimName: ${DATABASE_SERVICE_NAME} containers: - name: "postgresql" image: "cloudforms/cfme-openshift-postgresql:${POSTGRESQL_IMG_TAG}" ports: - containerPort: 5432 readinessProbe: timeoutSeconds: 1 initialDelaySeconds: 15 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: 60 tcpSocket: port: 5432 volumeMounts: - name: "cfme-pgdb-volume" mountPath: "/var/lib/pgsql/data" env: - name: "POSTGRESQL_USER" value: "${DATABASE_USER}" - name: "POSTGRESQL_PASSWORD" value: "${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 required: true description: "The name assigned to all of the frontend objects defined in this template." value: cloudforms - name: "DATABASE_SERVICE_NAME" displayName: "PostgreSQL Service Name" required: true description: "The name of the OpenShift Service exposed for the PostgreSQL container." value: "postgresql" - name: "DATABASE_USER" displayName: "PostgreSQL User" required: true description: "PostgreSQL user that will access the database." value: "root" - name: "DATABASE_PASSWORD" displayName: "PostgreSQL Password" required: true description: "Password for the PostgreSQL user." value: "smartvm" - name: "DATABASE_NAME" required: true displayName: "PostgreSQL Database Name" description: "Name of the PostgreSQL database accessed." value: "vmdb_production" - name: "DATABASE_REGION" required: true displayName: "Application Database Region" description: "Database region that will be used for application." value: "0" - name: "MEMCACHED_SERVICE_NAME" required: true displayName: "Memcached Service Name" description: "The name of the OpenShift Service exposed for the Memcached container." value: "memcached" - name: "MEMCACHED_MAX_MEMORY" displayName: "Memcached Max Memory" description: "Memcached maximum memory for memcached object storage in MB." value: "64" - name: "MEMCACHED_MAX_CONNECTIONS" displayName: "Memcached Max Connections" description: "Memcached maximum number of connections allowed." value: "1024" - name: "MEMCACHED_SLAB_PAGE_SIZE" displayName: "Memcached Slab Page Size" description: "Memcached size of each slab page." value: "1m" - name: "POSTGRESQL_MAX_CONNECTIONS" displayName: "PostgreSQL Max Connections" description: "PostgreSQL maximum number of database connections allowed." value: "100" - name: "POSTGRESQL_SHARED_BUFFERS" displayName: "PostgreSQL Shared Buffer Amount" description: "Amount of memory dedicated for PostgreSQL shared memory buffers." value: "64MB" - name: "MEMORY_APPLICATION_MIN" displayName: "Application Memory Minimum" required: true description: "Minimum amount of memory the Application container will need." value: "4096Mi" - name: "MEMORY_POSTGRESQL_LIMIT" displayName: "PostgreSQL Memory Limit" required: true description: "Maximum amount of memory the PostgreSQL container can use." value: "2048Mi" - name: "MEMORY_MEMCACHED_LIMIT" displayName: "Memcached Memory Limit" required: true description: "Maximum amount of memory the Memcached container can use." value: "256Mi" - name: "POSTGRESQL_IMG_TAG" displayName: "PostgreSQL Image Tag" description: "This is the PostgreSQL image tag/version requested to deploy." value: "latest" - name: "MEMCACHED_IMG_TAG" displayName: "Memcached Image Tag" description: "This is the Memcached image tag/version requested to deploy." value: "latest" - name: "APPLICATION_IMG_TAG" displayName: "Application Image Tag" description: "This is the Application image tag/version requested to deploy." value: "latest" - name: "APPLICATION_DOMAIN" displayName: "Application Hostname" description: "The exposed hostname that will route to the application service, if left blank a value will be defaulted." value: "" - name: "APPLICATION_INIT_DELAY" displayName: "Application Init Delay" required: true description: "Delay in seconds before we attempt to initialize the application." value: "30" - name: "APPLICATION_VOLUME_CAPACITY" displayName: "Application Volume Capacity" required: true description: "Volume space available for application data." value: "1Gi" - name: "DATABASE_VOLUME_CAPACITY" displayName: "Database Volume Capacity" required: true description: "Volume space available for database." value: "1Gi"