-
Notifications
You must be signed in to change notification settings - Fork 5
Use snapm mount commands when available #144
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Add check to test that uses snapm to validate the snapset attribute is set to bootable. Signed-off-by: Todd Gill <tgill@redhat.com>
Update the snapmgr.py module to use manager.mounts features. Signed-off-by: Todd Gill <tgill@redhat.com>
Attempt to remove an origin of a snapshot and validate that the attempt fails. Signed-off-by: Todd Gill <tgill@redhat.com>
…lumes Signed-off-by: Todd Gill <tgill@redhat.com>
Reviewer's GuideSwitches snapshot mount/umount operations to use snapm when available, introduces explicit bootable snapshot handling and validation, and adds tests and status codes to cover bootable behavior and error paths. Sequence diagram for snapm-based snapshot mount commandsequenceDiagram
actor User
participant AnsibleModule as AnsibleModule
participant Snapmgr as snapmgr_mgmt
participant Manager as snap_manager_Manager
participant SnapmMounts as snapm_Mounts
User->>AnsibleModule: invoke snapshot module (mount)
AnsibleModule->>Snapmgr: mgr_mount_cmd(module, module_args, snapset_json)
Snapmgr->>Manager: Manager()
Snapmgr->>Manager: find_snapshot_sets(Selection(name))
Manager-->>Snapmgr: snapsets
Snapmgr->>Snapmgr: mgr_mount_snapshot_set(module, manager, snapsets[0], snapset_json, verify_only)
alt verify_only is False
Snapmgr->>Manager: find_snapshot_sets(Selection(name))
Manager-->>Snapmgr: snapsets
Snapmgr->>SnapmMounts: mount(snapsets[0])
SnapmMounts-->>Snapmgr: success or exception
Snapmgr-->>AnsibleModule: SnapshotStatus and changed=True/False
else verify_only is True
loop for each volume in snapset_json.volumes
Snapmgr->>Snapmgr: determine lv_to_check (origin or mgr_get_snapshot_name)
Snapmgr->>AnsibleModule: mount_verify(module, mountpoint, vg_name, lv_to_check)
AnsibleModule-->>Snapmgr: rc, message
Snapmgr->>Snapmgr: abort on error
end
Snapmgr-->>AnsibleModule: SnapshotStatus.SNAPSHOT_OK, changed=False
end
AnsibleModule-->>User: return results
Sequence diagram for snapm-based snapshot unmount commandsequenceDiagram
actor User
participant AnsibleModule as AnsibleModule
participant Snapmgr as snapmgr_mgmt
participant Manager as snap_manager_Manager
participant SnapmMounts as snapm_Mounts
User->>AnsibleModule: invoke snapshot module (umount)
AnsibleModule->>Snapmgr: mgr_umount_cmd(module, module_args, snapset_json)
Snapmgr->>Manager: Manager()
Snapmgr->>Manager: find_snapshot_sets(Selection(name))
Manager-->>Snapmgr: snapsets
Snapmgr->>Snapmgr: mgr_umount_snapshot_set(module, manager, snapsets[0], snapset_json, verify_only)
alt verify_only is False
Snapmgr->>SnapmMounts: umount(snapset)
SnapmMounts-->>Snapmgr: success or exception
Snapmgr-->>AnsibleModule: SnapshotStatus and changed=True/False
else verify_only is True
loop for each volume in snapset_json.volumes
Snapmgr->>Snapmgr: determine lv_to_check (origin or mgr_get_snapshot_name)
Snapmgr->>AnsibleModule: umount_verify(module, mountpoint, vg_name, lv_to_check)
AnsibleModule-->>Snapmgr: rc, message
Snapmgr->>Snapmgr: abort on error
end
Snapmgr-->>AnsibleModule: SnapshotStatus.SNAPSHOT_OK, changed=False
end
AnsibleModule-->>User: return results
Sequence diagram for bootable snapshot validation using legacy LVM pathsequenceDiagram
actor User
participant AnsibleModule as AnsibleModule
participant Validate as validate_module
participant Lvm as lvm_module
User->>AnsibleModule: invoke snapshot module (create bootable)
AnsibleModule->>Validate: validate_snapset_json(cmd, module.params, verify_only=False)
Validate->>Validate: snapset_dict = module_args[snapshot_lvm_set]
Validate->>Validate: set snapset_dict.snapshot_lvm_bootable from module_args if present
Validate-->>AnsibleModule: cmd_result, snapset_dict
AnsibleModule->>Lvm: snapshot_set(module, snapset_dict, check_mode)
Lvm->>Lvm: check bootable flags
alt bootable requested and using legacy LVM
Lvm-->>AnsibleModule: ERROR_BOOTABLE_NOT_SUPPORTED, message, changed=False
else non bootable
Lvm->>Lvm: verify_snapset_source_lvs_exist
Lvm-->>AnsibleModule: status, message, changed
end
AnsibleModule-->>User: return results
Updated class diagram for snapshot management and status typesclassDiagram
class SnapshotStatus {
<<enumeration>>
int SNAPSHOT_OK
int ERROR_MOUNT_FAILED
int ERROR_UMOUNT_FAILED
int ERROR_SNAPM_INTERNAL_ERROR
int ERROR_BOOTABLE_NOT_SUPPORTED
int ERROR_BOOTABLE_CONFLICT
}
class snapmgr_module {
+mgr_snapshot_cmd(module, module_args, snapset_json)
+mgr_mount_cmd(module, module_args, snapset_json)
+mgr_umount_cmd(module, module_args, snapset_json)
+mgr_mount_snapshot_set(module, manager, snapset, snapset_json, verify_only)
+mgr_umount_snapshot_set(module, manager, snapset, snapset_json, verify_only)
}
class snap_manager_Manager {
+find_snapshot_sets(selection)
+mounts: snapm_Mounts
}
class snapm_Mounts {
+mount(snapset)
+umount(snapset)
}
class validate_module {
+validate_snapset_json(cmd, module_args, verify_only)
}
class lvm_module {
+snapshot_set(module, snapset_json, check_mode)
}
class utils_module {
+to_bool(value)
+mgr_get_snapshot_name(module, vg_name, lv_name, snapset)
+mount_verify(module, mountpoint, vg_name, lv_to_check)
+umount_verify(module, mountpoint, vg_name, lv_to_check)
+verify_source_lvs_exist(module, snapset_json)
}
snapmgr_module --> snap_manager_Manager : uses
snap_manager_Manager --> snapm_Mounts : composition
snapmgr_module --> utils_module : uses
snapmgr_module --> SnapshotStatus : returns
validate_module --> SnapshotStatus : returns
lvm_module --> SnapshotStatus : returns
lvm_module --> utils_module : uses verify_source_lvs_exist
validate_module --> lvm_module : prepares snapset_json for
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
| mountpoint = list_item["mountpoint"] | ||
|
|
||
| if list_item.get("all_targets") is not None: | ||
| all_targets = to_bool(list_item["all_targets"]) |
Check warning
Code scanning / CodeQL
Variable defined multiple times Warning
redefined
| mountpoint = list_item["mountpoint"] | ||
|
|
||
| if list_item.get("all_targets") is not None: | ||
| all_targets = to_bool(list_item["all_targets"]) |
Check warning
Code scanning / CodeQL
Variable defined multiple times Warning
redefined
|
|
||
| return SnapshotStatus.SNAPSHOT_OK, "", changed | ||
|
|
||
| return rc, message, changed |
Check warning
Code scanning / CodeQL
Unreachable code Warning
| @@ -1,9 +1,13 @@ | |||
| from __future__ import absolute_import, division, print_function | |||
|
|
|||
| from module_utils.snapshot_lsr.utils import mount | |||
Check notice
Code scanning / CodeQL
Unused import Note
| __metaclass__ = type | ||
|
|
||
| import logging | ||
| import os |
Check notice
Code scanning / CodeQL
Unused import Note
| import logging | ||
| import os | ||
| from os.path import join as path_join | ||
| import stat |
Check notice
Code scanning / CodeQL
Unused import Note
Enhancement:
Update to use snapm for mount/umount
Reason:
Removing dependency on legacy code
Result:
Same functionality, but dependency switched to snapm
Issue Tracker Tickets (Jira or BZ if any):
STORAGECFG-1023 - use snapm mount tools when available
Summary by Sourcery
Switch snapshot mount and unmount handling to use snapm when available and introduce bootable snapshot support and related validation.
New Features:
Bug Fixes:
Enhancements:
Tests: