When writing new modules, the ansible documentation is quite vague. Here more information about it.
The official documentation link,
https://docs.ansible.com/ansible/latest/reference_appendices/module_utils.html
Give you only the definition of the module class:
class ansible.module_utils.basic.AnsibleModule(argument_spec, bypass_checks=False, no_log=False, check_invalid_arguments=None, mutually_exclusive=None, required_together=None, required_one_of=None, add_file_common_args=False, supports_check_mode=False, required_if=None, required_by=None)
Here a useful blog that explains some of the options:
https://mobygeek.net/blog/2016/02/16/ansible-module-development-parameters/
And some extra notes about required_if:
Make sure you are consistent with the lists required. If you write:
required_if=[['show_uplink', 'True', 'vlanid']]
Ansible will give you:
TASK [Test] *
fatal: [host]: FAILED! => {“ansible_facts”: {“discovered_interpreter_python”: “/usr/bin/python”}, “changed”: false, “msg”: “show_uplink is True but all of the following are missing: v, l, a, n, i, d“}
You get the point.