Filip Pytloun | f5383a4 | 2015-10-06 16:28:32 +0200 | [diff] [blame] | 1 | {%- from "linux/map.jinja" import system with context %} |
Oleg Bondarev | fb4f1c6 | 2019-03-12 17:00:32 +0400 | [diff] [blame] | 2 | {%- from "linux/map.jinja" import sysctl_min_kernel %} |
Filip Pytloun | f5383a4 | 2015-10-06 16:28:32 +0200 | [diff] [blame] | 3 | {%- if system.enabled %} |
| 4 | |
| 5 | {%- if system.kernel is defined %} |
| 6 | |
Michael Polenchuk | ebf5552 | 2018-01-25 13:22:39 +0400 | [diff] [blame] | 7 | {%- 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 Pavlik | 6c9ead1 | 2017-02-16 21:53:13 +0100 | [diff] [blame] | 11 | |
| 12 | include: |
| 13 | - linux.system.grub |
| 14 | |
Dmitry Teselkin | f1c123c | 2018-09-28 16:32:25 +0300 | [diff] [blame] | 15 | {%- if kernel_boot_opts %} |
Michael Polenchuk | ebf5552 | 2018-01-25 13:22:39 +0400 | [diff] [blame] | 16 | /etc/default/grub.d/99-custom-settings.cfg: |
Jakub Pavlik | 6c9ead1 | 2017-02-16 21:53:13 +0100 | [diff] [blame] | 17 | file.managed: |
Michael Polenchuk | ebf5552 | 2018-01-25 13:22:39 +0400 | [diff] [blame] | 18 | - contents: 'GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT {{ kernel_boot_opts|join(' ') }}"' |
Simon Schneider | 0225666 | 2017-12-07 12:17:22 +0100 | [diff] [blame] | 19 | - 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 Schneider | 0225666 | 2017-12-07 12:17:22 +0100 | [diff] [blame] | 24 | {%- endif %} |
| 25 | {%- endif %} |
| 26 | |
Denis Egorenko | 567aa20 | 2019-11-06 14:02:00 +0400 | [diff] [blame^] | 27 | {%- if system.kernel.version is defined and grains.get('os_family') == 'Debian' %} |
Filip Pytloun | f5383a4 | 2015-10-06 16:28:32 +0200 | [diff] [blame] | 28 | |
| 29 | linux_kernel_package: |
| 30 | pkg.installed: |
Bruno Binet | e3c04fd | 2017-02-15 17:53:19 +0100 | [diff] [blame] | 31 | - pkgs: |
Filip Pytloun | 281034a | 2016-01-04 18:06:22 +0100 | [diff] [blame] | 32 | - 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 Pavlik | d5642b6 | 2016-01-05 14:26:36 +0100 | [diff] [blame] | 37 | - linux-image-extra-{{ system.kernel.version }}-{{ system.kernel.type|default('generic') }} |
Filip Pytloun | 281034a | 2016-01-04 18:06:22 +0100 | [diff] [blame] | 38 | {%- endif %} |
Denis Egorenko | 567aa20 | 2019-11-06 14:02:00 +0400 | [diff] [blame^] | 39 | {%- 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 Pytloun | f5383a4 | 2015-10-06 16:28:32 +0200 | [diff] [blame] | 52 | - refresh: true |
| 53 | |
Denis Egorenko | 567aa20 | 2019-11-06 14:02:00 +0400 | [diff] [blame^] | 54 | |
| 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 Pytloun | 281034a | 2016-01-04 18:06:22 +0100 | [diff] [blame] | 61 | # Not very Salt-ish.. :-( |
| 62 | linux_kernel_old_absent: |
| 63 | cmd.wait: |
Denis Egorenko | 567aa20 | 2019-11-06 14:02:00 +0400 | [diff] [blame^] | 64 | - 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 Pytloun | 281034a | 2016-01-04 18:06:22 +0100 | [diff] [blame] | 65 | - watch: |
| 66 | - pkg: linux_kernel_package |
| 67 | |
Filip Pytloun | f5383a4 | 2015-10-06 16:28:32 +0200 | [diff] [blame] | 68 | {%- endif %} |
| 69 | |
Tomáš Kukrál | ba35b21 | 2017-02-15 17:59:46 +0100 | [diff] [blame] | 70 | |
| 71 | {%- for module in system.kernel.get('modules', []) %} |
| 72 | |
| 73 | linux_kernel_module_{{ module }}: |
| 74 | kmod.present: |
| 75 | - name: {{ module }} |
| 76 | - persist: true |
| 77 | |
| 78 | {%- endfor %} |
| 79 | |
Dmitry Teselkin | 809834c | 2018-08-13 19:14:42 +0300 | [diff] [blame] | 80 | {%- if system.kernel.module is defined %} |
| 81 | |
| 82 | modprobe_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 %} |
teoyaomiqui | 32b1f7c | 2017-05-24 14:36:09 +0300 | [diff] [blame] | 90 | |
| 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: |
teoyaomiqui | 32b1f7c | 2017-05-24 14:36:09 +0300 | [diff] [blame] | 99 | module_name: {{ module_name }} |
Dmitry Teselkin | 809834c | 2018-08-13 19:14:42 +0300 | [diff] [blame] | 100 | - require: |
| 101 | - file: modprobe_d_directory |
teoyaomiqui | 32b1f7c | 2017-05-24 14:36:09 +0300 | [diff] [blame] | 102 | |
Dmitry Teselkin | 809834c | 2018-08-13 19:14:42 +0300 | [diff] [blame] | 103 | {%- endfor %} |
| 104 | {%- endif %} |
teoyaomiqui | 32b1f7c | 2017-05-24 14:36:09 +0300 | [diff] [blame] | 105 | |
Oleg Bondarev | fb4f1c6 | 2019-03-12 17:00:32 +0400 | [diff] [blame] | 106 | {%- set cur_kernel = salt['grains.get']('kernelrelease') %} |
| 107 | |
Michael Fladischer | 1e41e30 | 2018-02-23 18:31:25 +0100 | [diff] [blame] | 108 | {%- for sysctl_name, sysctl_value in system.kernel.get('sysctl', {}).items() %} |
Jakub Pavlik | 32c2cb0 | 2016-01-29 12:45:29 +0100 | [diff] [blame] | 109 | |
Oleg Bondarev | fb4f1c6 | 2019-03-12 17:00:32 +0400 | [diff] [blame] | 110 | {%- if not sysctl_name in sysctl_min_kernel or salt['pkg.version_cmp'](cur_kernel, sysctl_min_kernel[sysctl_name]) >= 0 %} |
| 111 | |
Filip Pytloun | f27fa81 | 2016-02-18 18:16:17 +0100 | [diff] [blame] | 112 | linux_kernel_{{ sysctl_name }}: |
Jakub Pavlik | 32c2cb0 | 2016-01-29 12:45:29 +0100 | [diff] [blame] | 113 | sysctl.present: |
Filip Pytloun | f27fa81 | 2016-02-18 18:16:17 +0100 | [diff] [blame] | 114 | - name: {{ sysctl_name }} |
Jakub Pavlik | 32c2cb0 | 2016-01-29 12:45:29 +0100 | [diff] [blame] | 115 | - value: {{ sysctl_value }} |
| 116 | |
Oleg Bondarev | fb4f1c6 | 2019-03-12 17:00:32 +0400 | [diff] [blame] | 117 | {%- endif %} |
| 118 | |
Jakub Pavlik | 32c2cb0 | 2016-01-29 12:45:29 +0100 | [diff] [blame] | 119 | {%- endfor %} |
| 120 | |
Filip Pytloun | f5383a4 | 2015-10-06 16:28:32 +0200 | [diff] [blame] | 121 | {%- endif %} |
| 122 | |
| 123 | {%- endif %} |