---
kind: DaemonSet
apiVersion: extensions/v1beta1
metadata:
  name: contiv-etcd
  namespace: kube-system
  labels:
    k8s-app: contiv-etcd
spec:
  selector:
    matchLabels:
      k8s-app: contiv-etcd
  template:
    metadata:
      labels:
        k8s-app: contiv-etcd
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ''
    spec:
{% if kube_version is version('v1.11.1', '>=') %}
      priorityClassName: system-node-critical
{% endif %}
      hostNetwork: true
      hostPID: true
      nodeSelector:
        node-role.kubernetes.io/master: ""
      tolerations:
        - operator: Exists
        # Mark pod as critical for rescheduling (Will have no effect starting with kubernetes 1.12)
        - key: CriticalAddonsOnly
          operator: "Exists"
      initContainers:
        - name: contiv-etcd-init
          image: {{ contiv_etcd_init_image_repo }}:{{ contiv_etcd_init_image_tag }}
          imagePullPolicy: Always
          env:
            - name: ETCD_INIT_ARGSFILE
              value: '{{ contiv_etcd_conf_dir }}/contiv-etcd-args'
            - name: ETCD_INIT_LISTEN_PORT
              value: '{{ contiv_etcd_listen_port }}'
            - name: ETCD_INIT_PEER_PORT
              value: '{{ contiv_etcd_peer_port }}'
            - name: ETCD_INIT_CLUSTER
              value: '{{ contiv_etcd_endpoints }}'
            - name: ETCD_INIT_DATA_DIR
              value: '{{ contiv_etcd_data_dir }}'
          volumeMounts:
            - name: contiv-etcd-conf-dir
              mountPath: {{ contiv_etcd_conf_dir }}
      containers:
        - name: contiv-etcd
          image: {{ contiv_etcd_image_repo }}:{{ contiv_etcd_image_tag }}
          command:
            - sh
            - -c
            - "/usr/local/bin/etcd $(cat $ETCD_INIT_ARGSFILE)"
          env:
            - name: ETCD_INIT_ARGSFILE
              value: {{ contiv_etcd_conf_dir }}/contiv-etcd-args
          volumeMounts:
            - name: contiv-etcd-conf-dir
              mountPath: {{ contiv_etcd_conf_dir }}
            - name: contiv-etcd-data-dir
              mountPath: {{ contiv_etcd_data_dir }}
      volumes:
        - name: contiv-etcd-data-dir
          hostPath:
            path: {{ contiv_etcd_data_dir }}
        - name: contiv-etcd-conf-dir
          hostPath:
            path: {{ contiv_etcd_conf_dir }}
