{
    "apiVersion": "v1",
    "kind": "Template",
    "labels": {
        "jws50": "1.2",
        "template": "jws50-tomcat9-mongodb-persistent-s2i"
    },
    "message": "A new persistent JWS application for Apache Tomcat 9 (using MongoDB) has been created in your project. The username/password for administering your JWS is ${JWS_ADMIN_USERNAME}/${JWS_ADMIN_PASSWORD}. For accessing the MongoDB database \"${DB_DATABASE}\" use the credentials ${DB_USERNAME}/${DB_PASSWORD} (Admin password is \"${DB_ADMIN_PASSWORD}\"). Please be sure to create the secret named \"${JWS_HTTPS_SECRET}\" containing the ${JWS_HTTPS_CERTIFICATE} file used for serving secure content.",
    "metadata": {
        "annotations": {
            "description": "An example JBoss Web Server application with a MongoDB database. For more information about using this template, see https://github.com/jboss-openshift/application-templates.",
            "iconClass": "icon-rh-tomcat",
            "openshift.io/display-name": "JBoss Web Server 5.0 Apache Tomcat 9 + MongoDB (with https)",
            "openshift.io/provider-display-name": "Red Hat, Inc.",
            "tags": "tomcat,tomcat9,java,jboss",
            "template.openshift.io/documentation-url": "https://access.redhat.com/documentation/en/red-hat-jboss-web-server/",
            "template.openshift.io/long-description": "This template defines resources needed to develop Red Hat JBoss Web Server 5.0 Apache Tomcat 9 based application, including a build configuration, application deployment configuration, database deployment configuration for MongoDB using persistence and secure communication using https.",
            "template.openshift.io/support-url": "https://access.redhat.com",
            "version": "1.2"
        },
        "name": "jws50-tomcat9-mongodb-persistent-s2i"
    },
    "objects": [
        {
            "apiVersion": "v1",
            "kind": "Service",
            "metadata": {
                "annotations": {
                    "description": "The web server's http port.",
                    "service.alpha.openshift.io/dependencies": "[{\"name\": \"${APPLICATION_NAME}-mongodb\", \"kind\": \"Service\"}]"
                },
                "labels": {
                    "application": "${APPLICATION_NAME}"
                },
                "name": "${APPLICATION_NAME}"
            },
            "spec": {
                "ports": [
                    {
                        "port": 8080,
                        "targetPort": 8080
                    }
                ],
                "selector": {
                    "deploymentConfig": "${APPLICATION_NAME}"
                }
            }
        },
        {
            "apiVersion": "v1",
            "kind": "Service",
            "metadata": {
                "annotations": {
                    "description": "The web server's https port.",
                    "service.alpha.openshift.io/dependencies": "[{\"name\": \"${APPLICATION_NAME}-mongodb\", \"kind\": \"Service\"}]"
                },
                "labels": {
                    "application": "${APPLICATION_NAME}"
                },
                "name": "secure-${APPLICATION_NAME}"
            },
            "spec": {
                "ports": [
                    {
                        "port": 8443,
                        "targetPort": 8443
                    }
                ],
                "selector": {
                    "deploymentConfig": "${APPLICATION_NAME}"
                }
            }
        },
        {
            "apiVersion": "v1",
            "kind": "Service",
            "metadata": {
                "annotations": {
                    "description": "The database server's port."
                },
                "labels": {
                    "application": "${APPLICATION_NAME}"
                },
                "name": "${APPLICATION_NAME}-mongodb"
            },
            "spec": {
                "ports": [
                    {
                        "port": 27017,
                        "targetPort": 27017
                    }
                ],
                "selector": {
                    "deploymentConfig": "${APPLICATION_NAME}-mongodb"
                }
            }
        },
        {
            "apiVersion": "v1",
            "id": "${APPLICATION_NAME}-http",
            "kind": "Route",
            "metadata": {
                "annotations": {
                    "description": "Route for application's http service."
                },
                "labels": {
                    "application": "${APPLICATION_NAME}"
                },
                "name": "${APPLICATION_NAME}"
            },
            "spec": {
                "host": "${HOSTNAME_HTTP}",
                "to": {
                    "name": "${APPLICATION_NAME}"
                }
            }
        },
        {
            "apiVersion": "v1",
            "id": "${APPLICATION_NAME}-https",
            "kind": "Route",
            "metadata": {
                "annotations": {
                    "description": "Route for application's https service."
                },
                "labels": {
                    "application": "${APPLICATION_NAME}"
                },
                "name": "secure-${APPLICATION_NAME}"
            },
            "spec": {
                "host": "${HOSTNAME_HTTPS}",
                "tls": {
                    "termination": "passthrough"
                },
                "to": {
                    "name": "secure-${APPLICATION_NAME}"
                }
            }
        },
        {
            "apiVersion": "v1",
            "kind": "ImageStream",
            "metadata": {
                "labels": {
                    "application": "${APPLICATION_NAME}"
                },
                "name": "${APPLICATION_NAME}"
            }
        },
        {
            "apiVersion": "v1",
            "kind": "BuildConfig",
            "metadata": {
                "labels": {
                    "application": "${APPLICATION_NAME}"
                },
                "name": "${APPLICATION_NAME}"
            },
            "spec": {
                "output": {
                    "to": {
                        "kind": "ImageStreamTag",
                        "name": "${APPLICATION_NAME}:latest"
                    }
                },
                "source": {
                    "contextDir": "${CONTEXT_DIR}",
                    "git": {
                        "ref": "${SOURCE_REPOSITORY_REF}",
                        "uri": "${SOURCE_REPOSITORY_URL}"
                    },
                    "type": "Git"
                },
                "strategy": {
                    "sourceStrategy": {
                        "env": [
                            {
                                "name": "MAVEN_MIRROR_URL",
                                "value": "${MAVEN_MIRROR_URL}"
                            },
                            {
                                "name": "ARTIFACT_DIR",
                                "value": "${ARTIFACT_DIR}"
                            }
                        ],
                        "forcePull": true,
                        "from": {
                            "kind": "ImageStreamTag",
                            "name": "jboss-webserver50-tomcat9-openshift:1.2",
                            "namespace": "${IMAGE_STREAM_NAMESPACE}"
                        }
                    },
                    "type": "Source"
                },
                "triggers": [
                    {
                        "github": {
                            "secret": "${GITHUB_WEBHOOK_SECRET}"
                        },
                        "type": "GitHub"
                    },
                    {
                        "generic": {
                            "secret": "${GENERIC_WEBHOOK_SECRET}"
                        },
                        "type": "Generic"
                    },
                    {
                        "imageChange": {},
                        "type": "ImageChange"
                    },
                    {
                        "type": "ConfigChange"
                    }
                ]
            }
        },
        {
            "apiVersion": "v1",
            "kind": "DeploymentConfig",
            "metadata": {
                "labels": {
                    "application": "${APPLICATION_NAME}"
                },
                "name": "${APPLICATION_NAME}"
            },
            "spec": {
                "replicas": 1,
                "selector": {
                    "deploymentConfig": "${APPLICATION_NAME}"
                },
                "strategy": {
                    "type": "Recreate"
                },
                "template": {
                    "metadata": {
                        "labels": {
                            "application": "${APPLICATION_NAME}",
                            "deploymentConfig": "${APPLICATION_NAME}"
                        },
                        "name": "${APPLICATION_NAME}"
                    },
                    "spec": {
                        "containers": [
                            {
                                "env": [
                                    {
                                        "name": "DB_SERVICE_PREFIX_MAPPING",
                                        "value": "${APPLICATION_NAME}-mongodb=DB"
                                    },
                                    {
                                        "name": "DB_JNDI",
                                        "value": "${DB_JNDI}"
                                    },
                                    {
                                        "name": "DB_USERNAME",
                                        "value": "${DB_USERNAME}"
                                    },
                                    {
                                        "name": "DB_PASSWORD",
                                        "value": "${DB_PASSWORD}"
                                    },
                                    {
                                        "name": "DB_DATABASE",
                                        "value": "${DB_DATABASE}"
                                    },
                                    {
                                        "name": "DB_ADMIN_PASSWORD",
                                        "value": "${DB_ADMIN_PASSWORD}"
                                    },
                                    {
                                        "name": "DB_MIN_POOL_SIZE",
                                        "value": "${DB_MIN_POOL_SIZE}"
                                    },
                                    {
                                        "name": "DB_MAX_POOL_SIZE",
                                        "value": "${DB_MAX_POOL_SIZE}"
                                    },
                                    {
                                        "name": "DB_TX_ISOLATION",
                                        "value": "${DB_TX_ISOLATION}"
                                    },
                                    {
                                        "name": "JWS_HTTPS_CERTIFICATE_DIR",
                                        "value": "/etc/jws-secret-volume"
                                    },
                                    {
                                        "name": "JWS_HTTPS_CERTIFICATE",
                                        "value": "${JWS_HTTPS_CERTIFICATE}"
                                    },
                                    {
                                        "name": "JWS_HTTPS_CERTIFICATE_KEY",
                                        "value": "${JWS_HTTPS_CERTIFICATE_KEY}"
                                    },
                                    {
                                        "name": "JWS_HTTPS_CERTIFICATE_PASSWORD",
                                        "value": "${JWS_HTTPS_CERTIFICATE_PASSWORD}"
                                    },
                                    {
                                        "name": "JWS_ADMIN_USERNAME",
                                        "value": "${JWS_ADMIN_USERNAME}"
                                    },
                                    {
                                        "name": "JWS_ADMIN_PASSWORD",
                                        "value": "${JWS_ADMIN_PASSWORD}"
                                    }
                                ],
                                "image": "${APPLICATION_NAME}",
                                "imagePullPolicy": "Always",
                                "name": "${APPLICATION_NAME}",
                                "ports": [
                                    {
                                        "containerPort": 8778,
                                        "name": "jolokia",
                                        "protocol": "TCP"
                                    },
                                    {
                                        "containerPort": 8080,
                                        "name": "http",
                                        "protocol": "TCP"
                                    },
                                    {
                                        "containerPort": 8443,
                                        "name": "https",
                                        "protocol": "TCP"
                                    }
                                ],
                                "readinessProbe": {
                                    "exec": {
                                        "command": [
                                            "/bin/bash",
                                            "-c",
                                            "curl --noproxy '*' -s -u ${JWS_ADMIN_USERNAME}:${JWS_ADMIN_PASSWORD} 'http://localhost:8080/manager/jmxproxy/?get=Catalina%3Atype%3DServer&att=stateName' |grep -iq 'stateName *= *STARTED'"
                                        ]
                                    }
                                },
                                "volumeMounts": [
                                    {
                                        "mountPath": "/etc/jws-secret-volume",
                                        "name": "jws-certificate-volume",
                                        "readOnly": true
                                    }
                                ]
                            }
                        ],
                        "terminationGracePeriodSeconds": 60,
                        "volumes": [
                            {
                                "name": "jws-certificate-volume",
                                "secret": {
                                    "secretName": "${JWS_HTTPS_SECRET}"
                                }
                            }
                        ]
                    }
                },
                "triggers": [
                    {
                        "imageChangeParams": {
                            "automatic": true,
                            "containerNames": [
                                "${APPLICATION_NAME}"
                            ],
                            "from": {
                                "kind": "ImageStreamTag",
                                "name": "${APPLICATION_NAME}:latest"
                            }
                        },
                        "type": "ImageChange"
                    },
                    {
                        "type": "ConfigChange"
                    }
                ]
            }
        },
        {
            "apiVersion": "v1",
            "kind": "DeploymentConfig",
            "metadata": {
                "labels": {
                    "application": "${APPLICATION_NAME}"
                },
                "name": "${APPLICATION_NAME}-mongodb"
            },
            "spec": {
                "replicas": 1,
                "selector": {
                    "deploymentConfig": "${APPLICATION_NAME}-mongodb"
                },
                "strategy": {
                    "type": "Recreate"
                },
                "template": {
                    "metadata": {
                        "labels": {
                            "application": "${APPLICATION_NAME}",
                            "deploymentConfig": "${APPLICATION_NAME}-mongodb"
                        },
                        "name": "${APPLICATION_NAME}-mongodb"
                    },
                    "spec": {
                        "containers": [
                            {
                                "env": [
                                    {
                                        "name": "MONGODB_USER",
                                        "value": "${DB_USERNAME}"
                                    },
                                    {
                                        "name": "MONGODB_PASSWORD",
                                        "value": "${DB_PASSWORD}"
                                    },
                                    {
                                        "name": "MONGODB_DATABASE",
                                        "value": "${DB_DATABASE}"
                                    },
                                    {
                                        "name": "MONGODB_ADMIN_PASSWORD",
                                        "value": "${DB_ADMIN_PASSWORD}"
                                    },
                                    {
                                        "name": "MONGODB_NOPREALLOC",
                                        "value": "${MONGODB_NOPREALLOC}"
                                    },
                                    {
                                        "name": "MONGODB_SMALLFILES",
                                        "value": "${MONGODB_SMALLFILES}"
                                    },
                                    {
                                        "name": "MONGODB_QUIET",
                                        "value": "${MONGODB_QUIET}"
                                    }
                                ],
                                "image": "mongodb",
                                "imagePullPolicy": "Always",
                                "livenessProbe": {
                                    "initialDelaySeconds": 30,
                                    "tcpSocket": {
                                        "port": 27017
                                    },
                                    "timeoutSeconds": 1
                                },
                                "name": "${APPLICATION_NAME}-mongodb",
                                "ports": [
                                    {
                                        "containerPort": 27017,
                                        "protocol": "TCP"
                                    }
                                ],
                                "readinessProbe": {
                                    "exec": {
                                        "command": [
                                            "/bin/sh",
                                            "-i",
                                            "-c",
                                            "mongo 127.0.0.1:27017/$MONGODB_DATABASE -u $MONGODB_USER -p $MONGODB_PASSWORD --eval=\"quit()\""
                                        ]
                                    },
                                    "initialDelaySeconds": 3,
                                    "timeoutSeconds": 1
                                },
                                "volumeMounts": [
                                    {
                                        "mountPath": "/var/lib/mongodb/data",
                                        "name": "${APPLICATION_NAME}-mongodb-pvol"
                                    }
                                ]
                            }
                        ],
                        "terminationGracePeriodSeconds": 60,
                        "volumes": [
                            {
                                "name": "${APPLICATION_NAME}-mongodb-pvol",
                                "persistentVolumeClaim": {
                                    "claimName": "${APPLICATION_NAME}-mongodb-claim"
                                }
                            }
                        ]
                    }
                },
                "triggers": [
                    {
                        "imageChangeParams": {
                            "automatic": true,
                            "containerNames": [
                                "${APPLICATION_NAME}-mongodb"
                            ],
                            "from": {
                                "kind": "ImageStreamTag",
                                "name": "mongodb:${MONGODB_IMAGE_STREAM_TAG}",
                                "namespace": "${IMAGE_STREAM_NAMESPACE}"
                            }
                        },
                        "type": "ImageChange"
                    },
                    {
                        "type": "ConfigChange"
                    }
                ]
            }
        },
        {
            "apiVersion": "v1",
            "kind": "PersistentVolumeClaim",
            "metadata": {
                "labels": {
                    "application": "${APPLICATION_NAME}"
                },
                "name": "${APPLICATION_NAME}-mongodb-claim"
            },
            "spec": {
                "accessModes": [
                    "ReadWriteOnce"
                ],
                "resources": {
                    "requests": {
                        "storage": "${VOLUME_CAPACITY}"
                    }
                }
            }
        }
    ],
    "parameters": [
        {
            "description": "The name for the application.",
            "displayName": "Application Name",
            "name": "APPLICATION_NAME",
            "required": true,
            "value": "jws-app"
        },
        {
            "description": "Custom hostname for http service route.  Leave blank for default hostname, e.g.: <application-name>-<project>.<default-domain-suffix>",
            "displayName": "Custom http Route Hostname",
            "name": "HOSTNAME_HTTP",
            "required": false,
            "value": ""
        },
        {
            "description": "Custom hostname for https service route.  Leave blank for default hostname, e.g.: secure-<application-name>-<project>.<default-domain-suffix>",
            "displayName": "Custom https Route Hostname",
            "name": "HOSTNAME_HTTPS",
            "required": false,
            "value": ""
        },
        {
            "description": "Git source URI for application",
            "displayName": "Git Repository URL",
            "name": "SOURCE_REPOSITORY_URL",
            "required": true,
            "value": "https://github.com/jboss-openshift/openshift-quickstarts"
        },
        {
            "description": "Git branch/tag reference",
            "displayName": "Git Reference",
            "name": "SOURCE_REPOSITORY_REF",
            "required": false,
            "value": "1.2"
        },
        {
            "description": "Path within Git project to build; empty for root project directory.",
            "displayName": "Context Directory",
            "name": "CONTEXT_DIR",
            "required": false,
            "value": "todolist/todolist-mongodb"
        },
        {
            "description": "Database JNDI name used by application to resolve the datasource, e.g. java:/jboss/datasources/mongodb",
            "displayName": "Database JNDI Name",
            "name": "DB_JNDI",
            "required": false,
            "value": ""
        },
        {
            "description": "Database name",
            "displayName": "Database Name",
            "name": "DB_DATABASE",
            "required": true,
            "value": "root"
        },
        {
            "description": "Size of persistent storage for database volume.",
            "displayName": "Database Volume Capacity",
            "name": "VOLUME_CAPACITY",
            "required": true,
            "value": "1Gi"
        },
        {
            "description": "The name of the secret containing the certificate files",
            "displayName": "Secret Name",
            "name": "JWS_HTTPS_SECRET",
            "required": true,
            "value": "jws-app-secret"
        },
        {
            "description": "The name of the certificate file within the secret",
            "displayName": "Certificate Name",
            "name": "JWS_HTTPS_CERTIFICATE",
            "required": false,
            "value": "server.crt"
        },
        {
            "description": "The name of the certificate key file within the secret",
            "displayName": "Certificate Key Name",
            "name": "JWS_HTTPS_CERTIFICATE_KEY",
            "required": false,
            "value": "server.key"
        },
        {
            "description": "The certificate password",
            "displayName": "Certificate Password",
            "name": "JWS_HTTPS_CERTIFICATE_PASSWORD",
            "required": false,
            "value": ""
        },
        {
            "description": "Sets xa-pool/min-pool-size for the configured datasource.",
            "displayName": "Datasource Minimum Pool Size",
            "name": "DB_MIN_POOL_SIZE",
            "required": false
        },
        {
            "description": "Sets xa-pool/max-pool-size for the configured datasource.",
            "displayName": "Datasource Maximum Pool Size",
            "name": "DB_MAX_POOL_SIZE",
            "required": false
        },
        {
            "description": "Sets transaction-isolation for the configured datasource.",
            "displayName": "Datasource Transaction Isolation",
            "name": "DB_TX_ISOLATION",
            "required": false
        },
        {
            "description": "Disable data file preallocation.",
            "displayName": "MongoDB No Preallocation",
            "name": "MONGODB_NOPREALLOC",
            "required": false
        },
        {
            "description": "Set MongoDB to use a smaller default data file size.",
            "displayName": "MongoDB Small Files",
            "name": "MONGODB_SMALLFILES",
            "required": false
        },
        {
            "description": "Runs MongoDB in a quiet mode that attempts to limit the amount of output.",
            "displayName": "MongoDB Quiet",
            "name": "MONGODB_QUIET",
            "required": false
        },
        {
            "description": "Database user name",
            "displayName": "Database Username",
            "from": "user[a-zA-Z0-9]{3}",
            "generate": "expression",
            "name": "DB_USERNAME",
            "required": true
        },
        {
            "description": "Database user password",
            "displayName": "Database Password",
            "from": "[a-zA-Z0-9]{8}",
            "generate": "expression",
            "name": "DB_PASSWORD",
            "required": true
        },
        {
            "description": "Database admin password",
            "displayName": "Database admin password",
            "from": "[a-zA-Z0-9]{8}",
            "generate": "expression",
            "name": "DB_ADMIN_PASSWORD",
            "required": true
        },
        {
            "description": "JWS Admin User",
            "displayName": "JWS Admin Username",
            "from": "[a-zA-Z0-9]{8}",
            "generate": "expression",
            "name": "JWS_ADMIN_USERNAME",
            "required": true
        },
        {
            "description": "JWS Admin Password",
            "displayName": "JWS Admin Password",
            "from": "[a-zA-Z0-9]{8}",
            "generate": "expression",
            "name": "JWS_ADMIN_PASSWORD",
            "required": true
        },
        {
            "description": "GitHub trigger secret",
            "displayName": "Github Webhook Secret",
            "from": "[a-zA-Z0-9]{8}",
            "generate": "expression",
            "name": "GITHUB_WEBHOOK_SECRET",
            "required": true
        },
        {
            "description": "Generic build trigger secret",
            "displayName": "Generic Webhook Secret",
            "from": "[a-zA-Z0-9]{8}",
            "generate": "expression",
            "name": "GENERIC_WEBHOOK_SECRET",
            "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",
            "required": true,
            "value": "openshift"
        },
        {
            "description": "Maven mirror to use for S2I builds",
            "displayName": "Maven mirror URL",
            "name": "MAVEN_MIRROR_URL",
            "required": false,
            "value": ""
        },
        {
            "description": "List of directories from which archives will be copied into the deployment folder. If unspecified, all archives in /target will be copied.",
            "name": "ARTIFACT_DIR",
            "required": false,
            "value": ""
        },
        {
            "description": "The tag to use for the \"mongodb\" image stream.  Typically, this aligns with the major.minor version of MongoDB.",
            "displayName": "MongoDB Image Stream Tag",
            "name": "MONGODB_IMAGE_STREAM_TAG",
            "required": true,
            "value": "3.2"
        }
    ]
}