diff --git a/releasenotes/notes/tripleo-module-load-80f7fd8c8dd6a81e.yaml b/releasenotes/notes/tripleo-module-load-80f7fd8c8dd6a81e.yaml new file mode 100644 index 000000000..3fa0c1db4 --- /dev/null +++ b/releasenotes/notes/tripleo-module-load-80f7fd8c8dd6a81e.yaml @@ -0,0 +1,3 @@ +--- +features: + - Loads and persist kernel modules from the host directly. diff --git a/roles/tripleo-module-load/defaults/main.yaml b/roles/tripleo-module-load/defaults/main.yaml new file mode 100644 index 000000000..25f617838 --- /dev/null +++ b/roles/tripleo-module-load/defaults/main.yaml @@ -0,0 +1,7 @@ +--- +# Module name as a list of hashes: +# modules: +# - { name: foo, params: 'bar baz' } +# - { name: starwars } +# - { name: starwars, state: absent } +modules: [] diff --git a/roles/tripleo-module-load/tasks/main.yaml b/roles/tripleo-module-load/tasks/main.yaml new file mode 100644 index 000000000..286ec73ed --- /dev/null +++ b/roles/tripleo-module-load/tasks/main.yaml @@ -0,0 +1,52 @@ +--- +# Allow to get a clean way to load and persist kernel modules + +- name: Check whether /etc/modules-load.d exists + stat: + path: /etc/modules-load.d + register: modules_load_stat + +- name: "Load modules" + become: true + modprobe: + name: "{{ item.name }}" + params: "{{ item.params | default(omit) }}" + state: "{{ item.state | default('present') }}" + loop: "{{ modules }}" + loop_control: + label: "{{ item.name }}" + +- name: "Persist modules via modules-load.d" + become: true + template: + dest: "/etc/modules-load.d/{{ item.name }}.conf" + src: module-load.conf.j2 + loop: "{{ modules }}" + loop_control: + label: "{{ item.name }}" + when: + - modules_load_stat.stat.exists + - (item.state | default('present')) == 'present' + +- name: "Drop module persistence" + become: true + file: + path: "/etc/modules-load.d/{{ item.name }}.conf" + state: absent + loop: "{{ modules }}" + loop_control: + label: "{{ item.name }}" + when: + - modules_load_stat.stat.exists + - (item.state | default('present')) == 'absent' + +- name: "Set modules persistence via /etc/modules" + become: true + lineinfile: + dest: /etc/modules + line: "{{ item.name }} {{ item.params | default('') }}" + state: "{{ item.state | default('present') }}" + loop: "{{ modules }}" + loop_control: + label: "{{ item.name }}" + when: not modules_load_stat.stat.exists diff --git a/roles/tripleo-module-load/templates/module-load.conf.j2 b/roles/tripleo-module-load/templates/module-load.conf.j2 new file mode 100644 index 000000000..21808b95f --- /dev/null +++ b/roles/tripleo-module-load/templates/module-load.conf.j2 @@ -0,0 +1,2 @@ +# {{ ansible_managed }} +{{ item.name }} {{ item.params |default('') }}