# Buggy code
def get_capabilities(self):
    """Returns the basic capabilities of the network device
    This method will provide some basic facts about the device and
    what capabilities it has to modify the configuration.  The minimum
    return from this method takes the following format.
    eg:
        {

            'rpc': [list of supported rpcs],
            'network_api': <str>,            # the name of the transport
            'device_info': {
                'network_os': <str>,
                'network_os_version': <str>,
                'network_os_model': <str>,
                'network_os_hostname': <str>,
                'network_os_image': <str>,
                'network_os_platform': <str>,
            },
            'device_operations': {
                'supports_diff_replace': <bool>,       # identify if config should be merged or replaced is supported
                'supports_commit': <bool>,             # identify if commit is supported by device or not
                'supports_rollback': <bool>,           # identify if rollback is supported or not
                'supports_defaults': <bool>,           # identify if fetching running config with default is supported
                'supports_commit_comment': <bool>,     # identify if adding comment to commit is supported of not
                'supports_onbox_diff: <bool>,          # identify if on box diff capability is supported or not
                'supports_generate_diff: <bool>,       # identify if diff capability is supported within plugin
                'supports_multiline_delimiter: <bool>, # identify if multiline demiliter is supported within config
                'supports_diff_match: <bool>,           # identify if match is supported
                'supports_diff_ignore_lines: <bool>,    # identify if ignore line in diff is supported
                'supports_config_replace': <bool>,      # identify if running config replace with candidate config is supported
            }
            'format': [list of supported configuration format],
            'diff_match': [list of supported match values],
            'diff_replace': [list of supported replace values],
            'output': [list of supported command output format]
        }
    :return: capability as json string
    """
    pass


# Traceback (TypeError)
TASK [azure_load_balancer : Get lbs] *********************************************************************************************
task path: /home/vmadmin/cluster_build/roles/azure_load_balancer/tasks/main.yaml:15
Using module file /home/vmadmin/.local/lib/python2.7/site-packages/ansible/modules/cloud/azure/azure_rm_loadbalancer_facts.py
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: vmadmin
<localhost> EXEC /bin/sh -c 'echo ~ &amp;&amp; sleep 0'
<localhost> EXEC /bin/sh -c '( umask 77 &amp;&amp; mkdir -p "` echo /home/vmadmin/.ansible/tmp/ansible-tmp-1504708358.3-41710485333814 `" &amp;&amp; echo ansible-tmp-1504708358.3-41710485333814="` echo /home/vmadmin/.ansible/tmp/ansible-tmp-1504708358.3-41710485333814 `" ) &amp;&amp; sleep 0'
<localhost> PUT /tmp/tmpy_CiqC TO /home/vmadmin/.ansible/tmp/ansible-tmp-1504708358.3-41710485333814/azure_rm_loadbalancer_facts.py
<localhost> EXEC /bin/sh -c 'chmod u+x /home/vmadmin/.ansible/tmp/ansible-tmp-1504708358.3-41710485333814/ /home/vmadmin/.ansible/tmp/ansible-tmp-1504708358.3-41710485333814/azure_rm_loadbalancer_facts.py &amp;&amp; sleep 0'
<localhost> EXEC /bin/sh -c '/usr/bin/python /home/vmadmin/.ansible/tmp/ansible-tmp-1504708358.3-41710485333814/azure_rm_loadbalancer_facts.py; rm -rf "/home/vmadmin/.ansible/tmp/ansible-tmp-1504708358.3-41710485333814/" > /dev/null 2>&amp;1 &amp;&amp; sleep 0'
The full traceback is:
Traceback (most recent call last):
File "/tmp/ansible_VTaHxN/ansible_module_azure_rm_loadbalancer_facts.py", line 180, in <module>
main()
File "/tmp/ansible_VTaHxN/ansible_module_azure_rm_loadbalancer_facts.py", line 177, in main
AzureRMLoadBalancerFacts()
File "/tmp/ansible_VTaHxN/ansible_module_azure_rm_loadbalancer_facts.py", line 123, in __init__
facts_module=True
File "/tmp/ansible_VTaHxN/ansible_modlib.zip/ansible/module_utils/azure_rm_common.py", line 255, in __init__
File "/tmp/ansible_VTaHxN/ansible_module_azure_rm_loadbalancer_facts.py", line 133, in exec_module
else self.list_items()
File "/tmp/ansible_VTaHxN/ansible_module_azure_rm_loadbalancer_facts.py", line 162, in list_items
response = self.network_client.load_balancers.list()
TypeError: list() takes at least 2 arguments (1 given)

fatal: [localhost]: FAILED! => {
"changed": false,
"failed": true,
"module_stderr": "Traceback (most recent call last):\n  File \"/tmp/ansible_VTaHxN/ansible_module_azure_rm_loadbalancer_facts.py\", line 180, in <module>\n    main()\n  File \"/tmp/ansible_VTaHxN/ansible_module_azure_rm_loadbalancer_facts.py\", line 177, in main\n    AzureRMLoadBalancerFacts()\n  File \"/tmp/ansible_VTaHxN/ansible_module_azure_rm_loadbalancer_facts.py\", line 123, in __init__\n    facts_module=True\n  File \"/tmp/ansible_VTaHxN/ansible_modlib.zip/ansible/module_utils/azure_rm_common.py\", line 255, in __init__\n  File \"/tmp/ansible_VTaHxN/ansible_module_azure_rm_loadbalancer_facts.py\", line 133, in exec_module\n    else self.list_items()\n  File \"/tmp/ansible_VTaHxN/ansible_module_azure_rm_loadbalancer_facts.py\", line 162, in list_items\n    response = self.network_client.load_balancers.list()\nTypeError: list() takes at least 2 arguments (1 given)\n",
"module_stdout": "",
"msg": "MODULE FAILURE",
"rc": 0
}

# Fixed code
def get_capabilities(self):
    """Returns the basic capabilities of the network device
    This method will provide some basic facts about the device and
    what capabilities it has to modify the configuration.  The minimum
    return from this method takes the following format.
    eg:
        {

            'rpc': [list of supported rpcs],
            'network_api': <str>,            # the name of the transport
            'device_info': {
                'network_os': <str>,
                'network_os_version': <str>,
                'network_os_model': <str>,
                'network_os_hostname': <str>,
                'network_os_image': <str>,
                'network_os_platform': <str>,
            },
            'device_operations': {
                'supports_diff_replace': <bool>,       # identify if config should be merged or replaced is supported
                'supports_commit': <bool>,             # identify if commit is supported by device or not
                'supports_rollback': <bool>,           # identify if rollback is supported or not
                'supports_defaults': <bool>,           # identify if fetching running config with default is supported
                'supports_commit_comment': <bool>,     # identify if adding comment to commit is supported of not
                'supports_onbox_diff: <bool>,          # identify if on box diff capability is supported or not
                'supports_generate_diff: <bool>,       # identify if diff capability is supported within plugin
                'supports_multiline_delimiter: <bool>, # identify if multiline demiliter is supported within config
                'supports_diff_match: <bool>,          # identify if match is supported
                'supports_diff_ignore_lines: <bool>,   # identify if ignore line in diff is supported
                'supports_config_replace': <bool>,     # identify if running config replace with candidate config is supported
                'supports_admin': <bool>,              # identify if admin configure mode is supported or not
                'supports_commit_label': <bool>,       # identify if commit label is supported or not
            }
            'format': [list of supported configuration format],
            'diff_match': [list of supported match values],
            'diff_replace': [list of supported replace values],
            'output': [list of supported command output format]
        }
    :return: capability as json string
    """
    pass