# Copyright 2019-present Open Networking Foundation
#
# 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.

{{- if .Values.replicas.cli }}
---
apiVersion: v1
kind: Service
metadata:
  name: voltha-cli
  serviceAccountName: {{ .Values.serviceaccount }}
  labels:
    name: vcli
spec:
  serviceAccountName: {{ .Values.serviceaccount }}
  ports:
    - name: ssh
      port: 5022
      targetPort: 22
  selector:
    app: vcli

---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: voltha-cli-server
  serviceAccountName: {{ .Values.serviceaccount }}
  {{- if or (hasKey .Values "extra_deployment_labels") (hasKey .Values "cli_deployment_labels") }}
  labels:
    {{- if hasKey .Values "extra_deployment_labels" }}
    {{- range $key, $val := .Values.extra_deployment_labels }}
    {{ $key }}: {{ $val | quote }}
    {{- end }}
    {{- end }}
    {{- if hasKey .Values "cli_deployment_labels" }}
    {{- range $key, $val := .Values.cli_deployment_labels }}
    {{ $key }}: {{ $val | quote }}
    {{- end }}
    {{- end }}
  {{- end }}
spec:
  replicas: {{ .Values.replicas.cli }}
  template:
    metadata:
      labels:
        app: vcli
        app.kubernetes.io/name: "cli-server"
        app.kubernetes.io/version: {{ quote .Chart.AppVersion }}
        app.kubernetes.io/component: "cli"
        app.kubernetes.io/part-of: "voltha"
        app.kubernetes.io/managed-by: {{ quote .Release.Service }}
        helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
        {{- if hasKey .Values "extra_pod_labels" }}
        {{- range $key, $val := .Values.extra_pod_labels }}
        {{ $key }}: {{ $val | quote }}
        {{- end }}
        {{- end }}
        {{- if hasKey .Values "cli_pod_labels" }}
        {{- range $key, $val := .Values.cli_pod_labels }}
        {{ $key }}: {{ $val | quote }}
        {{- end }}
        {{- end }}
      annotations:
        cni: "calico"
    spec:
      serviceAccountName: {{ .Values.serviceaccount }}
      containers:
        - name: vcli
          image: {{ tpl .Values.images.cli.registry . }}{{ tpl .Values.images.cli.repository . }}:{{ tpl ( tpl .Values.images.cli.tag . ) . }}
          imagePullPolicy: {{ tpl .Values.images.cli.pullPolicy . }}
          env:
            - name: POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
          args:
            - "/voltha/python/cli/setup.sh"
            - "-g voltha-api.{{ .Release.Namespace }}.svc.cluster.local:55555"
          ports:
            - containerPort: 22
              name: ssh-port
{{- end}}
