mirror of
https://github.com/ansible-collections/community.general.git
synced 2026-05-07 22:02:50 +00:00
lvol: fix thin-pool creation with percentage size (#11925)
* fix(lvol): use --extents (-l) for thin-pool creation with percentage size Fixes #11923 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * chore(lvol): add changelog fragment for #11925 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * test(lvol): add integration tests for thin-pool creation with percentage sizes Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * test(lvol): use extent-aligned size for thin-pool absolute-size idempotency test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * test(lvol): reduce thin-pool sizes to leave space for test_pvs.yml Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * test(lvol): add shrink=false to thin-pool absolute-size idempotency check Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * test(lvol): add shrink: false to thin volume idempotency test LVM reports thin volume size slightly above requested (metadata overhead), triggering spurious shrink attempts. Disable shrink for idempotency checks to avoid false failures. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,2 @@
|
|||||||
|
bugfixes:
|
||||||
|
- lvol - fix thin-pool creation when ``size`` is a percentage (https://github.com/ansible-collections/community.general/issues/11923, https://github.com/ansible-collections/community.general/pull/11925).
|
||||||
@@ -505,15 +505,26 @@ def main():
|
|||||||
vg=[f"{vg}/{thinpool}"],
|
vg=[f"{vg}/{thinpool}"],
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
with lvcreate("test yes size_L opts thin vg pvs") as ctx:
|
if size_opt == "l":
|
||||||
rc, dummy, err = ctx.run(
|
with lvcreate("test yes size_l opts thin vg pvs") as ctx:
|
||||||
test=module.check_mode,
|
rc, dummy, err = ctx.run(
|
||||||
yes=use_yes,
|
test=module.check_mode,
|
||||||
size_L=size_value,
|
yes=use_yes,
|
||||||
opts=opts,
|
size_l=size_value,
|
||||||
vg=[f"{vg}/{thinpool}"],
|
opts=opts,
|
||||||
pvs=pvs,
|
vg=[f"{vg}/{thinpool}"],
|
||||||
)
|
pvs=pvs,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
with lvcreate("test yes size_L opts thin vg pvs") as ctx:
|
||||||
|
rc, dummy, err = ctx.run(
|
||||||
|
test=module.check_mode,
|
||||||
|
yes=use_yes,
|
||||||
|
size_L=size_value,
|
||||||
|
opts=opts,
|
||||||
|
vg=[f"{vg}/{thinpool}"],
|
||||||
|
pvs=pvs,
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
if size_opt == "l":
|
if size_opt == "l":
|
||||||
with lvcreate("test yes lv size_l opts vg pvs") as ctx:
|
with lvcreate("test yes lv size_l opts vg pvs") as ctx:
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
block:
|
block:
|
||||||
- import_tasks: setup.yml
|
- import_tasks: setup.yml
|
||||||
|
|
||||||
|
- import_tasks: test_thinpool.yml
|
||||||
|
|
||||||
- import_tasks: test_pvs.yml
|
- import_tasks: test_pvs.yml
|
||||||
|
|
||||||
always:
|
always:
|
||||||
|
|||||||
101
tests/integration/targets/lvol/tasks/test_thinpool.yml
Normal file
101
tests/integration/targets/lvol/tasks/test_thinpool.yml
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
---
|
||||||
|
# Copyright (c) Ansible Project
|
||||||
|
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
# Regression tests for thin-pool creation with percentage-based sizes (GH-11923)
|
||||||
|
|
||||||
|
- name: Create thin pool with percentage of VG size
|
||||||
|
community.general.lvol:
|
||||||
|
vg: testvg1
|
||||||
|
thinpool: testthinpool1
|
||||||
|
size: 20%VG
|
||||||
|
register: thinpool_pct_vg_create
|
||||||
|
|
||||||
|
- name: Assert thin pool with percentage of VG created
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- thinpool_pct_vg_create is success
|
||||||
|
- thinpool_pct_vg_create is changed
|
||||||
|
|
||||||
|
- name: Create thin pool with percentage of VG size - idempotency
|
||||||
|
community.general.lvol:
|
||||||
|
vg: testvg1
|
||||||
|
thinpool: testthinpool1
|
||||||
|
size: 20%VG
|
||||||
|
register: thinpool_pct_vg_idempotent
|
||||||
|
|
||||||
|
- name: Assert thin pool with percentage of VG creation is idempotent
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- thinpool_pct_vg_idempotent is success
|
||||||
|
- thinpool_pct_vg_idempotent is not changed
|
||||||
|
|
||||||
|
- name: Create thin pool with percentage of free space
|
||||||
|
community.general.lvol:
|
||||||
|
vg: testvg2
|
||||||
|
thinpool: testthinpool2
|
||||||
|
size: 20%FREE
|
||||||
|
register: thinpool_pct_free_create
|
||||||
|
|
||||||
|
- name: Assert thin pool with percentage of free space created
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- thinpool_pct_free_create is success
|
||||||
|
- thinpool_pct_free_create is changed
|
||||||
|
|
||||||
|
- name: Create thin pool with absolute size
|
||||||
|
community.general.lvol:
|
||||||
|
vg: testvg2
|
||||||
|
thinpool: testthinpool3
|
||||||
|
size: 4m
|
||||||
|
register: thinpool_abs_create
|
||||||
|
|
||||||
|
- name: Assert thin pool with absolute size created
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- thinpool_abs_create is success
|
||||||
|
- thinpool_abs_create is changed
|
||||||
|
|
||||||
|
- name: Create thin pool with absolute size - idempotency
|
||||||
|
community.general.lvol:
|
||||||
|
vg: testvg2
|
||||||
|
thinpool: testthinpool3
|
||||||
|
size: 4m
|
||||||
|
shrink: false
|
||||||
|
register: thinpool_abs_idempotent
|
||||||
|
|
||||||
|
- name: Assert thin pool with absolute size creation is idempotent
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- thinpool_abs_idempotent is success
|
||||||
|
- thinpool_abs_idempotent is not changed
|
||||||
|
|
||||||
|
- name: Create thin volume inside thin pool
|
||||||
|
community.general.lvol:
|
||||||
|
vg: testvg1
|
||||||
|
lv: testthinvol1
|
||||||
|
thinpool: testthinpool1
|
||||||
|
size: 5m
|
||||||
|
register: thinvol_create
|
||||||
|
|
||||||
|
- name: Assert thin volume created
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- thinvol_create is success
|
||||||
|
- thinvol_create is changed
|
||||||
|
|
||||||
|
- name: Create thin volume inside thin pool - idempotency
|
||||||
|
community.general.lvol:
|
||||||
|
vg: testvg1
|
||||||
|
lv: testthinvol1
|
||||||
|
thinpool: testthinpool1
|
||||||
|
size: 5m
|
||||||
|
shrink: false
|
||||||
|
register: thinvol_idempotent
|
||||||
|
|
||||||
|
- name: Assert thin volume creation is idempotent
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- thinvol_idempotent is success
|
||||||
|
- thinvol_idempotent is not changed
|
||||||
Reference in New Issue
Block a user