# Inspired by https://github.com/kube-vip/kube-vip/blob/v1.0.3/pkg/kubevip/config_generator.go#L103
apiVersion: v1
kind: Pod
metadata:
  name: kube-vip
  namespace: kube-system
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
    k8s-app: kube-vip
spec:
  containers:
  - args:
    - manager
    env:
    - name: vip_arp
      value: {{ kube_vip_arp_enabled | string | to_json }}
    - name: port
      value: {{ kube_apiserver_port | string | to_json }}
    - name: vip_nodename
      value: {{ inventory_hostname }}
{% if kube_vip_interface %}
    - name: vip_interface
      value: {{ kube_vip_interface | string | to_json }}
{% endif %}
{% if kube_vip_services_interface %}
    - name: vip_servicesinterface
      value: {{ kube_vip_services_interface | string | to_json }}
{% endif %}
{% if kube_vip_cidr %}
    - name: vip_{{ "subnet" if kube_vip_version is version('0.9.0', '>=') else "cidr" }}
      value: {{ kube_vip_cidr | string | to_json }}
{% endif %}
{% if kube_vip_dns_mode %}
    - name: dns_mode
      value: {{ kube_vip_dns_mode | string | to_json }}
{% endif %}
{% if kube_vip_controlplane_enabled %}
    - name: cp_enable
      value: "true"
    - name: cp_namespace
      value: kube-system
    - name: vip_ddns
      value: {{ kube_vip_ddns_enabled | string | to_json }}
    - name: cp_detect
      value: {{ kube_vip_cp_detect | string | to_json }}
{% endif %}
{% if kube_vip_services_enabled %}
    - name: svc_enable
      value: "true"
{% endif %}
{% if kube_vip_svc_leasename %}
    - name: svc_leasename
      value: {{ kube_vip_svc_leasename | string | to_json }}
{% endif %}
{% if kube_vip_enableServicesElection %}
    - name: svc_election
      value: "true"
{% endif %}
{% if kube_vip_leader_election_enabled %}
    - name: vip_leaderelection
      value: "true"
    - name: vip_leasename
      value: {{ kube_vip_leasename | string | to_json }}
    - name: vip_leaseduration
      value: {{ kube_vip_leaseduration | string | to_json }}
    - name: vip_renewdeadline
      value: {{ kube_vip_renewdeadline | string | to_json }}
    - name: vip_retryperiod
      value: {{ kube_vip_retryperiod | string | to_json }}
{% endif %}
{% if kube_vip_enable_node_labeling %}
    - name: enable_node_labeling
      value: {{ kube_vip_enable_node_labeling | string | to_json }}
{% endif %}
{% if kube_vip_bgp_enabled %}
    - name: bgp_enable
      value: "true"
    - name: bgp_routerid
      value: {{ kube_vip_bgp_routerid | string | to_json }}
    - name: bgp_as
      value: {{ kube_vip_local_as | string | to_json }}
    - name: bgp_peeraddress
      value: {{ kube_vip_bgp_peeraddress | to_json }}
    - name: bgp_peerpass
      value: {{ kube_vip_bgp_peerpass | to_json }}
    - name: bgp_peeras
      value: {{ kube_vip_bgp_peeras | string | to_json }}
{% set kube_vip_bgp_sourceip_normalized = kube_vip_bgp_sourceip | default('', true) | string | trim %}
{% if kube_vip_bgp_sourceip_normalized %}
    - name: bgp_sourceip
      value: {{ kube_vip_bgp_sourceip_normalized | to_json }}
{% endif %}
{% set kube_vip_bgp_sourceif_normalized = kube_vip_bgp_sourceif | default('', true) | string | trim %}
{% if kube_vip_bgp_sourceif_normalized %}
    - name: bgp_sourceif
      value: {{ kube_vip_bgp_sourceif_normalized | to_json }}
{% endif %}
{% if kube_vip_bgppeers %}
    - name: bgp_peers
      value: {{ kube_vip_bgppeers | join(',')  | to_json }}
{% endif %}
{% endif %}
    - name: address
      value: {{ kube_vip_address | to_json }}
{% if kube_vip_lb_enable %}
    - name: lb_enable
      value: "true"
{% endif %}
{% if kube_vip_lb_fwdmethod %}
    - name: lb_fwdmethod
      value: {{ kube_vip_lb_fwdmethod | string | to_json }}
{% endif %}
    image: {{ kube_vip_image_repo }}:{{ kube_vip_image_tag }}
    imagePullPolicy: {{ k8s_image_pull_policy }}
    name: kube-vip
    resources: {}
{% if kube_vip_lb_fwdmethod == "masquerade" %}
    securityContext:
      privileged: true
{% else %}
    securityContext:
      capabilities:
        add:
        - NET_ADMIN
        - NET_RAW
        drop:
        - ALL
{% endif %}
    volumeMounts:
    - mountPath: /etc/kubernetes/admin.conf
      name: kubeconfig
  hostAliases:
  - hostnames:
    - kubernetes
    ip: 127.0.0.1
  hostNetwork: true
  volumes:
  - hostPath:
      path: /etc/kubernetes/{{kube_vip_admin_conf}}
    name: kubeconfig
status: {}
