Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

# (c) 2016, Matt Martz <matt@sivel.net> 

# (c) 2017 Ansible Project 

# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) 

 

# Make coding more python3-ish 

from __future__ import (absolute_import, division, print_function) 

__metaclass__ = type 

 

DOCUMENTATION = ''' 

callback: json 

short_description: Ansible screen output as JSON 

version_added: "2.2" 

description: 

- This callback converts all events into JSON output to stdout 

type: stdout 

requirements: 

- Set as stdout in config 

''' 

 

import json 

 

from ansible.plugins.callback import CallbackBase 

 

 

class CallbackModule(CallbackBase): 

CALLBACK_VERSION = 2.0 

CALLBACK_TYPE = 'stdout' 

CALLBACK_NAME = 'json' 

 

def __init__(self, display=None): 

super(CallbackModule, self).__init__(display) 

self.results = [] 

 

def _new_play(self, play): 

return { 

'play': { 

'name': play.name, 

'id': str(play._uuid) 

}, 

'tasks': [] 

} 

 

def _new_task(self, task): 

return { 

'task': { 

'name': task.name, 

'id': str(task._uuid) 

}, 

'hosts': {} 

} 

 

def v2_playbook_on_play_start(self, play): 

self.results.append(self._new_play(play)) 

 

def v2_playbook_on_task_start(self, task, is_conditional): 

self.results[-1]['tasks'].append(self._new_task(task)) 

 

def v2_playbook_on_handler_task_start(self, task): 

self.results[-1]['tasks'].append(self._new_task(task)) 

 

def v2_runner_on_ok(self, result, **kwargs): 

host = result._host 

self.results[-1]['tasks'][-1]['hosts'][host.name] = result._result 

 

def v2_playbook_on_stats(self, stats): 

"""Display info about playbook statistics""" 

 

hosts = sorted(stats.processed.keys()) 

 

summary = {} 

for h in hosts: 

s = stats.summarize(h) 

summary[h] = s 

 

output = { 

'plays': self.results, 

'stats': summary 

} 

 

self._display.display(json.dumps(output, indent=4, sort_keys=True)) 

 

v2_runner_on_failed = v2_runner_on_ok 

v2_runner_on_unreachable = v2_runner_on_ok 

v2_runner_on_skipped = v2_runner_on_ok