diff --git a/lib/ansible/modules/monitoring/zabbix/zabbix_action.py b/lib/ansible/modules/monitoring/zabbix/zabbix_action.py index 8e77b2c0b76..1d1320665ce 100644 --- a/lib/ansible/modules/monitoring/zabbix/zabbix_action.py +++ b/lib/ansible/modules/monitoring/zabbix/zabbix_action.py @@ -1612,6 +1612,7 @@ def cleanup_data(obj): def main(): """Main ansible module function """ + module = AnsibleModule( argument_spec=dict( server_url=dict(type='str', required=True, aliases=['url']), @@ -1633,12 +1634,290 @@ def main(): recovery_default_subject=dict(type='str', required=False, default=None), acknowledge_default_message=dict(type='str', required=False, default=None), acknowledge_default_subject=dict(type='str', required=False, default=None), - conditions=dict(type='list', required=False, default=None), + conditions=dict( + type='list', + required=False, + elements='dict', + options=dict( + formulaid=dict(type='str', required=False), + operator=dict(type='str', required=True), + type=dict(type='str', required=True), + value=dict(type='str', required=True), + value2=dict(type='str', required=False) + ) + ), formula=dict(type='str', required=False, default=None), eval_type=dict(type='str', required=False, default=None, choices=['andor', 'and', 'or', 'custom_expression']), - operations=dict(type='list', required=False, default=None), - recovery_operations=dict(type='list', required=False, default=[]), - acknowledge_operations=dict(type='list', required=False, default=[]) + operations=dict( + type='list', + required=False, + elements='dict', + options=dict( + type=dict( + type='str', + required=True, + choices=[ + 'send_message', + 'remote_command', + 'add_host', + 'remove_host', + 'add_to_host_group', + 'remove_from_host_group', + 'link_to_template', + 'unlink_from_template', + 'enable_host', + 'disable_host', + 'set_host_inventory_mode', + ] + ), + esc_period=dict(type='int', required=False), + esc_step_from=dict(type='int', required=False, default=1), + esc_step_to=dict(type='int', required=False, default=1), + # when type is remote_command + command_type=dict( + type='str', + required=False, + choices=[ + 'custom_script', + 'ipmi', + 'ssh', + 'telnet', + 'global_script' + ] + ), + command=dict(type='str', required=False), + execute_on=dict( + type='str', + required=False, + choices=['agent', 'server', 'proxy'] + ), + password=dict(type='str', required=False), + port=dict(type='int', required=False), + run_on_groups=dict(type='list', required=False), + run_on_hosts=dict(type='list', required=False), + script_name=dict(type='str', required=False), + ssh_auth_type=dict( + type='str', + required=False, + default='password', + choices=['password', 'public_key'] + ), + ssh_privatekey_file=dict(type='str', required=False), + ssh_publickey_file=dict(type='str', required=False), + username=dict(type='str', required=False), + # when type is send_message + media_type=dict(type='str', required=False), + subject=dict(type='str', required=False), + message=dict(type='str', required=False), + send_to_groups=dict(type='list', required=False), + send_to_users=dict(type='list', required=False), + # when type is add_to_host_group or remove_from_host_group + host_groups=dict(type='list', required=False), + # when type is set_host_inventory_mode + inventory=dict(type='str', required=False), + # when type is link_to_template or unlink_from_template + templates=dict(type='list', required=False) + ), + required_if=[ + ['type', 'remote_command', ['command_type']], + ['type', 'remote_command', ['run_on_groups', 'run_on_hosts'], True], + ['command_type', 'custom_script', [ + 'command', + 'execute_on' + ]], + ['command_type', 'ipmi', ['command']], + ['command_type', 'ssh', [ + 'command', + 'password', + 'username', + 'port', + 'ssh_auth_type', + 'ssh_privatekey_file', + 'ssh_publickey_file' + ]], + ['command_type', 'telnet', [ + 'command', + 'password', + 'username', + 'port' + ]], + ['command_type', 'global_script', ['script_name']], + ['type', 'add_to_host_group', ['host_groups']], + ['type', 'remove_from_host_group', ['host_groups']], + ['type', 'link_to_template', ['templates']], + ['type', 'unlink_from_template', ['templates']], + ['type', 'set_host_inventory_mode', ['inventory']], + ['type', 'send_message', ['send_to_users', 'send_to_groups'], True] + ] + ), + recovery_operations=dict( + type='list', + required=False, + default=[], + elements='dict', + options=dict( + type=dict( + type='str', + required=True, + choices=[ + 'send_message', + 'remote_command', + 'notify_all_involved' + ] + ), + # when type is remote_command + command_type=dict( + type='str', + required=False, + choices=[ + 'custom_script', + 'ipmi', + 'ssh', + 'telnet', + 'global_script' + ] + ), + command=dict(type='str', required=False), + execute_on=dict( + type='str', + required=False, + choices=['agent', 'server', 'proxy'] + ), + password=dict(type='str', required=False), + port=dict(type='int', required=False), + run_on_groups=dict(type='list', required=False), + run_on_hosts=dict(type='list', required=False), + script_name=dict(type='str', required=False), + ssh_auth_type=dict( + type='str', + required=False, + default='password', + choices=['password', 'public_key'] + ), + ssh_privatekey_file=dict(type='str', required=False), + ssh_publickey_file=dict(type='str', required=False), + username=dict(type='str', required=False), + # when type is send_message + media_type=dict(type='str', required=False), + subject=dict(type='str', required=False), + message=dict(type='str', required=False), + send_to_groups=dict(type='list', required=False), + send_to_users=dict(type='list', required=False), + ), + required_if=[ + ['type', 'remote_command', ['command_type']], + ['type', 'remote_command', [ + 'run_on_groups', + 'run_on_hosts' + ], True], + ['command_type', 'custom_script', [ + 'command', + 'execute_on' + ]], + ['command_type', 'ipmi', ['command']], + ['command_type', 'ssh', [ + 'command', + 'password', + 'username', + 'port', + 'ssh_auth_type', + 'ssh_privatekey_file', + 'ssh_publickey_file' + ]], + ['command_type', 'telnet', [ + 'command', + 'password', + 'username', + 'port' + ]], + ['command_type', 'global_script', ['script_name']], + ['type', 'send_message', ['send_to_users', 'send_to_groups'], True] + ] + ), + acknowledge_operations=dict( + type='list', + required=False, + default=[], + elements='dict', + options=dict( + type=dict( + type='str', + required=True, + choices=[ + 'send_message', + 'remote_command', + 'notify_all_involved' + ] + ), + # when type is remote_command + command_type=dict( + type='str', + required=False, + choices=[ + 'custom_script', + 'ipmi', + 'ssh', + 'telnet', + 'global_script' + ] + ), + command=dict(type='str', required=False), + execute_on=dict( + type='str', + required=False, + choices=['agent', 'server', 'proxy'] + ), + password=dict(type='str', required=False), + port=dict(type='int', required=False), + run_on_groups=dict(type='list', required=False), + run_on_hosts=dict(type='list', required=False), + script_name=dict(type='str', required=False), + ssh_auth_type=dict( + type='str', + required=False, + default='password', + choices=['password', 'public_key'] + ), + ssh_privatekey_file=dict(type='str', required=False), + ssh_publickey_file=dict(type='str', required=False), + username=dict(type='str', required=False), + # when type is send_message + media_type=dict(type='str', required=False), + subject=dict(type='str', required=False), + message=dict(type='str', required=False), + send_to_groups=dict(type='list', required=False), + send_to_users=dict(type='list', required=False), + ), + required_if=[ + ['type', 'remote_command', ['command_type']], + ['type', 'remote_command', [ + 'run_on_groups', + 'run_on_hosts' + ], True], + ['command_type', 'custom_script', [ + 'command', + 'execute_on' + ]], + ['command_type', 'ipmi', ['command']], + ['command_type', 'ssh', [ + 'command', + 'password', + 'username', + 'port', + 'ssh_auth_type', + 'ssh_privatekey_file', + 'ssh_publickey_file' + ]], + ['command_type', 'telnet', [ + 'command', + 'password', + 'username', + 'port' + ]], + ['command_type', 'global_script', ['script_name']], + ['type', 'send_message', ['send_to_users', 'send_to_groups'], True] + ] + ) ), supports_check_mode=True )