refactor(partitioning): split monolithic main.yml into focused task files
This commit is contained in:
192
roles/partitioning/tasks/_create_lvm.yml
Normal file
192
roles/partitioning/tasks/_create_lvm.yml
Normal file
@@ -0,0 +1,192 @@
|
||||
---
|
||||
# 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, 4)
|
||||
# - 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 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), 4] | 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 | 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 | 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
|
||||
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 }}"
|
||||
Reference in New Issue
Block a user