SUSE / salt-shaptools

Salt execution module and state to manage SAP Applications (HANA only at the moment) and SUSE Linux Enterprise High Availability components
Apache License 2.0
14 stars 11 forks source link

Error parsing drbd status #39

Closed arbulu89 closed 4 years ago

arbulu89 commented 4 years ago

This error might be raised during drbd status command:

module.drbd_node.null_resource.drbd_node_provisioner[0] (remote-exec): [INFO    ] Executing command 'drbdadm status sapdata' in directory '/root'
module.drbd_node.null_resource.drbd_node_provisioner[0] (remote-exec): [ERROR   ] An exception occurred in this state: Traceback (most recent call last):
module.drbd_node.null_resource.drbd_node_provisioner[0] (remote-exec):   File "/usr/lib/python3.6/site-packages/salt/state.py", line 1939, in call
module.drbd_node.null_resource.drbd_node_provisioner[0] (remote-exec):     ret = self.states[cdata['full']](*cdata['args'], **cdata['kwargs'])
module.drbd_node.null_resource.drbd_node_provisioner[0] (remote-exec):   File "/usr/lib/python3.6/site-packages/salt/loader.py", line 1982, in wrapper
module.drbd_node.null_resource.drbd_node_provisioner[0] (remote-exec):     return f(*args, **kwargs)
module.drbd_node.null_resource.drbd_node_provisioner[0] (remote-exec):   File "/var/cache/salt/minion/extmods/states/drbdmod.py", line 450, in wait_for_successful_synced
module.drbd_node.null_resource.drbd_node_provisioner[0] (remote-exec):     **kwargs)
module.drbd_node.null_resource.drbd_node_provisioner[0] (remote-exec):   File "/var/cache/salt/minion/extmods/modules/drbdmod.py", line 639, in check_sync_status
module.drbd_node.null_resource.drbd_node_provisioner[0] (remote-exec):     if _is_local_all_uptodated(name) and _is_peers_uptodated(
module.drbd_node.null_resource.drbd_node_provisioner[0] (remote-exec):   File "/var/cache/salt/minion/extmods/modules/drbdmod.py", line 210, in _is_local_all_uptodated
module.drbd_node.null_resource.drbd_node_provisioner[0] (remote-exec):     res = status(name)
module.drbd_node.null_resource.drbd_node_provisioner[0] (remote-exec):   File "/var/cache/salt/minion/extmods/modules/drbdmod.py", line 372, in status
module.drbd_node.null_resource.drbd_node_provisioner[0] (remote-exec):     __context__['drbd.statusret'].append(__context__['drbd.resource'])
module.drbd_node.null_resource.drbd_node_provisioner[0] (remote-exec): AttributeError: 'dict' object has no attribute 'append'

As a summary, the parameter __context__['drbd.statusret'] is alwyas a list except the parsing fails as unknown where it's changed to dict:

def _unknown_parser(line):
    '''
    Action of unsupported line of ``drbdadm status``
    '''
    __context__['drbd.statusret'] = {"Unknown parser": line}

This creates an inconsistency becuase the append command doesn't work anymore.

More logs:

019-11-19 11:20:25,390 [salt.loaded.int.module.cmdmod:397 ][INFO    ][3200] Executing command 'drbdadm status sapdata' in directory '/root'
2019-11-19 11:20:25,400 [salt.loaded.int.module.cmdmod:828 ][DEBUG   ][3200] stdout: sapdata role:Primary
  disk:UpToDate
  libvirt-sles15-false-po-drbd02 role:Secondary congested:yes ap-in-flight:0
      rs-in-flight:8192
    replication:SyncSource peer-disk:Inconsistent done:21.22
2019-11-19 11:20:25,401 [salt.state       :1945][DEBUG   ][3200] An exception occurred in this state: 'dict' object has no attribute 'append'
arbulu89 commented 4 years ago

@nick-wang Could you have a look there as you have experience with drbd?

nick-wang commented 4 years ago

@nick-wang Could you have a look there as you have experience with drbd?

@arbulu89 Thanks for the report! It is really valuable! With it i found the output of drbdadm status xxx will tuned automatically by the size of console window and output. So i need to modify the parser to make it more robust.

I prefer to leave the incorrect dict for status, so that it can raise error when found unknown format. But i need to enhance the error handler in a more decent way.

The line parser is implemented/necessary before json format available. May incomplete or broken in future update, Maybe not now, but eventually i will replace it with json output.

nick-wang commented 4 years ago

Discussed with Xabi offline, will convert the Unknown situation as list. If the value is invalid, raise some controlled error.

arbulu89 commented 4 years ago

Issue fixed in https://github.com/SUSE/salt-shaptools/pull/40