|
@@ -0,0 +1,479 @@
|
|
|
+apiVersion: v1
|
|
|
+kind: Template
|
|
|
+labels:
|
|
|
+ template: cloudforms-beta
|
|
|
+metadata:
|
|
|
+ name: cloudforms-beta
|
|
|
+ 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_beta/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: false
|
|
|
+ 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_beta/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: false
|
|
|
+ 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_beta/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: false
|
|
|
+ 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"
|