blob: ed8606b8885f7eaa63c6b048c1bb0092b6ffabcd [file] [log] [blame]
{%- 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 %}