{%- from "kubernetes/map.jinja" import common with context %}

kubernetes_pkgs:
  pkg.installed:
  - names: {{ common.pkgs }}

{%- if common.hyperkube is defined %}

/usr/bin/hyperkube:
  file.managed:
    - source: {{ common.hyperkube.source }}
    - mode: 751
    - makedirs: true
    - user: root
    - group: root
    - source_hash: {{ common.hyperkube.source_hash }}
    {%- if grains.get('noservices') %}
    - onlyif: /bin/false
    {%- endif %}

/usr/bin/kubectl:
  file.symlink:
    - target: /usr/bin/hyperkube
    - require:
      - file: /usr/bin/hyperkube
    {%- if grains.get('noservices') %}
    - onlyif: /bin/false
    {%- endif %}

{%- if common.get('containerd', {}).get('enabled') %}

containerd_pkg:
  pkg.installed:
  - name: {{ common.get('containerd', {}).get('package', 'containerd.io') }}

/etc/containerd/config.toml:
  file.managed:
  - source: salt://kubernetes/files/containerd/config.toml
  - makedirs: True
  - template: jinja
  - user: root
  - group: root
  - mode: 644

containerd_service:
  service.running:
  - name: containerd
  - enable: True
  - watch:
    - file: /etc/containerd/config.toml
  - require:
    - containerd_pkg
  {%- if grains.get('noservices') %}
  - onlyif: /bin/false
  {%- endif %}

extract_crictl:
  archive.extracted:
    - name: /tmp/crictl
    - source: {{ common.containerd.crictl.source }}
    - source_hash: {{ common.containerd.crictl.hash }}
    - enforce_toplevel: false
    - options: xzf
    - archive_format: tar
    - keep: true
    {%- if grains.get('noservices') %}
    - onlyif: /bin/false
    {%- endif %}

/usr/local/bin/crictl:
  file.managed:
  - source: /tmp/crictl/crictl
  - mode: 755
  - owner: root
  - group: root
  - require:
    - archive: extract_crictl

/etc/crictl.yaml:
  file.managed:
  - user: root
  - group: root
  - mode: 644
  - contents: 'runtime-endpoint: unix:///run/containerd/containerd.sock'
{%- endif %}

{%- if common.addons.get('virtlet', {}).get('enabled') and not pillar.kubernetes.master is defined %}

{%- if not common.get('containerd', {}).get('enabled') %}

/etc/default/dockershim:
  file.managed:
  - source: salt://kubernetes/files/dockershim/default.pool
  - template: jinja
  - user: root
  - group: root
  - mode: 644

/etc/systemd/system/dockershim.service:
  file.managed:
    - source: salt://kubernetes/files/systemd/dockershim.service
    - template: jinja
    - user: root
    - group: root
    - mode: 755

dockershim_service:
  service.running:
  - name: dockershim
  - enable: True
  - watch:
    - file: /etc/default/dockershim
    - file: /usr/bin/hyperkube
  {%- if grains.get('noservices') %}
  - onlyif: /bin/false
  {%- endif %}

{%- endif %}

/usr/bin/criproxy:
  file.managed:
    - source: https://github.com/mirantis/criproxy/releases/download/{{ common.addons.virtlet.get('criproxy_version', 'v0.10.0') }}/criproxy
    - mode: 750
    - makedirs: true
    - user: root
    - group: root
    - source_hash: {{ common.addons.virtlet.get('criproxy_source', 'md5=52717b1f70f15558ef4bdb0e4d4948da') }}
    {%- if grains.get('noservices') %}
    - onlyif: /bin/false
    {%- endif %}

/etc/criproxy:
  file.directory:
    - user: root
    - group: root
    - mode: 0750

/var/log/criproxy:
  file.directory:
    - user: root
    - group: root
    - mode: 0750

/etc/criproxy/node.conf:
  file.managed:
    - user: root
    - group: root
    - mode: 0640
    - contents: ''

/etc/systemd/system/criproxy.service:
  file.managed:
    - source: salt://kubernetes/files/systemd/criproxy.service
    - template: jinja
    - user: root
    - group: root
    - mode: 755

criproxy_service:
  service.running:
  - name: criproxy
  - enable: True
  - watch:
    - file: /etc/systemd/system/criproxy.service
    - file: /etc/criproxy/node.conf
    - file: /usr/bin/criproxy
  {%- if grains.get('noservices') %}
  - onlyif: /bin/false
  {%- endif %}

{%- else %}

/etc/criproxy:
  file.absent

{%- if not common.get('containerd', {}).get('enabled') %}
dockershim_service:
  service.dead:
  - name: dockershim
  - enable: False
{%- endif %}

