def main(): argspec = dict( id=dict(required=False, type="int"), name=dict(required=False, type="str"), state=dict(required=True, choices=["enabled", "disabled", "absent"], type="str"), owner=dict(required=False, type="str"), ) module = AnsibleModule( argument_spec=argspec, supports_check_mode=True, required_one_of=[("name", "id")], mutually_exclusive=[("name", "id")], ) qradar_request = QRadarRequest( module, not_rest_data_keys=["id", "name", "state", "owner"], ) # if module.params['name']: # # FIXME - QUERY HERE BY NAME NATIVELY VIA REST API (DOESN'T EXIST YET) # found_offense = qradar_request.get('/api/analytics/rules?filter={0}'.format(module.params['name'])) module.params["rule"] = {} if module.params["id"]: module.params["rule"] = qradar_request.get( "/api/analytics/rules/{0}".format(module.params["id"])) elif module.params["name"]: rules = qradar_request.get("/api/analytics/rules?filter={0}".format( quote('"{0}"'.format(module.params["name"])))) if rules: module.params["rule"] = rules[0] module.params["id"] = rules[0]["id"] if module.params["state"] == "enabled": if module.params["rule"]: if module.params["rule"]["enabled"] is True: # Already enabled if module.params["id"]: module.exit_json( msg="No change needed for rule ID: {0}".format( module.params["id"]), qradar_return_data={}, changed=False, ) if module.params["name"]: module.exit_json( msg="Successfully enabled rule named: {0}".format( module.params["name"]), qradar_return_data={}, changed=False, ) else: # Not enabled, enable It module.params["rule"]["enabled"] = True qradar_return_data = qradar_request.post_by_path( "api/analytics/rules/{0}".format( module.params["rule"]["id"]), data=json.dumps(module.params["rule"]), ) if module.params["id"]: module.exit_json( msg="Successfully enabled rule ID: {0}".format( module.params["id"]), qradar_return_data=qradar_return_data, changed=True, ) if module.params["name"]: module.exit_json( msg="Successfully enabled rule named: {0}".format( module.params["name"]), qradar_return_data=qradar_return_data, changed=True, ) else: if module.params["id"]: module.fail_json(msg="Unable to find rule ID: {0}".format( module.params["id"])) if module.params["name"]: module.fail_json(msg='Unable to find rule named: "{0}"'.format( module.params["name"])) elif module.params["state"] == "disabled": if module.params["rule"]: if module.params["rule"]["enabled"] is False: # Already disabled if module.params["id"]: module.exit_json( msg="No change needed for rule ID: {0}".format( module.params["id"]), qradar_return_data={}, changed=False, ) if module.params["name"]: module.exit_json( msg="Successfully enabled rule named: {0}".format( module.params["name"]), qradar_return_data={}, changed=False, ) else: # Not disabled, disable It module.params["rule"]["enabled"] = False qradar_return_data = qradar_request.post_by_path( "api/analytics/rules/{0}".format( module.params["rule"]["id"]), data=json.dumps(module.params["rule"]), ) if module.params["id"]: module.exit_json( msg="Successfully disabled rule ID: {0}".format( module.params["id"]), qradar_return_data=qradar_return_data, changed=True, ) if module.params["name"]: module.exit_json( msg="Successfully disabled rule named: {0}".format( module.params["name"]), qradar_return_data=qradar_return_data, changed=True, ) else: if module.params["id"]: module.fail_json(msg="Unable to find rule ID: {0}".format( module.params["id"])) if module.params["name"]: module.fail_json(msg='Unable to find rule named: "{0}"'.format( module.params["name"])) elif module.params["state"] == "absent": if module.params["rule"]: qradar_return_data = qradar_request.delete( "/api/analytics/rules/{0}".format(module.params["rule"]["id"])) if module.params["id"]: module.exit_json( msg="Successfully deleted rule ID: {0}".format( module.params["id"]), qradar_return_data=qradar_return_data, changed=True, ) if module.params["name"]: module.exit_json( msg="Successfully deleted rule named: {0}".format( module.params["name"]), qradar_return_data=qradar_return_data, changed=True, ) else: module.exit_json(msg="Nothing to do, rule not found.") module.exit_json(rules=rules, changed=False)
def main(): argspec = dict( name=dict(required=True, type="str"), state=dict(choices=["present", "absent"], required=True), type_name=dict(required=False, type="str"), type_id=dict(required=False, type="int"), identifier=dict(required=True, type="str"), protocol_type_id=dict(required=False, type="int"), description=dict(required=True, type="str"), ) module = AnsibleModule( argument_spec=argspec, required_one_of=[("type_name", "type_id")], mutually_exclusive=[("type_name", "type_id")], supports_check_mode=True, ) qradar_request = QRadarRequest( module, not_rest_data_keys=["state", "type_name", "identifier"], ) log_source_exists = qradar_request.get( "/api/config/event_sources/log_source_management/log_sources?filter={0}" .format(quote('name="{0}"'.format(module.params["name"])))) if log_source_exists: if module.params["state"] == "present": existing_log_source_protocol_identifier, _elspi_index = find_dict_in_list( log_source_exists[0]["protocol_parameters"], "name", "identifier") set_log_source_values(module, qradar_request) comparison_map = [ existing_log_source_protocol_identifier["value"] == module.params["identifier"], log_source_exists[0]["name"] == module.params["name"], log_source_exists[0]["type_id"] == module.params["type_id"], to_text(log_source_exists[0]["description"]) == to_text( module.params["description"]), ] if all(comparison_map): module.exit_json(changed=False, msg="Nothing to do.") else: log_source_exists[0]["protocol_parameters"][ _elspi_index] = module.params["protocol_parameters"][0] log_source_exists[0]["name"] = module.params["name"] log_source_exists[0]["type_id"] = module.params["type_id"] log_source_exists[0]["description"] = module.params[ "description"] if module.check_mode: qradar_return_data = { "EMPTY": "IN CHECK MODE, NO TRANSACTION TOOK PLACE" } else: qradar_return_data = qradar_request.create_update( "api/config/event_sources/log_source_management/log_sources", data=json.dumps(log_source_exists), ) module.exit_json( msg="Successfully updated log source: {0}".format( module.params["name"]), qradar_return_data=qradar_return_data, changed=True, ) if module.params["state"] == "absent": if module.check_mode: qradar_return_data = { "EMPTY": "IN CHECK MODE, NO TRANSACTION TOOK PLACE" } else: qradar_return_data = qradar_request.delete( "/api/config/event_sources/log_source_management/log_sources/{0}" .format(log_source_exists[0]["id"])) module.exit_json( msg="Successfully deleted log source: {0}".format( module.params["name"]), qradar_return_data=qradar_return_data, changed=True, ) else: if module.params["state"] == "present": set_log_source_values(module, qradar_request) if module.check_mode: qradar_return_data = { "EMPTY": "IN CHECK MODE, NO TRANSACTION TOOK PLACE" } else: qradar_return_data = qradar_request.create_update( "api/config/event_sources/log_source_management/log_sources", data=json.dumps([qradar_request.get_data()]), ) module.exit_json( msg="Successfully created log source: {0}".format( module.params["name"]), qradar_return_data=qradar_return_data, changed=True, ) if module.params["state"] == "absent": module.exit_json(changed=False, msg="Nothing to do.")