1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

callback_splunk - Add user-configurable event correlation id (#2790)

* Initial commit

* Adding changelog fragment

* Updating batch description

* Update plugins/callback/splunk.py

Co-authored-by: Felix Fontein <felix@fontein.de>

Co-authored-by: Felix Fontein <felix@fontein.de>
This commit is contained in:
Ajpantuso 2021-06-16 13:58:09 -04:00 committed by GitHub
parent 2f2f384b4e
commit 3ca98c2edd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 3 deletions

View file

@ -0,0 +1,3 @@
---
minor_changes:
- splunk callback plugin - add ``batch`` option for user-configurable correlation ID's (https://github.com/ansible-collections/community.general/issues/2790).

View file

@ -68,6 +68,16 @@ DOCUMENTATION = '''
type: bool type: bool
default: false default: false
version_added: 2.0.0 version_added: 2.0.0
batch:
description:
- Correlation ID which can be set across multiple playbook executions.
env:
- name: SPLUNK_BATCH
ini:
- section: callback_splunk
key: batch
type: str
version_added: 3.3.0
''' '''
EXAMPLES = ''' EXAMPLES = '''
@ -107,7 +117,7 @@ class SplunkHTTPCollectorSource(object):
self.ip_address = socket.gethostbyname(socket.gethostname()) self.ip_address = socket.gethostbyname(socket.gethostname())
self.user = getpass.getuser() self.user = getpass.getuser()
def send_event(self, url, authtoken, validate_certs, include_milliseconds, state, result, runtime): def send_event(self, url, authtoken, validate_certs, include_milliseconds, batch, state, result, runtime):
if result._task_fields['args'].get('_ansible_check_mode') is True: if result._task_fields['args'].get('_ansible_check_mode') is True:
self.ansible_check_mode = True self.ansible_check_mode = True
@ -126,6 +136,8 @@ class SplunkHTTPCollectorSource(object):
data = {} data = {}
data['uuid'] = result._task._uuid data['uuid'] = result._task._uuid
data['session'] = self.session data['session'] = self.session
if batch is not None:
data['batch'] = batch
data['status'] = state data['status'] = state
if include_milliseconds: if include_milliseconds:
@ -175,6 +187,7 @@ class CallbackModule(CallbackBase):
self.authtoken = None self.authtoken = None
self.validate_certs = None self.validate_certs = None
self.include_milliseconds = None self.include_milliseconds = None
self.batch = None
self.splunk = SplunkHTTPCollectorSource() self.splunk = SplunkHTTPCollectorSource()
def _runtime(self, result): def _runtime(self, result):
@ -212,6 +225,8 @@ class CallbackModule(CallbackBase):
self.include_milliseconds = self.get_option('include_milliseconds') self.include_milliseconds = self.get_option('include_milliseconds')
self.batch = self.get_option('batch')
def v2_playbook_on_start(self, playbook): def v2_playbook_on_start(self, playbook):
self.splunk.ansible_playbook = basename(playbook._file_name) self.splunk.ansible_playbook = basename(playbook._file_name)
@ -227,6 +242,7 @@ class CallbackModule(CallbackBase):
self.authtoken, self.authtoken,
self.validate_certs, self.validate_certs,
self.include_milliseconds, self.include_milliseconds,
self.batch,
'OK', 'OK',
result, result,
self._runtime(result) self._runtime(result)
@ -238,6 +254,7 @@ class CallbackModule(CallbackBase):
self.authtoken, self.authtoken,
self.validate_certs, self.validate_certs,
self.include_milliseconds, self.include_milliseconds,
self.batch,
'SKIPPED', 'SKIPPED',
result, result,
self._runtime(result) self._runtime(result)
@ -249,6 +266,7 @@ class CallbackModule(CallbackBase):
self.authtoken, self.authtoken,
self.validate_certs, self.validate_certs,
self.include_milliseconds, self.include_milliseconds,
self.batch,
'FAILED', 'FAILED',
result, result,
self._runtime(result) self._runtime(result)
@ -260,6 +278,7 @@ class CallbackModule(CallbackBase):
self.authtoken, self.authtoken,
self.validate_certs, self.validate_certs,
self.include_milliseconds, self.include_milliseconds,
self.batch,
'FAILED', 'FAILED',
result, result,
self._runtime(result) self._runtime(result)
@ -271,6 +290,7 @@ class CallbackModule(CallbackBase):
self.authtoken, self.authtoken,
self.validate_certs, self.validate_certs,
self.include_milliseconds, self.include_milliseconds,
self.batch,
'UNREACHABLE', 'UNREACHABLE',
result, result,
self._runtime(result) self._runtime(result)

View file

@ -43,7 +43,10 @@ class TestSplunkClient(unittest.TestCase):
mock_datetime.utcnow.return_value = datetime(2020, 12, 1) mock_datetime.utcnow.return_value = datetime(2020, 12, 1)
result = TaskResult(host=self.mock_host, task=self.mock_task, return_data={}, task_fields=self.task_fields) result = TaskResult(host=self.mock_host, task=self.mock_task, return_data={}, task_fields=self.task_fields)
self.splunk.send_event(url='endpoint', authtoken='token', validate_certs=False, include_milliseconds=True, state='OK', result=result, runtime=100) self.splunk.send_event(
url='endpoint', authtoken='token', validate_certs=False, include_milliseconds=True,
batch="abcefghi-1234-5678-9012-abcdefghijkl", state='OK', result=result, runtime=100
)
args, kwargs = open_url_mock.call_args args, kwargs = open_url_mock.call_args
sent_data = json.loads(args[1]) sent_data = json.loads(args[1])
@ -58,7 +61,10 @@ class TestSplunkClient(unittest.TestCase):
mock_datetime.utcnow.return_value = datetime(2020, 12, 1) mock_datetime.utcnow.return_value = datetime(2020, 12, 1)
result = TaskResult(host=self.mock_host, task=self.mock_task, return_data={}, task_fields=self.task_fields) result = TaskResult(host=self.mock_host, task=self.mock_task, return_data={}, task_fields=self.task_fields)
self.splunk.send_event(url='endpoint', authtoken='token', validate_certs=False, include_milliseconds=False, state='OK', result=result, runtime=100) self.splunk.send_event(
url='endpoint', authtoken='token', validate_certs=False, include_milliseconds=False,
batch="abcefghi-1234-5678-9012-abcdefghijkl", state='OK', result=result, runtime=100
)
args, kwargs = open_url_mock.call_args args, kwargs = open_url_mock.call_args
sent_data = json.loads(args[1]) sent_data = json.loads(args[1])