storaged-project / blivet

A python module for configuration of block devices
GNU Lesser General Public License v2.1
97 stars 85 forks source link

Blivet aborted due to unable to handle Veritas DMP devices. #1225

Open lonicerae opened 4 months ago

lonicerae commented 4 months ago

Hello,

The VERITAS Storage Foundation creates its raw and block devices for the nodes in the directories /dev/vx/rdmp and /dev/vx/dmp, however it does not create any objects VxDMP* in the /dev directory.

$ cat proc/partitions  | grep Vx
 201       16   1000000 VxDMP2
 201       17     500000 VxDMP2p1
 201       18     500000 VxDMP2p2
...

# pwd
/dev/vx/dmp

# ls
... sda sda1 sda2 ...

# pwd
/dev

# find /dev -name VxDMP*
==>NULL

Due to this design, the following call trace happend when getting devices information:

Traceback (most recent call last):
  File "antest.py", line 104, in <module>
    _ansiballz_main()
  File "antest.py", line 96, in _ansiballz_main
    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)
  File "antest.py", line 42, in invoke_module
    runpy.run_module(mod_name='ansible.modules.blivet', init_globals=None, run_name='__main__', alter_sys=True)
  File "/usr/lib64/python3.6/runpy.py", line 205, in run_module
    return _run_module_code(code, init_globals, run_name, mod_spec)
  File "/usr/lib64/python3.6/runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "/usr/lib64/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/tmp/ansible_blivet_payload_4mba_3tn/ansible_blivet_payload.zip/ansible/modules/blivet.py", line 1717, in <module>
  File "/tmp/ansible_blivet_payload_4mba_3tn/ansible_blivet_payload.zip/ansible/modules/blivet.py", line 1713, in main
  File "/tmp/ansible_blivet_payload_4mba_3tn/ansible_blivet_payload.zip/ansible/modules/blivet.py", line 1625, in run_module
  File "/usr/lib/python3.6/site-packages/blivet/threads.py", line 53, in run_with_lock
    return m(*args, **kwargs)
  File "/usr/lib/python3.6/site-packages/blivet/blivet.py", line 140, in reset
    self.devicetree.populate(cleanup_only=cleanup_only)
  File "/usr/lib/python3.6/site-packages/blivet/threads.py", line 53, in run_with_lock
    return m(*args, **kwargs)
  File "/usr/lib/python3.6/site-packages/blivet/populator/populator.py", line 420, in populate
    self._populate()
  File "/usr/lib/python3.6/site-packages/blivet/threads.py", line 53, in run_with_lock
    return m(*args, **kwargs)
  File "/usr/lib/python3.6/site-packages/blivet/populator/populator.py", line 465, in _populate
    self.handle_device(dev)
  File "/usr/lib/python3.6/site-packages/blivet/threads.py", line 53, in run_with_lock
    return m(*args, **kwargs)
  File "/usr/lib/python3.6/site-packages/blivet/populator/populator.py", line 271, in handle_device
    device = helper_class(self, info).run()
  File "/usr/lib/python3.6/site-packages/blivet/populator/helpers/partition.py", line 106, in run
    exists=True, parents=[disk])
  File "/usr/lib/python3.6/site-packages/blivet/threads.py", line 53, in run_with_lock
    return m(*args, **kwargs)
  File "/usr/lib/python3.6/site-packages/blivet/devices/partition.py", line 194, in __init__
    self._parted_partition = self.disk.format.parted_disk.getPartitionByPath(self.path)
AttributeError: 'NoneType' object has no attribute 'getPartitionByPath'

In fact the above issue could be easily reproduced if I intentionally renamed my /dev/sdb to /dev/sdb-bak on a system without Veritas DMP installed, so that we could simulate the device /dev/sdb could not be seen when I was trying to run the ansible script to detect the devices.

For more details about the VxDMP, refer to:

Best regards, Flos