blob: ed8606b8885f7eaa63c6b048c1bb0092b6ffabcd [file] [log] [blame]
Filip Pytlounf5383a42015-10-06 16:28:32 +02001{%- from "linux/map.jinja" import system with context %}
Oleg Bondarevfb4f1c62019-03-12 17:00:32 +04002{%- from "linux/map.jinja" import sysctl_min_kernel %}
Filip Pytlounf5383a42015-10-06 16:28:32 +02003{%- if system.enabled %}
4
5{%- if system.kernel is defined %}
6
Michael Polenchukebf55522018-01-25 13:22:39 +04007{%- set kernel_boot_opts = [] %}
8{%- do kernel_boot_opts.append('isolcpus=' ~ system.kernel.isolcpu) if system.kernel.isolcpu is defined %}
9{%- do kernel_boot_opts.append('elevator=' ~ system.kernel.elevator) if system.kernel.elevator is defined %}
10{%- do kernel_boot_opts.extend(system.kernel.boot_options) if system.kernel.boot_options is defined %}
Jakub Pavlik6c9ead12017-02-16 21:53:13 +010011
12include:
13 - linux.system.grub
14
Dmitry Teselkinf1c123c2018-09-28 16:32:25 +030015{%- if kernel_boot_opts %}
Michael Polenchukebf55522018-01-25 13:22:39 +040016/etc/default/grub.d/99-custom-settings.cfg:
Jakub Pavlik6c9ead12017-02-16 21:53:13 +010017 file.managed:
Michael Polenchukebf55522018-01-25 13:22:39 +040018 - contents: 'GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT {{ kernel_boot_opts|join(' ') }}"'
Simon Schneider02256662017-12-07 12:17:22 +010019 - require:
20 - file: grub_d_directory
21{%- if grains.get('virtual_subtype', None) not in ['Docker', 'LXC'] %}
22 - watch_in:
23 - cmd: grub_update
Simon Schneider02256662017-12-07 12:17:22 +010024{%- endif %}
25{%- endif %}
26
Denis Egorenko567aa202019-11-06 14:02:00 +040027{%- if system.kernel.version is defined and grains.get('os_family') == 'Debian' %}
Filip Pytlounf5383a42015-10-06 16:28:32 +020028
29linux_kernel_package:
30 pkg.installed:
Bruno Binete3c04fd2017-02-15 17:53:19 +010031 - pkgs:
Filip Pytloun281034a2016-01-04 18:06:22 +010032 - linux-image-{{ system.kernel.version }}-{{ system.kernel.type|default('generic') }}
33 {%- if system.kernel.get('headers', False) %}
34 - linux-headers-{{ system.kernel.version }}-{{ system.kernel.type|default('generic') }}
35 {%- endif %}
36 {%- if system.kernel.get('extra', False) %}
Jakub Pavlikd5642b62016-01-05 14:26:36 +010037 - linux-image-extra-{{ system.kernel.version }}-{{ system.kernel.type|default('generic') }}
Filip Pytloun281034a2016-01-04 18:06:22 +010038 {%- endif %}
Denis Egorenko567aa202019-11-06 14:02:00 +040039 {%- if system.kernel.hwe is defined %}
40 {%- set osVersion = salt['grains.get']('osrelease') %}
41 {%- set hweVersion = system.kernel.hwe.get('version', osVersion) %}
42 {%- set hwePackageVersion = system.kernel.hwe.get('kernel_version', system.kernel.version|replace('-', '.')) + '*' %}
43 {%- set hweType = system.kernel.hwe.get('type', 'generic') %}
44 - linux-image-{{ hweType }}-hwe-{{ hweVersion }} : {{ hwePackageVersion }}
45 {%- if system.kernel.get('headers', False) %}
46 - linux-headers-{{ hweType }}-hwe-{{ hweVersion }} : {{ hwePackageVersion }}
47 {%- endif %}
48 {%- if hweType == 'virtual' %}
49 - linux-image-extra-{{ hweType }}-hwe-{{ hweVersion }} : {{ hwePackageVersion }}
50 {%- endif %}
51 {%- endif %}
Filip Pytlounf5383a42015-10-06 16:28:32 +020052 - refresh: true
53
Denis Egorenko567aa202019-11-06 14:02:00 +040054
55 {%- if system.kernel.hwe is defined %}
56 {%- set exlcudeRule = system.kernel.version + '|hwe' %}
57 {%- else %}
58 {%- set exlcudeRule = system.kernel.version %}
59 {%- endif %}
60
Filip Pytloun281034a2016-01-04 18:06:22 +010061# Not very Salt-ish.. :-(
62linux_kernel_old_absent:
63 cmd.wait:
Denis Egorenko567aa202019-11-06 14:02:00 +040064 - 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"
Filip Pytloun281034a2016-01-04 18:06:22 +010065 - watch:
66 - pkg: linux_kernel_package
67
Filip Pytlounf5383a42015-10-06 16:28:32 +020068{%- endif %}
69
Tomáš Kukrálba35b212017-02-15 17:59:46 +010070
71{%- for module in system.kernel.get('modules', []) %}
72
73linux_kernel_module_{{ module }}:
74 kmod.present:
75 - name: {{ module }}
76 - persist: true
77
78{%- endfor %}
79
Dmitry Teselkin809834c2018-08-13 19:14:42 +030080{%- if system.kernel.module is defined %}
81
82modprobe_d_directory:
83 file.directory:
84 - name: /etc/modprobe.d
85 - user: root
86 - group: root
87 - mode: 755
88
89 {%- for module_name in system.kernel.module %}
teoyaomiqui32b1f7c2017-05-24 14:36:09 +030090
91/etc/modprobe.d/{{ module_name }}.conf:
92 file.managed:
93 - user: root
94 - group: root
95 - mode: 0644
96 - template: jinja
97 - source: salt://linux/files/modprobe.conf.jinja
98 - defaults:
teoyaomiqui32b1f7c2017-05-24 14:36:09 +030099 module_name: {{ module_name }}
Dmitry Teselkin809834c2018-08-13 19:14:42 +0300100 - require:
101 - file: modprobe_d_directory
teoyaomiqui32b1f7c2017-05-24 14:36:09 +0300102
Dmitry Teselkin809834c2018-08-13 19:14:42 +0300103 {%- endfor %}
104{%- endif %}
teoyaomiqui32b1f7c2017-05-24 14:36:09 +0300105
Oleg Bondarevfb4f1c62019-03-12 17:00:32 +0400106{%- set cur_kernel = salt['grains.get']('kernelrelease') %}
107
Michael Fladischer1e41e302018-02-23 18:31:25 +0100108{%- for sysctl_name, sysctl_value in system.kernel.get('sysctl', {}).items() %}
Jakub Pavlik32c2cb02016-01-29 12:45:29 +0100109
Oleg Bondarevfb4f1c62019-03-12 17:00:32 +0400110 {%- if not sysctl_name in sysctl_min_kernel or salt['pkg.version_cmp'](cur_kernel, sysctl_min_kernel[sysctl_name]) >= 0 %}
111
Filip Pytlounf27fa812016-02-18 18:16:17 +0100112linux_kernel_{{ sysctl_name }}:
Jakub Pavlik32c2cb02016-01-29 12:45:29 +0100113 sysctl.present:
Filip Pytlounf27fa812016-02-18 18:16:17 +0100114 - name: {{ sysctl_name }}
Jakub Pavlik32c2cb02016-01-29 12:45:29 +0100115 - value: {{ sysctl_value }}
116
Oleg Bondarevfb4f1c62019-03-12 17:00:32 +0400117 {%- endif %}
118
Jakub Pavlik32c2cb02016-01-29 12:45:29 +0100119{%- endfor %}
120
Filip Pytlounf5383a42015-10-06 16:28:32 +0200121{%- endif %}
122
123{%- endif %}