criproxy_service:
  service.dead:
  - name: criproxy
  - enable: False

{%- endif %}

/etc/systemd/system/kubelet.service:
  file.managed:
    - source: salt://kubernetes/files/systemd/kubelet.service
    - template: jinja
    - user: root
    - group: root
    - mode: 644

/etc/kubernetes/config:
  file.absent

{%- if common.get('cloudprovider', {}).get('enabled') and common.get('cloudprovider', {}).get('provider') == 'openstack' %}
{%- set cloudconfig_type = 'external' %}
/etc/kubernetes/cloud-config:
  file.managed:
  - source: salt://kubernetes/files/cloudprovider/cloud-config-openstack.conf
  - template: jinja
  - user: root
  - group: root
  - mode: 600
  - defaults:
      cloudconfig_type: {{ cloudconfig_type }}

{%- if pillar.kubernetes.master is defined %}
{%- set cloudconfig_type = 'intree' %}
/etc/kubernetes/cloud-config.intree:
  file.managed:
  - source: salt://kubernetes/files/cloudprovider/cloud-config-openstack.conf
  - template: jinja
  - user: root
  - group: root
  - mode: 600
  - defaults:
      cloudconfig_type: {{ cloudconfig_type }}
{% endif %}

{% endif %}

{%- if pillar.kubernetes.master is defined %}

/etc/default/kubelet:
  file.managed:
  - source: salt://kubernetes/files/kubelet/default.master
  - template: jinja
  - user: root
  - group: root
  - mode: 644

/etc/kubernetes/kubelet.kubeconfig:
  file.managed:
    - source: salt://kubernetes/files/kubelet/kubelet.kubeconfig.master
    - template: jinja
    - user: root
    - group: root
    - mode: 644
    - makedirs: true

{%- else %}

/etc/default/kubelet:
  file.managed:
  - source: salt://kubernetes/files/kubelet/default.pool
  - template: jinja
  - user: root
  - group: root
  - mode: 644

/etc/kubernetes/kubelet.kubeconfig:
  file.managed:
    - source: salt://kubernetes/files/kubelet/kubelet.kubeconfig.pool
    - template: jinja
    - user: root
    - group: root
    - mode: 644
    - makedirs: true

{%- endif %}

manifest_dir_create:
  file.directory:
    - makedirs: true
    - name: /etc/kubernetes/manifests
    - user: root
    - group: root
    - mode: 0751

kubelet_service:
  service.running:
  - name: kubelet
  - enable: True
  - watch:
    - file: /etc/default/kubelet
    - file: /usr/bin/hyperkube
    - file: /etc/kubernetes/kubelet.kubeconfig
    - file: manifest_dir_create
    {%- if common.get('cloudprovider', {}).get('enabled') %}
    {%- if common.get('cloudprovider', {}).get('provider') == 'openstack' and not pillar.get('kubernetes', {}).get('master', false) %}
    - file: /etc/kubernetes/cloud-config
    {%- endif %}
    {%- endif %}
  {%- if grains.get('noservices') %}
  - onlyif: /bin/false
  {%- endif %}

{%- if common.logrotate is defined %}
/etc/logrotate.d/kubernetes:
  file.managed:
    - source: salt://kubernetes/files/logrotate
    - template: jinja
    - user: root
    - group: root
    - mode: 644
    - makedirs: true
    - defaults:
      logfile: {{ common.logrotate }}

{% endif %}
{% endif %}

{%- if common.cni is defined %}
/opt/cni/bin:
  archive.extracted:
    - source: {{ common.cni.plugins.source }}
    - source_hash: {{ common.cni.plugins.hash }}
    {%- if grains['saltversioninfo'] < [2017, 7] %}
    - tar_options: xzf
    {%- else %}
    - options: xzf
    {%- endif %}
    - archive_format: tar
    - overwrite: true
{%- endif %}

{%- if common.addons.get('helm', {'enabled': False}).enabled %}
extract_helm:
  archive.extracted:
    - name: /tmp/helm
    - source: {{ common.addons.helm.client.source }}
    - source_hash: {{ common.addons.helm.client.hash }}
    {%- if grains['saltversioninfo'] < [2017, 7] %}
    - tar_options: xzf
    {%- else %}
    - options: xzf
    {%- endif %}
    - archive_format: tar
    - keep: true

/usr/local/bin/helm:
  file.managed:
  - source: /tmp/helm/linux-amd64/helm
  - mode: 755
  - owner: root
  - group: root
  - require:
    - archive: extract_helm

{%- endif %}
