193 lines
6.6 KiB
YAML
193 lines
6.6 KiB
YAML
---
|
|
# LVM Sizing Algorithm
|
|
# ====================
|
|
# Sizes are computed from disk_size_gb, memory_mb, and feature flags.
|
|
#
|
|
# Swap sizing:
|
|
# - RAM >= 16 GB → swap = RAM/2 (in GB)
|
|
# - RAM < 16 GB → swap = max(RAM_GB, 2)
|
|
# - Capped to: min(target, 4 + max(disk - overhead, 0))
|
|
# - Further capped to: max available after subtracting reserved + CIS + extent reserve + 4 GB buffer
|
|
#
|
|
# Root sizing:
|
|
# - Full-disk mode (default): disk - reserved - swap - extent_reserve - (CIS volumes if enabled)
|
|
# - Partial mode: tiered — <4 GB available → 4 GB, 4-12 GB → all available, >12 GB → 40% of disk
|
|
#
|
|
# CIS volumes (only when CIS enabled):
|
|
# - /home: max(min(home_raw, home_max), home_min) where home_raw = (disk - overhead) * 10%
|
|
# - /var: 2 GB, /var/log: 2 GB, /var/log/audit: 1.5 GB
|
|
#
|
|
# Extent reserve: 10 extents * 4 MiB = ~0.04 GB (prevents VG overflow)
|
|
|
|
- name: Create LVM logical volumes
|
|
when: system_cfg.filesystem != 'btrfs'
|
|
block:
|
|
- name: Create LVM volume group
|
|
community.general.lvg:
|
|
vg: "{{ partitioning_vg_name }}"
|
|
pvs: "{{ partitioning_root_device }}"
|
|
|
|
- name: Create LVM logical volumes
|
|
when:
|
|
- system_cfg.features.cis.enabled | bool or item.lv not in ['home', 'var', 'var_log', 'var_log_audit']
|
|
- system_cfg.features.swap.enabled | bool or item.lv != 'swap'
|
|
vars:
|
|
partitioning_lvm_extent_reserve_count: 10
|
|
partitioning_lvm_extent_size_mib: 4
|
|
partitioning_lvm_extent_reserve_gb: >-
|
|
{{
|
|
(
|
|
(partitioning_lvm_extent_reserve_count | float)
|
|
* (partitioning_lvm_extent_size_mib | float)
|
|
/ 1024
|
|
) | round(2, 'ceil')
|
|
}}
|
|
partitioning_lvm_swap_target_gb: >-
|
|
{{
|
|
(
|
|
((partitioning_memory_mb | float / 1024) >= 16.0)
|
|
| ternary(
|
|
(partitioning_memory_mb | float / 2048),
|
|
[(partitioning_memory_mb | float / 1024), 2] | max | float
|
|
)
|
|
)
|
|
if system_cfg.features.swap.enabled | bool
|
|
else 0
|
|
}}
|
|
partitioning_lvm_swap_cap_gb: >-
|
|
{{
|
|
(
|
|
4
|
|
+ [
|
|
(partitioning_disk_size_gb | float) - (partitioning_disk_overhead_gb | float),
|
|
0
|
|
] | max
|
|
)
|
|
if system_cfg.features.swap.enabled | bool
|
|
else 0
|
|
}}
|
|
partitioning_lvm_swap_target_limited_gb: >-
|
|
{{
|
|
(
|
|
[
|
|
partitioning_lvm_swap_target_gb,
|
|
partitioning_lvm_swap_cap_gb
|
|
] | min
|
|
)
|
|
if system_cfg.features.swap.enabled | bool
|
|
else 0
|
|
}}
|
|
partitioning_lvm_swap_max_gb: >-
|
|
{{
|
|
(
|
|
[
|
|
(
|
|
(partitioning_disk_size_gb | float)
|
|
- (partitioning_reserved_gb | float)
|
|
- (system_cfg.features.cis.enabled | bool | ternary(partitioning_cis_reserved_gb | float, 0))
|
|
- partitioning_lvm_extent_reserve_gb
|
|
- 4
|
|
),
|
|
0
|
|
] | max
|
|
)
|
|
if system_cfg.features.swap.enabled | bool
|
|
else 0
|
|
}}
|
|
partitioning_lvm_available_gb: >-
|
|
{{
|
|
(
|
|
(partitioning_disk_size_gb | float)
|
|
- (partitioning_reserved_gb | float)
|
|
- (system_cfg.features.cis.enabled | bool | ternary(partitioning_cis_reserved_gb | float, 0))
|
|
- partitioning_lvm_extent_reserve_gb
|
|
- partitioning_lvm_swap_target_limited_gb
|
|
) | float
|
|
}}
|
|
partitioning_lvm_home_raw_gb: >-
|
|
{{
|
|
((partitioning_disk_size_gb | float) - (partitioning_disk_overhead_gb | float))
|
|
* (partitioning_home_allocation_pct | float)
|
|
}}
|
|
partitioning_lvm_home_gb: >-
|
|
{{
|
|
[
|
|
[(partitioning_lvm_home_raw_gb | float), (partitioning_home_min_gb | float)] | max,
|
|
(partitioning_home_max_gb | float)
|
|
] | min
|
|
}}
|
|
partitioning_lvm_root_default_gb: >-
|
|
{{
|
|
[
|
|
(
|
|
((partitioning_lvm_available_gb | float) < 4)
|
|
| ternary(
|
|
4,
|
|
(
|
|
((partitioning_lvm_available_gb | float) > 12)
|
|
| ternary(
|
|
((partitioning_disk_size_gb | float) * 0.4)
|
|
| round(0, 'ceil'),
|
|
partitioning_lvm_available_gb
|
|
)
|
|
)
|
|
)
|
|
),
|
|
4
|
|
] | max
|
|
}}
|
|
partitioning_lvm_swap_gb: >-
|
|
{{
|
|
(
|
|
[
|
|
partitioning_lvm_swap_target_limited_gb,
|
|
partitioning_lvm_swap_max_gb
|
|
] | min | round(2, 'floor')
|
|
)
|
|
if system_cfg.features.swap.enabled | bool
|
|
else 0
|
|
}}
|
|
partitioning_lvm_root_full_gb: >-
|
|
{{
|
|
[
|
|
(
|
|
(partitioning_disk_size_gb | float)
|
|
- (partitioning_reserved_gb | float)
|
|
- (partitioning_lvm_swap_gb | float)
|
|
- partitioning_lvm_extent_reserve_gb
|
|
- (
|
|
(partitioning_lvm_home_gb | float)
|
|
+ (partitioning_lvm_var_gb | float)
|
|
+ (partitioning_lvm_var_log_gb | float)
|
|
+ (partitioning_lvm_var_log_audit_gb | float)
|
|
if system_cfg.features.cis.enabled | bool
|
|
else 0
|
|
)
|
|
),
|
|
4
|
|
] | max | round(2, 'floor')
|
|
}}
|
|
partitioning_lvm_root_gb: >-
|
|
{{
|
|
partitioning_lvm_root_full_gb
|
|
if partitioning_use_full_disk | bool
|
|
else partitioning_lvm_root_default_gb
|
|
}}
|
|
community.general.lvol:
|
|
vg: "{{ partitioning_vg_name }}"
|
|
lv: "{{ item.lv }}"
|
|
size: "{{ item.size }}"
|
|
state: present
|
|
loop:
|
|
- lv: root
|
|
size: "{{ partitioning_lvm_root_gb | string + 'G' }}"
|
|
- lv: swap
|
|
size: "{{ partitioning_lvm_swap_gb | string + 'G' }}"
|
|
- lv: home
|
|
size: "{{ partitioning_lvm_home_gb | string + 'G' }}"
|
|
- { lv: var, size: "{{ partitioning_lvm_var_gb }}G" }
|
|
- { lv: var_log, size: "{{ partitioning_lvm_var_log_gb }}G" }
|
|
- { lv: var_log_audit, size: "{{ partitioning_lvm_var_log_audit_gb }}G" }
|
|
loop_control:
|
|
label: "{{ item.lv }}"
|