mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-07-28 15:41:22 -07:00
lvg_rename: New module to support VG renaming (#6721)
* lvg_rename: New module to support VG renaming * Remove vg option aliases Fix YAML boolean case-formatting Co-authored-by: Felix Fontein <felix@fontein.de> --------- Co-authored-by: Felix Fontein <felix@fontein.de>
This commit is contained in:
parent
5d9eb8be95
commit
4871140696
9 changed files with 580 additions and 0 deletions
13
tests/integration/targets/lvg_rename/aliases
Normal file
13
tests/integration/targets/lvg_rename/aliases
Normal file
|
@ -0,0 +1,13 @@
|
|||
# Copyright (c) Contributors to the Ansible project
|
||||
# Based on the integraton test for the lvg module
|
||||
# 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
|
||||
|
||||
azp/posix/1
|
||||
azp/posix/vm
|
||||
destructive
|
||||
needs/privileged
|
||||
skip/aix
|
||||
skip/freebsd
|
||||
skip/osx
|
||||
skip/macos
|
9
tests/integration/targets/lvg_rename/meta/main.yml
Normal file
9
tests/integration/targets/lvg_rename/meta/main.yml
Normal file
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
# Copyright (c) Ansible Project
|
||||
# Based on the integraton test for the lvg module
|
||||
# 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
|
||||
|
||||
dependencies:
|
||||
- setup_pkg_mgr
|
||||
- setup_remote_tmp_dir
|
25
tests/integration/targets/lvg_rename/tasks/main.yml
Normal file
25
tests/integration/targets/lvg_rename/tasks/main.yml
Normal file
|
@ -0,0 +1,25 @@
|
|||
---
|
||||
####################################################################
|
||||
# WARNING: These are designed specifically for Ansible tests #
|
||||
# and should not be used as examples of how to write Ansible roles #
|
||||
####################################################################
|
||||
|
||||
# Copyright (c) Contributors to the Ansible project
|
||||
# Based on the integraton test for the lvg module
|
||||
# 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
|
||||
|
||||
- name: Install required packages (Linux)
|
||||
when: ansible_system == 'Linux'
|
||||
ansible.builtin.package:
|
||||
name: lvm2
|
||||
state: present
|
||||
|
||||
- name: Test lvg_rename module
|
||||
block:
|
||||
- import_tasks: setup.yml
|
||||
|
||||
- import_tasks: test.yml
|
||||
|
||||
always:
|
||||
- import_tasks: teardown.yml
|
50
tests/integration/targets/lvg_rename/tasks/setup.yml
Normal file
50
tests/integration/targets/lvg_rename/tasks/setup.yml
Normal file
|
@ -0,0 +1,50 @@
|
|||
---
|
||||
# Copyright (c) Contributors to the Ansible project
|
||||
# Based on the integraton test for the lvg module
|
||||
# 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
|
||||
|
||||
- name: Create files to use as disk devices
|
||||
with_sequence: 'count=2'
|
||||
ansible.builtin.command:
|
||||
cmd: "dd if=/dev/zero of={{ remote_tmp_dir }}/img{{ item }} bs=1M count=10"
|
||||
creates: "{{ remote_tmp_dir }}/img{{ item }}"
|
||||
|
||||
- name: Show next free loop device
|
||||
ansible.builtin.command:
|
||||
cmd: "losetup -f"
|
||||
changed_when: false
|
||||
register: loop_device1
|
||||
|
||||
- name: "Create loop device for file {{ remote_tmp_dir }}/img1"
|
||||
ansible.builtin.command:
|
||||
cmd: "losetup -f {{ remote_tmp_dir }}/img1"
|
||||
changed_when: true
|
||||
|
||||
- name: Show next free loop device
|
||||
ansible.builtin.command:
|
||||
cmd: "losetup -f"
|
||||
changed_when: false
|
||||
register: loop_device2
|
||||
|
||||
- name: "Create loop device for file {{ remote_tmp_dir }}/img2"
|
||||
ansible.builtin.command:
|
||||
cmd: "losetup -f {{ remote_tmp_dir }}/img2"
|
||||
changed_when: true
|
||||
|
||||
- name: Affect name on disk to work on
|
||||
ansible.builtin.set_fact:
|
||||
loop_device1: "{{ loop_device1.stdout }}"
|
||||
loop_device2: "{{ loop_device2.stdout }}"
|
||||
|
||||
- name: "Create test volume group testvg on {{ loop_device1 }}"
|
||||
community.general.lvg:
|
||||
vg: "testvg"
|
||||
state: present
|
||||
pvs: "{{ loop_device1 }}"
|
||||
|
||||
- name: "Create test volume group testvg2 on {{ loop_device2 }}"
|
||||
community.general.lvg:
|
||||
vg: "testvg2"
|
||||
state: present
|
||||
pvs: "{{ loop_device2 }}"
|
46
tests/integration/targets/lvg_rename/tasks/teardown.yml
Normal file
46
tests/integration/targets/lvg_rename/tasks/teardown.yml
Normal file
|
@ -0,0 +1,46 @@
|
|||
---
|
||||
# Copyright (c) Contributors to the Ansible project
|
||||
# Based on the integraton test for the lvg module
|
||||
# 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
|
||||
|
||||
- name: Collect test volume groups
|
||||
ansible.builtin.command:
|
||||
cmd: "pvs --noheadings -ovg_name {{ loop_device1 | default('') }} {{ loop_device2 | default('') }}"
|
||||
register: test_vgs_output
|
||||
changed_when: false
|
||||
|
||||
- name: Remove test volume groups
|
||||
loop: "{{ test_vgs_output.stdout_lines }}"
|
||||
loop_control:
|
||||
label: "{{ item | trim }}"
|
||||
community.general.lvg:
|
||||
vg: "{{ item | trim }}"
|
||||
state: absent
|
||||
|
||||
- name: Remove lvmdevices
|
||||
loop:
|
||||
- "{{ loop_device1 | default('') }}"
|
||||
- "{{ loop_device2 | default('') }}"
|
||||
when:
|
||||
- item | length > 0
|
||||
ansible.builtin.command:
|
||||
cmd: "lvmdevices --deldev {{ item }}"
|
||||
failed_when: false
|
||||
changed_when: true
|
||||
|
||||
- name: Detach loop devices
|
||||
loop:
|
||||
- "{{ loop_device1 | default('') }}"
|
||||
- "{{ loop_device2 | default('') }}"
|
||||
when:
|
||||
- item | length > 0
|
||||
ansible.builtin.command:
|
||||
cmd: "losetup -d {{ item }}"
|
||||
changed_when: true
|
||||
|
||||
- name: Remove device files
|
||||
with_sequence: 'count=2'
|
||||
ansible.builtin.file:
|
||||
path: "{{ remote_tmp_dir }}/img{{ item }}"
|
||||
state: absent
|
105
tests/integration/targets/lvg_rename/tasks/test.yml
Normal file
105
tests/integration/targets/lvg_rename/tasks/test.yml
Normal file
|
@ -0,0 +1,105 @@
|
|||
---
|
||||
# Copyright (c) Contributors to the 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
|
||||
|
||||
- name: Rename a VG in check mode
|
||||
community.general.lvg_rename:
|
||||
vg: testvg
|
||||
vg_new: testvg_renamed
|
||||
check_mode: true
|
||||
register: check_mode_vg_rename
|
||||
|
||||
- name: Check if testvg still exists
|
||||
ansible.builtin.command:
|
||||
cmd: vgs testvg
|
||||
changed_when: false
|
||||
|
||||
- name: Assert that renaming a VG is changed - check mode
|
||||
assert:
|
||||
that:
|
||||
- check_mode_vg_rename is changed
|
||||
|
||||
- name: Rename testvg to testvg_renamed
|
||||
community.general.lvg_rename:
|
||||
vg: testvg
|
||||
vg_new: testvg_renamed
|
||||
register: vg_renamed
|
||||
|
||||
- name: Assert that renaming a VG is changed
|
||||
assert:
|
||||
that:
|
||||
- vg_renamed is changed
|
||||
|
||||
- name: Check if testvg does not exists
|
||||
ansible.builtin.command:
|
||||
cmd: vgs testvg
|
||||
register: check_testvg_existence_result
|
||||
failed_when: check_testvg_existence_result.rc == 0
|
||||
changed_when: false
|
||||
|
||||
- name: Check if testvg_renamed exists
|
||||
ansible.builtin.command:
|
||||
cmd: vgs testvg_renamed
|
||||
changed_when: false
|
||||
|
||||
- name: Rename testvg to testvg_renamed again for testing idempotency - check mode
|
||||
community.general.lvg_rename:
|
||||
vg: testvg
|
||||
vg_new: testvg_renamed
|
||||
check_mode: true
|
||||
register: check_mode_vg_renamed_again
|
||||
|
||||
- name: Rename testvg to testvg_renamed again for testing idempotency
|
||||
community.general.lvg_rename:
|
||||
vg: testvg
|
||||
vg_new: testvg_renamed
|
||||
register: vg_renamed_again
|
||||
|
||||
- name: Assert that renaming a VG again is not changed
|
||||
assert:
|
||||
that:
|
||||
- check_mode_vg_renamed_again is not changed
|
||||
- vg_renamed_again is not changed
|
||||
|
||||
- name: Rename a non-existing VG - check mode
|
||||
community.general.lvg_rename:
|
||||
vg: testvg
|
||||
vg_new: testvg_ne
|
||||
check_mode: true
|
||||
ignore_errors: true
|
||||
register: check_mode_ne_vg_rename
|
||||
|
||||
- name: Rename a non-existing VG
|
||||
community.general.lvg_rename:
|
||||
vg: testvg
|
||||
vg_new: testvg_ne
|
||||
ignore_errors: true
|
||||
register: ne_vg_rename
|
||||
|
||||
- name: Assert that renaming a no-existing VG failed
|
||||
assert:
|
||||
that:
|
||||
- check_mode_ne_vg_rename is failed
|
||||
- ne_vg_rename is failed
|
||||
|
||||
- name: Rename testvg_renamed to the existing testvg2 name - check mode
|
||||
community.general.lvg_rename:
|
||||
vg: testvg_renamed
|
||||
vg_new: testvg2
|
||||
check_mode: true
|
||||
ignore_errors: true
|
||||
register: check_mode_vg_rename_collision
|
||||
|
||||
- name: Rename testvg_renamed to the existing testvg2 name
|
||||
community.general.lvg_rename:
|
||||
vg: testvg_renamed
|
||||
vg_new: testvg2
|
||||
ignore_errors: true
|
||||
register: vg_rename_collision
|
||||
|
||||
- name: Assert that renaming to an existing VG name failed
|
||||
assert:
|
||||
that:
|
||||
- check_mode_vg_rename_collision is failed
|
||||
- vg_rename_collision is failed
|
Loading…
Add table
Add a link
Reference in a new issue