summaryrefslogtreecommitdiffstats
path: root/deploy/status_callback.py
diff options
context:
space:
mode:
Diffstat (limited to 'deploy/status_callback.py')
-rwxr-xr-xdeploy/status_callback.py100
1 files changed, 51 insertions, 49 deletions
diff --git a/deploy/status_callback.py b/deploy/status_callback.py
index 30dffd34..58072de2 100755
--- a/deploy/status_callback.py
+++ b/deploy/status_callback.py
@@ -1,86 +1,97 @@
import httplib
import json
-import sys
-import logging
+import sys # noqa:F401
+from ansible.plugins.callback import CallbackBase
-def task_error(host, data):
- logging.info("task_error: host=%s,data=%s" % (host, data))
+
+def task_error(display, host, data):
+ display.display("task_error: host=%s,data=%s" % (host, data))
# if isinstance(data, dict):
# invocation = data.pop('invocation', {})
- notify_host("localhost", host, "failed")
+ notify_host(display, "localhost", host, "failed")
-class CallbackModule(object):
+class CallbackModule(CallbackBase):
"""
logs playbook results, per host, in /var/log/ansible/hosts
"""
+ CALLBACK_VERSION = 2.0
+ CALLBACK_TYPE = 'notification'
+ CALLBACK_NAME = 'status_callback'
+ CALLBACK_NEEDS_WHITELIST = True
+
+ def __init__(self):
+ super(CallbackModule, self).__init__()
- def on_any(self, *args, **kwargs):
+ def v2_on_any(self, *args, **kwargs):
pass
- def runner_on_failed(self, host, res, ignore_errors=False):
- task_error(host, res)
+ def v2_runner_on_failed(self, host, res, ignore_errors=False):
+ task_error(self._display, host, res)
- def runner_on_ok(self, host, res):
+ def v2_runner_on_ok(self, host, res):
pass
- def runner_on_skipped(self, host, item=None):
+ def v2_runner_on_skipped(self, host, item=None):
pass
- def runner_on_unreachable(self, host, res):
+ def v2_runner_on_unreachable(self, host, res):
pass
- def runner_on_no_hosts(self):
+ def v2_runner_on_no_hosts(self):
pass
- def runner_on_async_poll(self, host, res, jid, clock):
+ def v2_runner_on_async_poll(self, host, res, jid, clock):
pass
- def runner_on_async_ok(self, host, res, jid):
+ def v2_runner_on_async_ok(self, host, res, jid):
pass
- def runner_on_async_failed(self, host, res, jid):
- task_error(host, res)
+ def v2_runner_on_async_failed(self, host, res, jid):
+ task_error(self._display, host, res)
- def playbook_on_start(self):
+ def v2_playbook_on_start(self):
pass
- def playbook_on_notify(self, host, handler):
+ def v2_playbook_on_notify(self, host, handler):
pass
- def playbook_on_no_hosts_matched(self):
+ def v2_playbook_on_no_hosts_matched(self):
pass
- def playbook_on_no_hosts_remaining(self):
+ def v2_playbook_on_no_hosts_remaining(self):
pass
- def playbook_on_task_start(self, name, is_conditional):
+ def v2_playbook_on_task_start(self, name, is_conditional):
pass
- def playbook_on_vars_prompt(self, varname, private=True, prompt=None,
+ def v2_playbook_on_vars_prompt(self, varname, private=True, prompt=None,
encrypt=None, confirm=False, salt_size=None, salt=None, default=None): # noqa
pass
- def playbook_on_setup(self):
+ def v2_playbook_on_setup(self):
pass
- def playbook_on_import_for_host(self, host, imported_file):
+ def v2_playbook_on_import_for_host(self, host, imported_file):
pass
- def playbook_on_not_import_for_host(self, host, missing_file):
+ def v2_playbook_on_not_import_for_host(self, host, missing_file):
pass
- def playbook_on_play_start(self, name):
- pass
+ def v2_playbook_on_play_start(self, play):
+ self.play = play
+ self.loader = self.play.get_loader()
+ return
- def playbook_on_stats(self, stats):
- logging.info("playbook_on_stats enter")
+ def v2_playbook_on_stats(self, stats):
+ self._display.display("playbook_on_stats enter")
+ all_vars = self.play.get_variable_manager().get_vars(self.loader)
+ host_vars = all_vars["hostvars"]
hosts = sorted(stats.processed.keys())
- host_vars = self.playbook.inventory.get_variables(hosts[0])
- cluster_name = host_vars['cluster_name']
+ cluster_name = host_vars[hosts[0]]['cluster_name']
failures = False
unreachable = False
@@ -94,12 +105,12 @@ class CallbackModule(object):
if failures or unreachable:
for host in hosts:
- notify_host("localhost", host, "error")
+ notify_host(self._display, "localhost", host, "error")
return
for host in hosts:
clusterhost_name = host + "." + cluster_name
- notify_host("localhost", clusterhost_name, "succ")
+ notify_host(self._display, "localhost", clusterhost_name, "succ")
def raise_for_status(resp):
@@ -123,7 +134,7 @@ def auth(conn):
return json.loads(resp.read())["token"]
-def notify_host(compass_host, host, status):
+def notify_host(display, compass_host, host, status):
if status == "succ":
body = {"ready": True}
url = "/api/clusterhosts/%s/state_internal" % host
@@ -132,7 +143,7 @@ def notify_host(compass_host, host, status):
host = host.strip("host")
url = "/api/clusterhosts/%s/state" % host
else:
- logging.error("notify_host: host %s with status %s is not supported"
+ display.error("notify_host: host %s with status %s is not supported"
% (host, status))
return
@@ -142,26 +153,17 @@ def notify_host(compass_host, host, status):
conn = httplib.HTTPConnection(compass_host, 80)
token = auth(conn)
headers["X-Auth-Token"] = token
- logging.info("host=%s,url=%s,body=%s,headers=%s" %
- (compass_host, url, json.dumps(body), headers))
+ display.display("host=%s,url=%s,body=%s,headers=%s" %
+ (compass_host, url, json.dumps(body), headers))
conn.request("POST", url, json.dumps(body), headers)
resp = conn.getresponse()
try:
raise_for_status(resp)
- logging.info(
+ display.display(
"notify host status success!!! status=%s, body=%s" %
(resp.status, resp.read()))
except Exception as e:
- logging.error("http request failed %s" % str(e))
+ display.error("http request failed %s" % str(e))
raise
finally:
conn.close()
-
-if __name__ == "__main__":
- if len(sys.argv) != 3:
- logging.error("params: host, status is need")
- sys.exit(1)
-
- host = sys.argv[1]
- status = sys.argv[2]
- notify_host(host, status)