From 332e4b1bf8108825021ddd8991b0ea1c54c2024e Mon Sep 17 00:00:00 2001 From: Rich Megginson Date: Wed, 31 Dec 2025 10:10:52 -0700 Subject: [PATCH] fix: check for no disks specified and report correct error Cause: The code did not check for missing or empty disks in the right place. Consequence: The role would issue a strange error which did not indicate that the problem is that no disks were specified. Fix: Check for missing disks early and report appropriate error. Result: The role will report an appropriate error message if no disks are specified. Signed-off-by: Rich Megginson --- library/blivet.py | 3 +++ ...ate_multiple_partitions_dos_nvme_generated.yml | 15 +++++++++++++++ ...ate_multiple_partitions_dos_scsi_generated.yml | 15 +++++++++++++++ ...ate_multiple_partitions_gpt_nvme_generated.yml | 15 +++++++++++++++ ...ate_multiple_partitions_gpt_scsi_generated.yml | 15 +++++++++++++++ tests/tests_disk_errors.yml | 11 +++++++++++ 6 files changed, 74 insertions(+) create mode 100644 tests/tests_create_multiple_partitions_dos_nvme_generated.yml create mode 100644 tests/tests_create_multiple_partitions_dos_scsi_generated.yml create mode 100644 tests/tests_create_multiple_partitions_gpt_nvme_generated.yml create mode 100644 tests/tests_create_multiple_partitions_gpt_scsi_generated.yml diff --git a/library/blivet.py b/library/blivet.py index 8ce12724..ca113033 100644 --- a/library/blivet.py +++ b/library/blivet.py @@ -940,6 +940,9 @@ class BlivetDiskVolume(BlivetVolume): blivet_device_class = devices.DiskDevice def _get_device_id(self): + disks = self._volume.get('disks', []) + if not disks: + return None return self._volume['disks'][0] def _type_check(self): diff --git a/tests/tests_create_multiple_partitions_dos_nvme_generated.yml b/tests/tests_create_multiple_partitions_dos_nvme_generated.yml new file mode 100644 index 00000000..162d1583 --- /dev/null +++ b/tests/tests_create_multiple_partitions_dos_nvme_generated.yml @@ -0,0 +1,15 @@ +--- +# This file was generated by generate_tests.py +- name: Run test tests_create_multiple_partitions_dos.yml for nvme + hosts: all + tags: + - tests::nvme + tasks: + - name: Set disk interface for test + set_fact: + storage_test_use_interface: "nvme" + +- name: Import playbook + import_playbook: tests_create_multiple_partitions_dos.yml + tags: + - tests::nvme diff --git a/tests/tests_create_multiple_partitions_dos_scsi_generated.yml b/tests/tests_create_multiple_partitions_dos_scsi_generated.yml new file mode 100644 index 00000000..bce68845 --- /dev/null +++ b/tests/tests_create_multiple_partitions_dos_scsi_generated.yml @@ -0,0 +1,15 @@ +--- +# This file was generated by generate_tests.py +- name: Run test tests_create_multiple_partitions_dos.yml for scsi + hosts: all + tags: + - tests::scsi + tasks: + - name: Set disk interface for test + set_fact: + storage_test_use_interface: "scsi" + +- name: Import playbook + import_playbook: tests_create_multiple_partitions_dos.yml + tags: + - tests::scsi diff --git a/tests/tests_create_multiple_partitions_gpt_nvme_generated.yml b/tests/tests_create_multiple_partitions_gpt_nvme_generated.yml new file mode 100644 index 00000000..c0762c53 --- /dev/null +++ b/tests/tests_create_multiple_partitions_gpt_nvme_generated.yml @@ -0,0 +1,15 @@ +--- +# This file was generated by generate_tests.py +- name: Run test tests_create_multiple_partitions_gpt.yml for nvme + hosts: all + tags: + - tests::nvme + tasks: + - name: Set disk interface for test + set_fact: + storage_test_use_interface: "nvme" + +- name: Import playbook + import_playbook: tests_create_multiple_partitions_gpt.yml + tags: + - tests::nvme diff --git a/tests/tests_create_multiple_partitions_gpt_scsi_generated.yml b/tests/tests_create_multiple_partitions_gpt_scsi_generated.yml new file mode 100644 index 00000000..737a622d --- /dev/null +++ b/tests/tests_create_multiple_partitions_gpt_scsi_generated.yml @@ -0,0 +1,15 @@ +--- +# This file was generated by generate_tests.py +- name: Run test tests_create_multiple_partitions_gpt.yml for scsi + hosts: all + tags: + - tests::scsi + tasks: + - name: Set disk interface for test + set_fact: + storage_test_use_interface: "scsi" + +- name: Import playbook + import_playbook: tests_create_multiple_partitions_gpt.yml + tags: + - tests::scsi diff --git a/tests/tests_disk_errors.yml b/tests/tests_disk_errors.yml index 30fecad6..6c857a87 100644 --- a/tests/tests_disk_errors.yml +++ b/tests/tests_disk_errors.yml @@ -27,6 +27,17 @@ min_size: "10g" max_return: 1 + - name: Verify that the role fails when no disks are specified + include_tasks: verify-role-failed.yml + vars: + __storage_failed_params: + storage_volumes: + - name: test1 + type: disk + mount_point: "{{ mount_location }}" + __storage_failed_regex: no disks specified for volume 'test1' + __storage_failed_msg: Role did not report that no disks were specified + - name: Verify that the role fails with the expected error message include_tasks: verify-role-failed.yml vars: