{ "kind": "Template", "apiVersion": "v1", "metadata": { "annotations": { "iconClass": "icon-jboss", "description": "Application template for JBoss Data Virtualization 6.3 services built using S2I. Includes support for installing extensions (e.g. third-party DB drivers) and the ability to configure certificates for serving secure content.", "tags": "jdv,datavirt,oracle,postgresql,jboss,xpaas", "version": "1.4.0" }, "name": "datavirt63-ext-oracle-psql-s2i" }, "labels": { "template": "datavirt63-ext-oracle-psql-s2i", "xpaas": "1.4.0" }, "message": "A new data service has been created in your project. The username/password for accessing the JDV service is ${TEIID_USERNAME}/${TEIID_PASSWORD}. Please be sure to create the \"${SERVICE_ACCOUNT_NAME}\" service account and the following secrets: \"${CONFIGURATION_NAME}\" containing the datasource configuration details required by the deployed VDB(s); \"${HTTPS_SECRET}\" containing the ${HTTPS_KEYSTORE} file used for serving secure content; \"${JGROUPS_ENCRYPT_SECRET}\" containing the ${JGROUPS_ENCRYPT_KEYSTORE} file used for securing JGroups communications.", "parameters": [ { "description": "The name for the application.", "displayName": "Application Name", "name": "APPLICATION_NAME", "value": "datavirt-app", "required": true }, { "description": "The name of the secret containing configuration properties for the data sources.", "displayName": "Configuration Secret Name", "name": "CONFIGURATION_NAME", "value": "datavirt-app-config", "required": true }, { "description": "Specify a custom hostname for the http route. Leave blank to use default hostname, e.g.: -.", "displayName": "Custom http Route Hostname", "name": "HOSTNAME_HTTP", "value": "", "required": false }, { "description": "Specify a custom hostname for the https route. Leave blank to use default hostname, e.g.: secure--.", "displayName": "Custom https Route Hostname", "name": "HOSTNAME_HTTPS", "value": "", "required": false }, { "description": "Specify a custom hostname for the JDBC route. Leave blank to use default hostname, e.g.: secure--.", "displayName": "Custom JDBC Route Hostname", "name": "HOSTNAME_JDBC", "value": "", "required": false }, { "description": "The URL of the repository with your application source code.", "displayName": "Git Repository URL", "name": "SOURCE_REPOSITORY_URL", "value": "https://github.com/cvanball/jdv-ose-demos", "required": true }, { "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", "value": "master", "required": false }, { "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": "bringing-data-to-the-paas/vdb", "required": false }, { "description": "The URL of the repository with source code for the extensions image. The image should have all modules, etc., placed in the \"/extensions/\" directory in the image. If the contents are in a different directory, the sourcePath for the ImageSource in the BuildConfig must be modified.", "displayName": "Extensions Git Repository URL", "name": "EXTENSIONS_REPOSITORY_URL", "value": "https://github.com/cvanball/jdv-ose-demos", "required": true }, { "description": "Set this to a branch name, tag or other ref of your extensions repository if you are not using the default branch.", "displayName": "Extensions Git Reference", "name": "EXTENSIONS_REPOSITORY_REF", "value": "master", "required": false }, { "description": "Set this to the relative path to your project if it is not in the root of your extensions repository.", "displayName": "Extensions Context Directory", "name": "EXTENSIONS_DIR", "value": "bringing-data-to-the-paas/oracle-postgresql-driver-image", "required": false }, { "description": "Set this to the relative path to the Dockerfile in your extensions directory.", "displayName": "Extensions Dockerfile", "name": "EXTENSIONS_DOCKERFILE", "value": "Dockerfile", "required": false }, { "description": "The name of the service account to use for the deployment. The service account should be configured to allow usage of the secret(s) specified by CONFIGURATION_NAME, HTTPS_SECRET and JGROUPS_ENCRYPT_SECRET.", "name": "SERVICE_ACCOUNT_NAME", "value": "datavirt-service-account", "required": true }, { "description": "The name of the secret containing the keystore to be used for serving secure content.", "displayName": "Server Keystore Secret Name", "name": "HTTPS_SECRET", "value": "datavirt-app-secret", "required": true }, { "description": "The name of the keystore file within the secret.", "displayName": "Server Keystore Filename", "name": "HTTPS_KEYSTORE", "value": "keystore.jks", "required": false }, { "description": "The type of the keystore file (JKS or JCEKS).", "displayName": "Server Keystore Type", "name": "HTTPS_KEYSTORE_TYPE", "value": "", "required": false }, { "description": "The name associated with the server certificate.", "displayName": "Server Certificate Name", "name": "HTTPS_NAME", "value": "jboss", "required": false }, { "description": "The password for the keystore and certificate", "displayName": "Server Keystore Password", "name": "HTTPS_PASSWORD", "value": "mykeystorepass", "required": false }, { "description": "Username associated with Teiid data service.", "displayName": "Teiid Username", "name": "TEIID_USERNAME", "value": "teiidUser", "required": true }, { "description": "Password for Teiid user.", "displayName": "Teiid User Password", "name": "TEIID_PASSWORD", "value": "redhat1!", "required": true }, { "description": "Username associated with ModeShape.", "displayName": "ModeShape Username", "name": "MODESHAPE_USERNAME", "from": "[\\a]{8}", "generate": "expression", "required": true }, { "description": "Password for ModeShape user.", "displayName": "ModeShape User Password", "name": "MODESHAPE_PASSWORD", "from": "[\\a\\A]{8}[\\d]{1}[\\A]{1}", "generate": "expression", "required": true }, { "description": "A secret string used to configure the GitHub webhook.", "displayName": "Github Webhook Secret", "name": "GITHUB_WEBHOOK_SECRET", "from": "[a-zA-Z0-9]{8}", "generate": "expression", "required": true }, { "description": "A secret string used to configure the Generic webhook.", "displayName": "Generic Webhook Secret", "name": "GENERIC_WEBHOOK_SECRET", "from": "[a-zA-Z0-9]{8}", "generate": "expression", "required": true }, { "description": "Namespace in which the ImageStreams for Red Hat Middleware images are installed. These ImageStreams are normally installed in the openshift namespace. You should only need to modify this if you've installed the ImageStreams in a different namespace/project.", "displayName": "ImageStream Namespace", "name": "IMAGE_STREAM_NAMESPACE", "value": "openshift", "required": true }, { "description": "The name of the secret containing the keystore to be used for securing JGroups communications.", "displayName": "JGroups Secret Name", "name": "JGROUPS_ENCRYPT_SECRET", "value": "datavirt-app-secret", "required": false }, { "description": "The name of the keystore file within the JGroups secret.", "displayName": "JGroups Keystore Filename", "name": "JGROUPS_ENCRYPT_KEYSTORE", "value": "jgroups.jceks", "required": false }, { "description": "The name associated with the JGroups server certificate", "displayName": "JGroups Certificate Name", "name": "JGROUPS_ENCRYPT_NAME", "value": "secret-key", "required": false }, { "description": "The password for the keystore and certificate", "displayName": "JGroups Keystore Password", "name": "JGROUPS_ENCRYPT_PASSWORD", "value": "password", "required": false }, { "description": "Password used by JGroups to authenticate nodes in the cluster.", "displayName": "JGroups Cluster Password", "name": "JGROUPS_CLUSTER_PASSWORD", "from": "[a-zA-Z0-9]{8}", "generate": "expression", "required": true }, { "description": "Controls whether exploded deployment content should be automatically deployed", "displayName": "Deploy Exploded Archives", "name": "AUTO_DEPLOY_EXPLODED", "value": "false", "required": false }, { "description": "Oracle Database user name", "name": "ORACLE_USERNAME", "value": "jdv", "required": true }, { "description": "Oracle Database user password", "name": "ORACLE_PASSWORD", "value": "redhat1!", "required": true }, { "description": "Database JNDI name used by application to resolve the datasource, e.g. java:/jboss/datasources/oracle", "name": "ORACLE_JNDI", "value": "java:jboss/datasources/EUCustomersDS", "required": false }, { "description": "Database name", "name": "ORACLE_DATABASE", "value": "XE", "required": true }, { "description": "Sets xa-pool/min-pool-size for the configured datasource.", "name": "ORACLE_MIN_POOL_SIZE", "required": false }, { "description": "Sets xa-pool/max-pool-size for the configured datasource.", "name": "ORACLE_MAX_POOL_SIZE", "required": false }, { "description": "Sets transaction-isolation for the configured datasource.", "name": "ORACLE_TX_ISOLATION", "required": false }, { "description": "Sets how the table names are stored and compared.", "name": "ORACLE_LOWER_CASE_TABLE_NAMES", "required": false }, { "description": "The maximum permitted number of simultaneous client connections.", "name": "ORACLE_MAX_CONNECTIONS", "required": false }, { "description": "The minimum length of the word to be included in a FULLTEXT index.", "name": "ORACLE_FT_MIN_WORD_LEN", "required": false }, { "description": "The maximum length of the word to be included in a FULLTEXT index.", "name": "ORACLE_FT_MAX_WORD_LEN", "required": false }, { "description": "Controls the innodb_use_native_aio setting value if the native AIO is broken.", "name": "ORACLE_AIO", "required": false }, { "description": "PostgresSQL Database user name", "name": "POSTGRESQL_USERNAME", "value": "jdv", "required": true }, { "description": "PostgreSQL Database user password", "name": "POSTGRESQL_PASSWORD", "value": "redhat1!", "required": true }, { "description": "Database JNDI name used by application to resolve the datasource, e.g. java:/jboss/datasources/postgresql", "name": "POSTGRESQL_JNDI", "value": "java:jboss/datasources/USCustomersDS", "required": false }, { "description": "Database name", "name": "POSTGRESQL_DATABASE", "value": "uscustomers", "required": true }, { "description": "Sets xa-pool/min-pool-size for the configured datasource.", "name": "POSTGRESQL_MIN_POOL_SIZE", "required": false }, { "description": "Sets xa-pool/max-pool-size for the configured datasource.", "name": "POSTGRESQL_MAX_POOL_SIZE", "required": false }, { "description": "Sets transaction-isolation for the configured datasource.", "name": "POSTGRESQL_TX_ISOLATION", "required": false }, { "description": "The maximum number of client connections allowed. This also sets the maximum number of prepared transactions.", "name": "POSTGRESQL_MAX_CONNECTIONS", "required": false }, { "description": "Configures how much memory is dedicated to PostgreSQL for caching data.", "name": "POSTGRESQL_SHARED_BUFFERS", "required": false } ], "objects": [ { "kind": "Service", "apiVersion": "v1", "spec": { "ports": [ { "name": "http", "port": 8080, "targetPort": "http" }, { "name": "https", "port": 8443, "targetPort": "https" }, { "name": "jdbc", "port": 31000, "targetPort": "jdbc" }, { "name": "jdbcs", "port": 31443, "targetPort": "jdbcs" } ], "selector": { "deploymentConfig": "${APPLICATION_NAME}" } }, "metadata": { "name": "${APPLICATION_NAME}", "labels": { "application": "${APPLICATION_NAME}" }, "annotations": { "description": "The data virtualization services." } } }, { "kind": "Service", "apiVersion": "v1", "spec": { "ports": [ { "port": 5432, "targetPort": 5432 } ], "selector": { "deploymentConfig": "${APPLICATION_NAME}-postgresql" } }, "metadata": { "name": "${APPLICATION_NAME}-postgresql", "labels": { "application": "${APPLICATION_NAME}-postgresql" }, "annotations": { "description": "The database server's port." } } }, { "kind": "Route", "apiVersion": "v1", "id": "${APPLICATION_NAME}-http", "metadata": { "name": "${APPLICATION_NAME}", "labels": { "application": "${APPLICATION_NAME}" }, "annotations": { "description": "Route for application's http (REST) service." } }, "spec": { "host": "${HOSTNAME_HTTP}", "port": { "targetPort": "http" }, "to": { "name": "${APPLICATION_NAME}" } } }, { "kind": "Route", "apiVersion": "v1", "id": "${APPLICATION_NAME}-https", "metadata": { "name": "secure-${APPLICATION_NAME}", "labels": { "application": "${APPLICATION_NAME}" }, "annotations": { "description": "Route for application's https (REST) service." } }, "spec": { "host": "${HOSTNAME_HTTPS}", "port": { "targetPort": "https" }, "to": { "name": "${APPLICATION_NAME}" }, "tls": { "termination": "passthrough" } } }, { "kind": "Route", "apiVersion": "v1", "id": "${APPLICATION_NAME}-jdbc", "metadata": { "name": "jdbc-${APPLICATION_NAME}", "labels": { "application": "${APPLICATION_NAME}" }, "annotations": { "description": "Route for application's JDBC service." } }, "spec": { "host": "${HOSTNAME_JDBC}", "port": { "targetPort": "jdbcs" }, "to": { "name": "${APPLICATION_NAME}" }, "tls": { "termination": "passthrough" } } }, { "kind": "ImageStream", "apiVersion": "v1", "metadata": { "name": "${APPLICATION_NAME}", "labels": { "application": "${APPLICATION_NAME}" } } }, { "kind": "ImageStream", "apiVersion": "v1", "metadata": { "name": "${APPLICATION_NAME}-ext", "labels": { "application": "${APPLICATION_NAME}" } } }, { "kind": "BuildConfig", "apiVersion": "v1", "metadata": { "name": "${APPLICATION_NAME}-ext", "labels": { "application": "${APPLICATION_NAME}" } }, "spec": { "source": { "type": "Git", "git": { "uri": "${EXTENSIONS_REPOSITORY_URL}", "ref": "${EXTENSIONS_REPOSITORY_REF}" }, "contextDir": "${EXTENSIONS_DIR}" }, "strategy": { "type": "Docker", "dockerStrategy": { "dockerfilePath": "${EXTENSIONS_DOCKERFILE}" } }, "output": { "to": { "kind": "ImageStreamTag", "name": "${APPLICATION_NAME}-ext:latest" } }, "triggers": [ { "type": "GitHub", "github": { "secret": "${GITHUB_WEBHOOK_SECRET}" } }, { "type": "Generic", "generic": { "secret": "${GENERIC_WEBHOOK_SECRET}" } }, { "type": "ConfigChange" } ] } }, { "kind": "BuildConfig", "apiVersion": "v1", "metadata": { "name": "${APPLICATION_NAME}", "labels": { "application": "${APPLICATION_NAME}" } }, "spec": { "source": { "type": "Git", "git": { "uri": "${SOURCE_REPOSITORY_URL}", "ref": "${SOURCE_REPOSITORY_REF}" }, "contextDir": "${CONTEXT_DIR}", "images": [ { "from": { "kind": "ImageStreamTag", "name": "${APPLICATION_NAME}-ext:latest" }, "paths": [ { "destinationDir": "./${CONTEXT_DIR}/extensions/extras", "sourcePath": "/extensions/." } ] } ] }, "strategy": { "type": "Source", "sourceStrategy": { "forcePull": true, "from": { "kind": "ImageStreamTag", "namespace": "${IMAGE_STREAM_NAMESPACE}", "name": "jboss-datavirt63-openshift:1.0" }, "env": [ { "name": "CUSTOM_INSTALL_DIRECTORIES", "value": "extensions/*" } ] } }, "output": { "to": { "kind": "ImageStreamTag", "name": "${APPLICATION_NAME}:latest" } }, "triggers": [ { "type": "GitHub", "github": { "secret": "${GITHUB_WEBHOOK_SECRET}" } }, { "type": "Generic", "generic": { "secret": "${GENERIC_WEBHOOK_SECRET}" } }, { "type": "ImageChange", "imageChange": {} }, { "type": "ImageChange", "imageChange": { "from": { "kind": "ImageStreamTag", "name": "${APPLICATION_NAME}-ext:latest" } } }, { "type": "ConfigChange" } ] } }, { "kind": "DeploymentConfig", "apiVersion": "v1", "metadata": { "name": "${APPLICATION_NAME}", "labels": { "application": "${APPLICATION_NAME}" } }, "spec": { "strategy": { "type": "Recreate", "recreateParams": { "post": { "failurePolicy": "Abort", "execNewPod": { "containerName": "${APPLICATION_NAME}", "command": [ "bash","-c","$HOME/source/extensions/extras/populatedbms.sh" ] } } } }, "triggers": [ { "type": "ImageChange", "imageChangeParams": { "automatic": true, "containerNames": [ "${APPLICATION_NAME}" ], "from": { "kind": "ImageStreamTag", "name": "${APPLICATION_NAME}:latest" } } }, { "type": "ConfigChange" } ], "replicas": 1, "selector": { "deploymentConfig": "${APPLICATION_NAME}" }, "template": { "metadata": { "name": "${APPLICATION_NAME}", "labels": { "deploymentConfig": "${APPLICATION_NAME}", "application": "${APPLICATION_NAME}" } }, "spec": { "serviceAccountName": "${SERVICE_ACCOUNT_NAME}", "terminationGracePeriodSeconds": 60, "containers": [ { "name": "${APPLICATION_NAME}", "image": "${APPLICATION_NAME}", "imagePullPolicy": "Always", "volumeMounts": [ { "name": "configuration", "mountPath": "/etc/datavirt-environment", "readOnly": true }, { "name": "datavirt-keystore-volume", "mountPath": "/etc/datavirt-secret-volume", "readOnly": true }, { "name": "datavirt-jgroups-keystore-volume", "mountPath": "/etc/jgroups-encrypt-secret-volume", "readOnly": true } ], "livenessProbe": { "exec": { "command": [ "/bin/bash", "-c", "/opt/eap/bin/livenessProbe.sh" ] } }, "readinessProbe": { "exec": { "command": [ "/bin/bash", "-c", "/opt/eap/bin/readinessProbe.sh" ] } }, "ports": [ { "name": "jolokia", "containerPort": 8778, "protocol": "TCP" }, { "name": "http", "containerPort": 8080, "protocol": "TCP" }, { "name": "https", "containerPort": 8443, "protocol": "TCP" }, { "name": "jdbc", "containerPort": 31000, "protocol": "TCP" }, { "name": "jdbcs", "containerPort": 31443, "protocol": "TCP" }, { "name": "ping", "containerPort": 8888, "protocol": "TCP" } ], "env": [ { "name": "OPENSHIFT_KUBE_PING_LABELS", "value": "application=${APPLICATION_NAME}" }, { "name": "OPENSHIFT_KUBE_PING_NAMESPACE", "valueFrom": { "fieldRef": { "fieldPath": "metadata.namespace" } } }, { "name": "HTTPS_KEYSTORE_DIR", "value": "/etc/datavirt-secret-volume" }, { "name": "HTTPS_KEYSTORE", "value": "${HTTPS_KEYSTORE}" }, { "name": "HTTPS_KEYSTORE_TYPE", "value": "${HTTPS_KEYSTORE_TYPE}" }, { "name": "HTTPS_NAME", "value": "${HTTPS_NAME}" }, { "name": "HTTPS_PASSWORD", "value": "${HTTPS_PASSWORD}" }, { "name": "JGROUPS_ENCRYPT_SECRET", "value": "${JGROUPS_ENCRYPT_SECRET}" }, { "name": "JGROUPS_ENCRYPT_KEYSTORE_DIR", "value": "/etc/jgroups-encrypt-secret-volume" }, { "name": "JGROUPS_ENCRYPT_KEYSTORE", "value": "${JGROUPS_ENCRYPT_KEYSTORE}" }, { "name": "JGROUPS_ENCRYPT_NAME", "value": "${JGROUPS_ENCRYPT_NAME}" }, { "name": "JGROUPS_ENCRYPT_PASSWORD", "value": "${JGROUPS_ENCRYPT_PASSWORD}" }, { "name": "JGROUPS_CLUSTER_PASSWORD", "value": "${JGROUPS_CLUSTER_PASSWORD}" }, { "name": "AUTO_DEPLOY_EXPLODED", "value": "${AUTO_DEPLOY_EXPLODED}" }, { "name": "TEIID_USERNAME", "value": "${TEIID_USERNAME}" }, { "name": "TEIID_PASSWORD", "value": "${TEIID_PASSWORD}" }, { "name": "MODESHAPE_USERNAME", "value": "${MODESHAPE_USERNAME}" }, { "name": "MODESHAPE_PASSWORD", "value": "${MODESHAPE_PASSWORD}" }, { "name": "ENV_FILES", "value": "/etc/datavirt-environment/*" }, { "name": "DATAVIRT_TRANSPORT_KEYSTORE", "value": "/etc/datavirt-secret-volume/${HTTPS_KEYSTORE}" }, { "name": "DATAVIRT_TRANSPORT_KEYSTORE_TYPE", "value": "${HTTPS_KEYSTORE_TYPE}" }, { "name": "DATAVIRT_TRANSPORT_KEY_ALIAS", "value": "${HTTPS_NAME}" }, { "name": "DATAVIRT_TRANSPORT_KEYSTORE_PASSWORD", "value": "${HTTPS_PASSWORD}" }, { "name": "ORACLE_USERNAME", "value": "${ORACLE_USERNAME}" } , { "name": "ORACLE_PASSWORD", "value": "${ORACLE_PASSWORD}" } , { "name": "ORACLE_DATABASE", "value": "${ORACLE_DATABASE}" } , { "name": "EUCUSTOMERS_SERVICE_HOST", "value": "192.168.99.100" }, { "name": "EUCUSTOMERS_SERVICE_PORT", "value": "XE" }, { "name": "POSTGRESQL_USERNAME", "value": "${POSTGRESQL_USERNAME}" } , { "name": "POSTGRESQL_PASSWORD", "value": "${POSTGRESQL_PASSWORD}" } , { "name": "POSTGRESQL_DATABASE", "value": "${POSTGRESQL_DATABASE}" }, { "name": "USCUSTOMERS_SERVICE_HOST", "value": "${APPLICATION_NAME}-postgresql" }, { "name": "USCUSTOMERS_SERVICE_PORT", "value": "5432" } ] } ], "volumes": [ { "name": "configuration", "secret": { "secretName": "${CONFIGURATION_NAME}" } }, { "name": "datavirt-keystore-volume", "secret": { "secretName": "${HTTPS_SECRET}" } }, { "name": "datavirt-jgroups-keystore-volume", "secret": { "secretName": "${JGROUPS_ENCRYPT_SECRET}" } } ] } } } }, { "kind": "DeploymentConfig", "apiVersion": "v1", "metadata": { "name": "${APPLICATION_NAME}-postgresql", "labels": { "application": "${APPLICATION_NAME}" } }, "spec": { "strategy": { "type": "Recreate" }, "triggers": [ { "type": "ImageChange", "imageChangeParams": { "automatic": true, "containerNames": [ "${APPLICATION_NAME}-postgresql" ], "from": { "kind": "ImageStreamTag", "namespace": "${IMAGE_STREAM_NAMESPACE}", "name": "postgresql:latest" } } }, { "type": "ConfigChange" } ], "replicas": 1, "selector": { "deploymentConfig": "${APPLICATION_NAME}-postgresql" }, "template": { "metadata": { "name": "${APPLICATION_NAME}-postgresql", "labels": { "deploymentConfig": "${APPLICATION_NAME}-postgresql", "application": "${APPLICATION_NAME}" } }, "spec": { "terminationGracePeriodSeconds": 60, "containers": [ { "name": "${APPLICATION_NAME}-postgresql", "image": "postgresql", "imagePullPolicy": "Always", "ports": [ { "containerPort": 5432, "protocol": "TCP" } ], "env": [ { "name": "POSTGRESQL_USER", "value": "${POSTGRESQL_USERNAME}" }, { "name": "POSTGRESQL_PASSWORD", "value": "${POSTGRESQL_PASSWORD}" }, { "name": "POSTGRESQL_DATABASE", "value": "${POSTGRESQL_DATABASE}" }, { "name": "POSTGRESQL_MAX_CONNECTIONS", "value": "${POSTGRESQL_MAX_CONNECTIONS}" }, { "name": "POSTGRESQL_MAX_PREPARED_TRANSACTIONS", "value": "${POSTGRESQL_MAX_CONNECTIONS}" }, { "name": "POSTGRESQL_SHARED_BUFFERS", "value": "${POSTGRESQL_SHARED_BUFFERS}" } ] } ] } } } } ] }