diff options
| -rw-r--r-- | galaxy.yml | 2 | ||||
| -rw-r--r-- | roles/kernel/README.md | 5 | ||||
| -rw-r--r-- | roles/kernel/defaults/main.yml | 7 | ||||
| -rw-r--r-- | roles/kernel/handlers/main.yml | 4 | ||||
| -rw-r--r-- | roles/kernel/tasks/grub.yml | 33 | ||||
| -rw-r--r-- | roles/kernel/tasks/main.yml | 38 | ||||
| -rw-r--r-- | roles/kernel/tasks/systemd-boot.yml | 53 | ||||
| -rw-r--r-- | roles/kernel/templates/loader.conf | 27 | ||||
| -rw-r--r-- | roles/microcode/README.md | 1 | ||||
| -rw-r--r-- | roles/microcode/handlers/main.yml | 4 | ||||
| -rw-r--r-- | roles/microcode/tasks/main.yml | 29 |
11 files changed, 202 insertions, 1 deletions
@@ -1,6 +1,6 @@ namespace: tensin name: infra -version: 8.1.0 +version: 8.2.0 description: Some common Ansible roles used by me to manage things repository: https://github.com/egor-tensin/infra-ansible readme: README.md diff --git a/roles/kernel/README.md b/roles/kernel/README.md new file mode 100644 index 0000000..797cf58 --- /dev/null +++ b/roles/kernel/README.md @@ -0,0 +1,5 @@ +This role is Arch Linux-specific. + +* Install latest & LTS kernels. +* Configure systemd-boot, if used. +* Set default boot entry (for GRUB & systemd-boot only). diff --git a/roles/kernel/defaults/main.yml b/roles/kernel/defaults/main.yml new file mode 100644 index 0000000..9ec6271 --- /dev/null +++ b/roles/kernel/defaults/main.yml @@ -0,0 +1,7 @@ +# Must be one of 'lts', 'latest' +kernel_flavour: latest +# Must be one of 'grub', 'systemd-boot' +#kernel_bootloader: + +# Remove entries created by archinstall: +kernel_systemd_boot_purge_archinstall: true diff --git a/roles/kernel/handlers/main.yml b/roles/kernel/handlers/main.yml new file mode 100644 index 0000000..bc0fd20 --- /dev/null +++ b/roles/kernel/handlers/main.yml @@ -0,0 +1,4 @@ +- name: Reboot + listen: bootloader_configured + become: true + ansible.builtin.reboot: diff --git a/roles/kernel/tasks/grub.yml b/roles/kernel/tasks/grub.yml new file mode 100644 index 0000000..bcf83e2 --- /dev/null +++ b/roles/kernel/tasks/grub.yml @@ -0,0 +1,33 @@ +- name: Set default GRUB entry + vars: + kernel_image: | + {{ + { + 'latest': '/boot/vmlinuz-linux', + 'lts': '/boot/vmlinuz-linux-lts', + }[kernel_flavour] + }} + become: true + community.general.ini_file: + create: false + ignore_spaces: true + no_extra_spaces: true + path: /etc/default/grub + option: GRUB_TOP_LEVEL + value: '{{ kernel_image }}' + +- name: Generate GRUB config + become: true + ansible.builtin.command: grub-mkconfig + changed_when: false + register: kernel_mkconfig + +- name: Update grub.cfg + become: true + ansible.builtin.copy: + content: '{{ kernel_mkconfig.stdout }}' + dest: /boot/grub/grub.cfg + owner: root + group: root + mode: '0755' + notify: bootloader_configured diff --git a/roles/kernel/tasks/main.yml b/roles/kernel/tasks/main.yml new file mode 100644 index 0000000..923cb98 --- /dev/null +++ b/roles/kernel/tasks/main.yml @@ -0,0 +1,38 @@ +- name: Get distro + ansible.builtin.setup: + gather_subset: + - distribution + +- name: Fail unless Arch Linux + when: | + ansible_facts['distribution'] != 'Archlinux' + ansible.builtin.fail: + msg: Only works on Arch Linux + +- name: Fail if wrong flavour + when: | + kernel_flavour not in ['latest', 'lts'] + ansible.builtin.fail: + msg: Kernel flavour must be either 'latest' or 'lts' + +- name: Install kernels + become: true + ansible.builtin.package: + name: + - linux + - linux-headers + - linux-lts + - linux-lts-headers + +- name: Fail if invalid bootloader + when: | + kernel_bootloader not in ['grub', 'systemd-boot'] + ansible.builtin.fail: + msg: | + Supported bootloaders are: 'grub', 'systemd-boot' + +- name: 'Set up for bootloader {{ kernel_bootloader }}' + ansible.builtin.include_tasks: '{{ kernel_bootloader }}.yml' + +- name: Run handlers if neccessary + ansible.builtin.meta: flush_handlers diff --git a/roles/kernel/tasks/systemd-boot.yml b/roles/kernel/tasks/systemd-boot.yml new file mode 100644 index 0000000..2f40163 --- /dev/null +++ b/roles/kernel/tasks/systemd-boot.yml @@ -0,0 +1,53 @@ +- name: Get default command line options + ansible.builtin.setup: + gather_subset: + - cmdline + +- name: Current command line + ansible.builtin.debug: + var: | + ansible_facts['cmdline'] + +- name: Validate command line + loop: + - root + - rw + when: item not in ansible_facts['cmdline'] + ansible.builtin.fail: + msg: + Expected option {{ item }} was not found in the current config! + +- name: Generate bootloader entries + loop: + - latest + - lts + loop_control: + loop_var: flavour + become: true + ansible.builtin.template: + src: loader.conf + dest: '/boot/loader/entries/{{ flavour }}.conf' + owner: root + group: root + mode: '0600' + notify: bootloader_configured + +- name: Set default entry + become: true + ansible.builtin.lineinfile: + path: /boot/loader/loader.conf + regexp: '^default ' + line: 'default {{ kernel_flavour }}.conf' + owner: root + group: root + mode: '0600' + notify: bootloader_configured + +- name: Remove archinstall entries + when: kernel_systemd_boot_purge_archinstall + become: true + community.general.file_remove: + path: /boot/loader/entries + pattern: '\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}_linux.conf' + use_regex: true + notify: bootloader_configured diff --git a/roles/kernel/templates/loader.conf b/roles/kernel/templates/loader.conf new file mode 100644 index 0000000..de19558 --- /dev/null +++ b/roles/kernel/templates/loader.conf @@ -0,0 +1,27 @@ +{{ ansible_managed | comment }} + +{% set title = { + 'latest': 'Linux (latest)', + 'lts': 'Linux (LTS)', +}[flavour] %} +{% set vmlinuz = { + 'latest': '/vmlinuz-linux', + 'lts': '/vmlinuz-linux-lts', +}[flavour] %} +{% set initrd = { + 'latest': '/initramfs-linux.img', + 'lts': '/initramfs-linux-lts.img', +}[flavour] %} +title {{ title }} +linux {{ vmlinuz }} +initrd {{ initrd }} +{% set common_options = {'quiet': true} %} +{% set options = common_options | ansible.builtin.combine(ansible_facts['cmdline']) %} +options +{%- for key in options if key != 'initrd' -%} + {%- if options[key] is boolean %} + {{ key }} + {%- else %} + {{ key }}={{ options[key] }} + {%- endif -%} +{%- endfor -%} diff --git a/roles/microcode/README.md b/roles/microcode/README.md new file mode 100644 index 0000000..d37ad8d --- /dev/null +++ b/roles/microcode/README.md @@ -0,0 +1 @@ +Install the CPU microcode package on Arch Linux. diff --git a/roles/microcode/handlers/main.yml b/roles/microcode/handlers/main.yml new file mode 100644 index 0000000..e7990c7 --- /dev/null +++ b/roles/microcode/handlers/main.yml @@ -0,0 +1,4 @@ +- name: Reboot + listen: microcode_installed + become: true + ansible.builtin.reboot: diff --git a/roles/microcode/tasks/main.yml b/roles/microcode/tasks/main.yml new file mode 100644 index 0000000..26ffd5f --- /dev/null +++ b/roles/microcode/tasks/main.yml @@ -0,0 +1,29 @@ +- name: Get host processor + ansible.builtin.setup: + gather_subset: + - processor + - distribution + +- name: Fail unless Arch Linux + when: | + ansible_facts['distribution'] != 'Archlinux' + ansible.builtin.fail: + msg: Only works on Arch Linux + +- name: Install microcode package + when: | + 'GenuineIntel' in ansible_facts["processor"] + become: true + ansible.builtin.package: + name: intel-ucode + state: present + notify: microcode_installed + +- name: Install AMD microcode package + when: | + 'AuthenticAMD' in ansible_facts["processor"] + become: true + ansible.builtin.package: + name: amd-ucode + state: present + notify: microcode_installed |
