Представленный шаблон позволяет развернуть сервис eltex-doors в кластере OpenShift.

Подготовка к установке:

Порядок установки:



kind: Template
apiVersion: v1
metadata:
  name: eltex-doors-template
  annotations:
    description: "Eltex-doors application template"
    openshift.io/display-name: "The Eltex DOORS"
    openshift.io/provider-display-name: "Eltex"
    iconClass: "icon-openjdk"
objects:
  - apiVersion: v1
    kind: Secret
    metadata:
      name: ${INSTANCE_NAME}-secret
    stringData:
      private.pem: ${PRIVATE_DATA}
      public.pem: ${PUBLIC_DATA}
    type: Opaque
  - apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ${INSTANCE_NAME}-config
    data:
      application.properties: |-
        spring.application.name=eltex_doors
        spring.datasource.url=${DB_URL}
        spring.datasource.username=${DB_LOGIN}
        spring.datasource.password=${DB_PASS}
        spring.flyway.url=${DB_URL}
        spring.flyway.user=${DB_LOGIN}
        spring.flyway.password=${DB_PASS}
        server.port=9097
        auth.cron.session.timeout=*/60 * * * * *
        auth.username=user
        auth.password=password
        auth.private.key=/etc/eltex-doors/keys/private.pem
        auth.public.key=/etc/eltex-doors/keys/public.pem
        auth.token.access.lifetime=00:15:00
        auth.token.refresh.lifetime=720:00:00
      log4j2.xml: |-
        <?xml version="1.0" encoding="UTF-8"?> 
        <Configuration>
          <Properties>
              <Property name="defaultPattern" value="%d{ISO8601} [%t] %-5p %logger{1} %C{1}.%M(line:%L). %m%n"/>
          </Properties>
          <Appenders>
              <Console name="STDOUT" target="SYSTEM_OUT">
                  <PatternLayout>
                      <Pattern>${defaultPattern}</Pattern>
                  </PatternLayout>
              </Console>
          </Appenders>
          <Loggers>
              <Root level="info">
                  <AppenderRef ref="STDOUT"/>
              </Root>
          </Loggers>
        </Configuration>
  - apiVersion: "apps.openshift.io/v1" 
    kind: "DeploymentConfig" 
    metadata:
      labels:
        app: ${INSTANCE_NAME} 
      name: ${INSTANCE_NAME}
    spec:
      replicas: 1
      selector:
        app: ${INSTANCE_NAME}
      strategy:
        type: "Rolling" 
      template:
        metadata:
          labels:
            app: ${INSTANCE_NAME}
        spec:
          containers:
            - name: ${INSTANCE_NAME}-container
              image: ${IMAGE_NAME} 
              imagePullPolicy: Always
              volumeMounts:
                - name: config-volume
                  mountPath: /etc/eltex-doors/application.properties
                  subPath: application.properties
                - name: config-volume
                  mountPath: /etc/eltex-doors/log4j2.xml
                  subPath: log4j2.xml
                - name: secret-volume
                  mountPath: /etc/eltex-doors/keys
              livenessProbe:
                httpGet:
                  path: /actuator/health
                  port: 9097
                  scheme: HTTP
                initialDelaySeconds: 30
          volumes:
            - name: config-volume
              configMap:
                name: ${INSTANCE_NAME}-config
                items:
                - key: application.properties
                  path: application.properties
                - key: log4j2.xml  
                  path: log4j2.xml
            - name: secret-volume
              secret:
                secretName: ${INSTANCE_NAME}-secret
      triggers:
        - type: "ConfigChange"  
  - apiVersion: v1
    kind: Service
    metadata:
      name: ${INSTANCE_NAME}-service
    spec:
      ports:
        - port: 9097
          protocol: TCP
      selector:
        app: ${INSTANCE_NAME}
  - apiVersion: v1
    kind: Route
    metadata:
      name: ${INSTANCE_NAME}-route
    spec:
      to:
        kind: Service
        name: ${INSTANCE_NAME}-service
parameters:
  - name: INSTANCE_NAME
    displayName: Name of service
    description: Name of service in openshift
    required: true
    value: eltex-doors
  - name: IMAGE_NAME
    displayName: Image name
    description: Image name or pull spec
    required: true
    value: hub.eltex-co.ru/softwlc/eltex-doors:latest
  - name: DB_URL
    displayName: Database connection string
    description: Database for eltex-doors
    required: true
    value: jdbc:mysql://lab3.eltex.loc:3306/eltex_doors?useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
  - name: DB_LOGIN
    displayName: Database login
    description: Database login
    required: true
    value: root
  - name: DB_PASS
    displayName: Database password
    description: Database password
    required: true
    value: root
  - name: PRIVATE_DATA
    displayName: private.pem
    description: Contents of private.pem
    required: true
  - name: PUBLIC_DATA
    displayName: public.pem
    description: Contents of public.pem
    required: true
message: "... The Eltex Doors with name ${INSTANCE_NAME} is starting ..."