Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 13 additions & 18 deletions plugins/modules/event.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,13 @@
seealso:
- module: event_info
notes:
- Metric events bypass the store and are sent off to the event pipeline and corresponding event
handlers. Read more about this at
U(https://docs.sensu.io/sensu-go/latest/reference/events/#metric-only-events)
- Metric events bypass the store and are sent off to the event pipeline and
corresponding event handlers. Read more about this at
U(https://docs.sensu.io/sensu-go/latest/reference/events/#metric-only-events).
- This module is not enforcing a state of any resource in particular. This
is why it ALWAYS sends an event (it is not idempotent).
- Module also does not return an event representation back because Sensu Go
backend processes events asynchronously.
options:
timestamp:
description:
Expand Down Expand Up @@ -152,12 +156,7 @@
value: 0.004
'''

RETURN = '''
object:
description: object representing Sensu event
returned: success
type: dict
'''
RETURN = ''' # '''

from ansible.module_utils.basic import AnsibleModule

Expand Down Expand Up @@ -220,13 +219,6 @@ def _build_api_payload(client, params):
return payload


def send_event(client, path, payload, check_mode):
if check_mode:
return True, payload
utils.put(client, path, payload)
return True, utils.get(client, path)


def main():
module = AnsibleModule(
supports_check_mode=True,
Expand Down Expand Up @@ -281,6 +273,9 @@ def main():
)
)

if module.check_mode:
module.exit_json(changed=True)

client = arguments.get_sensu_client(module.params['auth'])
path = utils.build_core_v2_path(
module.params['namespace'], 'events', module.params['entity'],
Expand All @@ -289,8 +284,8 @@ def main():

try:
payload = _build_api_payload(client, module.params)
changed, event = send_event(client, path, payload, module.check_mode)
module.exit_json(changed=changed, object=event)
utils.put(client, path, payload)
module.exit_json(changed=True)
except errors.Error as e:
module.fail_json(msg=str(e))

Expand Down
37 changes: 22 additions & 15 deletions tests/integration/molecule/module_event/converge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,6 @@
- assert:
that:
- result is changed
- result.object.check.metadata.name == 'awesome_check'
- result.object.check.command == '/bin/true'
- result.object.entity.metadata.name == 'awesome_entity'

- name: Get last event
event_info:
Expand All @@ -100,6 +97,11 @@
entity: awesome_entity
check: awesome_check
register: result
# Give backend a few seconds to process the event (out CI is ofter under
# a considerate stress when testing).
retries: 3
delay: 3
until: result.objects | length > 0

- assert:
that:
Expand Down Expand Up @@ -181,30 +183,35 @@
- assert:
that:
- result is changed
- result.object.entity.metadata.name == 'entity2'
- result.object.check.metadata.name == 'check2'
- result.object.check.command == '/bin/false'
- result.object.check.duration == 1.945
- result.object.check.executed == 1522100915
- "result.object.check.history.0 == {'executed': 1552505193, 'status': 1}"
- result.object.check.issued == 1552506034
- result.object.check.last_ok == 1552506033
- result.object.check.output == '10'
- result.object.check.state == 'passing'
- result.object.check.status == 0
- result.object.check.total_state_change == 0

- name: Get events matching entity2
event_info:
auth:
url: http://localhost:8080
entity: entity2
register: result
# Give backend a few seconds to process the event (out CI is ofter under
# a considerate stress when testing).
retries: 3
delay: 3
until: result.objects | length > 0

- assert:
that:
- result.objects | length == 1
- result.objects.0.check.metadata.name == 'check2'
- result.objects.0.entity.metadata.name == 'entity2'
- result.objects.0.check.metadata.name == 'check2'
- result.objects.0.check.command == '/bin/false'
- result.objects.0.check.duration == 1.945
- result.objects.0.check.executed == 1522100915
- "result.objects.0.check.history.0 == {'executed': 1552505193, 'status': 1}"
- result.objects.0.check.issued == 1552506034
- result.objects.0.check.last_ok == 1552506033
- result.objects.0.check.output == '10'
- result.objects.0.check.state == 'passing'
- result.objects.0.check.status == 0
- result.objects.0.check.total_state_change == 0

- name: Get all events
event_info:
Expand Down
18 changes: 7 additions & 11 deletions tests/unit/modules/test_event.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import pytest

from ansible_collections.sensu.sensu_go.plugins.module_utils import (
errors, http,
errors, http, utils,
)
from ansible_collections.sensu.sensu_go.plugins.modules import event

Expand Down Expand Up @@ -72,8 +72,7 @@ def test_missing_check_on_remote(self, mocker):
event.main()

def test_minimal_event_parameters(self, mocker):
send_event_mock = mocker.patch.object(event, 'send_event')
send_event_mock.return_value = True, {}
put_mock = mocker.patch.object(utils, 'put')
get_entity_mock = mocker.patch.object(event, 'get_entity')
get_entity_mock.return_value = dict(
metadata=dict(
Expand All @@ -98,7 +97,7 @@ def test_minimal_event_parameters(self, mocker):
with pytest.raises(AnsibleExitJson):
event.main()

_client, path, payload, check_mode = send_event_mock.call_args[0]
_client, path, payload = put_mock.call_args[0]
assert path == '/api/core/v2/namespaces/default/events/awesome_entity/awesome_check'
assert payload == dict(
metadata=dict(
Expand All @@ -118,7 +117,6 @@ def test_minimal_event_parameters(self, mocker):
)
)
)
assert check_mode is False

def test_all_event_parameters(self, mocker):
entity_object = dict(
Expand All @@ -139,8 +137,7 @@ def test_all_event_parameters(self, mocker):
publish=True,
subscriptions=["linux"],
)
send_event_mock = mocker.patch.object(event, 'send_event')
send_event_mock.return_value = True, {}
put_mock = mocker.patch.object(utils, 'put')
get_entity_mock = mocker.patch.object(event, 'get_entity')
get_entity_mock.return_value = entity_object
get_check_mock = mocker.patch.object(event, 'get_check')
Expand Down Expand Up @@ -198,7 +195,7 @@ def test_all_event_parameters(self, mocker):
with pytest.raises(AnsibleExitJson):
event.main()

_client, path, payload, check_mode = send_event_mock.call_args[0]
_client, path, payload = put_mock.call_args[0]
assert path == '/api/core/v2/namespaces/my/events/awesome_entity/awesome_check'
assert payload == dict(
metadata=dict(
Expand Down Expand Up @@ -264,11 +261,10 @@ def test_all_event_parameters(self, mocker):
}]
)
)
assert check_mode is False

def test_failure(self, mocker):
send_event_mock = mocker.patch.object(event, 'send_event')
send_event_mock.side_effect = errors.Error('Bad error')
put_mock = mocker.patch.object(utils, 'put')
put_mock.side_effect = errors.Error('Bad error')
set_module_args(
entity='awesome_entity',
check=dict(
Expand Down