{%- from "linux/map.jinja" import system with context %}
{%- from "linux/map.jinja" import sysctl_min_kernel %}
{%- if system.enabled %}

{%- if system.kernel is defined %}

{%- set kernel_boot_opts = [] %}
{%- do kernel_boot_opts.append('isolcpus=' ~ system.kernel.isolcpu) if system.kernel.isolcpu is defined %}
{%- do kernel_boot_opts.append('elevator=' ~ system.kernel.elevator) if system.kernel.elevator is defined %}
{%- do kernel_boot_opts.extend(system.kernel.boot_options) if system.kernel.boot_options is defined %}

include:
  - linux.system.grub

{%- if kernel_boot_opts %}
/etc/default/grub.d/99-custom-settings.cfg:
  file.managed:
    - contents: 'GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT {{ kernel_boot_opts|join(' ') }}"'
    - require:
      - file: grub_d_directory
{%- if grains.get('virtual_subtype', None) not in ['Docker', 'LXC'] %}
    - watch_in:
      - cmd: grub_update
{%- endif %}
{%- endif %}

{%- if system.kernel.version is defined and grains.get('os_family') == 'Debian' %}

linux_kernel_package:
  pkg.installed:
  - pkgs:
    - linux-image-{{ system.kernel.version }}-{{ system.kernel.type|default('generic') }}
    {%- if system.kernel.get('headers', False) %}
    - linux-headers-{{ system.kernel.version }}-{{ system.kernel.type|default('generic') }}
    {%- endif %}
    {%- if system.kernel.get('extra', False) %}
    - linux-image-extra-{{ system.kernel.version }}-{{ system.kernel.type|default('generic') }}
    {%- endif %}
    {%- if system.kernel.hwe is defined %}
      {%- set osVersion = salt['grains.get']('osrelease') %}
      {%- set hweVersion = system.kernel.hwe.get('version', osVersion) %}
      {%- set hwePackageVersion = system.kernel.hwe.get('kernel_version', system.kernel.version|replace('-', '.')) + '*' %}
      {%- set hweType = system.kernel.hwe.get('type', 'generic') %}
    - linux-image-{{ hweType }}-hwe-{{ hweVersion }} : {{ hwePackageVersion }}
      {%- if system.kernel.get('headers', False) %}
    - linux-headers-{{ hweType }}-hwe-{{ hweVersion }} : {{ hwePackageVersion }}
      {%- endif %}
      {%- if hweType == 'virtual' %}
    - linux-image-extra-{{ hweType }}-hwe-{{ hweVersion }} : {{ hwePackageVersion }}
      {%- endif %}
    {%- endif %}
  - refresh: true


  {%- if system.kernel.hwe is defined %}
    {%- set exlcudeRule = system.kernel.version + '|hwe' %}
  {%- else %}
    {%- set exlcudeRule = system.kernel.version %}
  {%- endif %}

# Not very Salt-ish.. :-(
linux_kernel_old_absent:
  cmd.wait:
  - name: "dpkg -l '*linux-generic-*[0-9]*' '*linux-image-*[0-9]*' '*linux-headers-*[0-9]*' '*linux-modules-*[0-9]*' '*linux-image-extra-*[0-9]*' | grep -E '^ii' | awk '{print $2}' | grep -vE '{{ exlcudeRule }}' | xargs dpkg --purge --force-depends"
  - watch:
    - pkg: linux_kernel_package

{%- endif %}


{%- for module in system.kernel.get('modules', []) %}

linux_kernel_module_{{ module }}:
  kmod.present:
    - name: {{ module }}
    - persist: true

{%- endfor %}

{%- if system.kernel.module is defined %}

modprobe_d_directory:
  file.directory:
    - name: /etc/modprobe.d
    - user: root
    - group: root
    - mode: 755

  {%- for module_name in system.kernel.module %}

/etc/modprobe.d/{{ module_name }}.conf:
  file.managed:
    - user: root
    - group: root
    - mode: 0644
    - template: jinja
    - source: salt://linux/files/modprobe.conf.jinja
    - defaults:
       module_name: {{ module_name }}
    - require:
      - file: modprobe_d_directory

  {%- endfor %}
{%- endif %}

{%- set cur_kernel = salt['grains.get']('kernelrelease') %}

{%- for sysctl_name, sysctl_value in system.kernel.get('sysctl', {}).items() %}

  {%- if not sysctl_name in sysctl_min_kernel or salt['pkg.version_cmp'](cur_kernel, sysctl_min_kernel[sysctl_name]) >= 0 %}

linux_kernel_{{ sysctl_name }}:
  sysctl.present:
  - name: {{ sysctl_name }}
  - value: {{ sysctl_value }}

  {%- endif %}

{%- endfor %}

{%- endif %}

{%- endif %}
