This refactoring ensures that the log2ram size calculation always results in an integer value, enhancing precision. Additionally, it improves code readability by simplifying complex expressions.
109 lines
3.1 KiB
YAML
109 lines
3.1 KiB
YAML
---
|
|
- name: ram | Ensure Debian family
|
|
ansible.builtin.assert:
|
|
that: ansible_os_family == "Debian"
|
|
fail_msg: "This role only supports Debian/Proxmox systems."
|
|
|
|
- name: ram | Gather only memory fact
|
|
ansible.builtin.setup:
|
|
filter: ansible_memtotal_mb
|
|
|
|
- name: ram | Calculate log2ram size
|
|
ansible.builtin.set_fact:
|
|
log2ram_size_mb: >-
|
|
{{
|
|
[
|
|
log2ram_min_size_mb | int,
|
|
[
|
|
(ansible_memtotal_mb | int * log2ram_ram_percent | int / 100) | int,
|
|
log2ram_max_size_mb | int
|
|
] | min
|
|
] | max
|
|
}}
|
|
|
|
- name: ram | Convert size to M format
|
|
ansible.builtin.set_fact:
|
|
log2ram_size: "{{ log2ram_size_mb }}M"
|
|
|
|
# - name: Install log2ram
|
|
|
|
- name: ram | Install dependencies
|
|
ansible.builtin.apt:
|
|
name:
|
|
- rsync
|
|
- curl
|
|
- ca-certificates
|
|
state: present
|
|
update_cache: yes
|
|
cache_valid_time: 3600 # Only run apt-get update if it hasn't run in the last hour
|
|
|
|
- name: ram | Download log2ram
|
|
ansible.builtin.get_url:
|
|
url: https://github.com/azlux/log2ram/archive/refs/heads/master.tar.gz
|
|
dest: /tmp/log2ram.tar.gz
|
|
# Adding a checksum ensures we only 'change' if the file is new/updated
|
|
checksum: "sha256:https://github.com/azlux/log2ram/archive/refs/heads/master.tar.gz.sha256"
|
|
mode: '0644'
|
|
register: download_archive
|
|
|
|
- name: ram | Logic to extract and install log2ram
|
|
when: download_archive.changed # noqa: no-handler
|
|
block:
|
|
- name: ram | Extract log2ram
|
|
ansible.builtin.unarchive:
|
|
src: "/tmp/log2ram.tar.gz"
|
|
dest: "/tmp"
|
|
remote_src: yes
|
|
|
|
- name: ram | Install log2ram
|
|
ansible.builtin.command: bash install.sh
|
|
args:
|
|
chdir: "/tmp/log2ram-master"
|
|
# 'creates' makes the command idempotent by checking for the binary
|
|
creates: /usr/local/bin/log2ram
|
|
notify: Restart log2ram
|
|
|
|
# Configure log2ram
|
|
|
|
- name: ram | Configure log2ram settings
|
|
ansible.builtin.lineinfile:
|
|
path: /etc/log2ram.conf
|
|
regexp: "{{ item.regexp }}"
|
|
line: "{{ item.line }}"
|
|
backup: yes
|
|
loop:
|
|
- { regexp: '^#?SIZE=', line: "SIZE={{ log2ram_size }}" }
|
|
- { regexp: '^#?USE_RSYNC=', line: "USE_RSYNC=true" }
|
|
notify: Restart log2ram
|
|
|
|
# Keep journald fully in RAM
|
|
|
|
- name: ram | Configure journald storage volatile
|
|
ansible.builtin.lineinfile:
|
|
path: /etc/systemd/journald.conf
|
|
regexp: '^#?Storage='
|
|
line: "Storage=volatile"
|
|
backup: yes
|
|
notify: Restart journald
|
|
|
|
- name: ram | Limit journald runtime size
|
|
ansible.builtin.lineinfile:
|
|
path: /etc/systemd/journald.conf
|
|
regexp: '^#?RuntimeMaxUse='
|
|
line: "RuntimeMaxUse={{ journald_runtime_max_use }}"
|
|
notify: Restart journald
|
|
|
|
# Enable log2ram on boot
|
|
|
|
- name: ram | Configure memory tuning sysctl
|
|
ansible.posix.sysctl:
|
|
name: "{{ item.name }}"
|
|
value: "{{ item.value }}"
|
|
state: present
|
|
sysctl_file: /etc/sysctl.d/99-proxmox-memory.conf
|
|
reload: yes
|
|
loop:
|
|
- { name: 'vm.swappiness', value: "{{ vm_swappiness }}" }
|
|
- { name: 'vm.dirty_ratio', value: "{{ vm_dirty_ratio }}" }
|
|
- { name: 'vm.dirty_background_ratio', value: "{{ vm_dirty_background_ratio }}" }
|