<%#
 Copyright 2013-2017 the original author or authors from the JBooter project.

 This file is part of the JBooter project, see https://jbooter.github.io/
 for more information.

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-%>
# Search template.
#
# This defines all the configurable parameters and other objects that are needed to run the Elasticsearch service. This template can even
# be saved in OpenShift namespace as well so that have the flexibility to do any project specific customizations. Pls note wherever
# displayName says *** PLEASE DO NOT CHANGE THIS ***, don't touch that as those parameters will be referenced in other places.
#
apiVersion: v1
kind: Template
metadata:
  name: <%= app.baseName.toLowerCase() %>-elasticsearch-template
  namespace: <%= openshiftNamespace %>
  annotations:
    description: This template defines objects that are required to spin up an elasticsearch pod
    tags: elasticsearch, <%= app.baseName.toLowerCase() %>-elasticsearch<% if (storageType == 'persistent') { %> ,persistent <% } %> <% if (storageType == 'ephemeral') { %> ,ephemeral <% } %>
    openshift.io/display-name: <%= app.baseName.toLowerCase() %>-elasticsearch-template
    openshift.io/long-description: "This template provides objects that are required to spin up an elasticsearch pod. <% if (storageType ==
    'persistent') { %>The database is stored on persistent storage, so any restart of the service will not cause any impact to the data.
     Please make sure you have provisioned PVs (Persistent Volumes) before using this template. <% } %><% if (storageType == 'ephemeral') {
     %>The database is not stored on persistent storage, so any restart of the service will result in all data being lost.<% } %>"
    openshift.io/provider-display-name: JBooter-OpenShift
labels:
  app: <%= app.baseName.toLowerCase() %>-elasticsearch
  createdBy: JBooter-Team
parameters:
  -
    name: APPLICATION_NAME
    value: <%= app.baseName.toLowerCase() %>-elasticsearch
    description: Name of the application
    required: true
    displayName: Application Name
  -
    name: VOLUME_CAPACITY
    displayName: Volume Capacity
    description: Volume space available for data, e.g. 512Mi, 2Gi.
    value: 1Gi
    required: true
objects:
<%_ if (storageType == 'persistent') { _%>
  -
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ${APPLICATION_NAME}
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: "${VOLUME_CAPACITY}"
<%_ } _%>
  -
    apiVersion: v1
    kind: DeploymentConfig
    metadata:
      name: ${APPLICATION_NAME}
      labels:
        app: ${APPLICATION_NAME}
    spec:
# This is to define the deployment strategy (either be Rolling or Recreate)
#     strategy:
#       type: Rolling
#       rollingParams:
#         updatePeriodSeconds: 1
#         intervalSeconds: 1
#         timeoutSeconds: 600
#         maxUnavailable: 25%
#         maxSurge: 25%
#       resources:
      triggers:
        -
          type: ConfigChange
      replicas: 1
      selector:
        app: ${APPLICATION_NAME}
      template:
        metadata:
          labels:
            app: ${APPLICATION_NAME}
        spec:
          volumes:
          - name: ${APPLICATION_NAME}-data
            <%_ if (storageType == 'persistent') { _%>
            persistentVolumeClaim:
              claimName: ${APPLICATION_NAME}
            <%_ } _%>
            <%_ if (storageType == 'ephemeral') { _%>
            emptyDir: {}
            <%_ } _%>
          containers:
          - name: ${APPLICATION_NAME}
            image: <%= DOCKER_ELASTICSEARCH %>
            ports:
            - containerPort: 9200
              name: http
              protocol: TCP
            - containerPort: 9300
              name: transport
              protocol: TCP
            volumeMounts:
            - name: ${APPLICATION_NAME}-data
              mountPath: /usr/share/elasticsearch/data/
            resources:
            imagePullPolicy: IfNotPresent
          restartPolicy: Always
          terminationGracePeriodSeconds: 30
  -
    apiVersion: v1
    kind: Service
    metadata:
      name: ${APPLICATION_NAME}
      labels:
        app: ${APPLICATION_NAME}
    spec:
      ports:
        -
          name: http
          port: 9200
          protocol: TCP
          targetPort: 9200
        -
          name: transport
          port: 9300
          protocol: TCP
          targetPort: 9300
      selector:
        app: ${APPLICATION_NAME}
