aboutsummaryrefslogtreecommitdiffstats
path: root/deploy/playbook_done.py
diff options
context:
space:
mode:
authorliyuenan <liyuenan@huawei.com>2016-12-22 16:59:08 +0800
committerliyuenan <liyuenan@huawei.com>2016-12-26 17:54:43 +0800
commit6072a49adb33f2bce3f48b9c7b8be7d96cf8501c (patch)
treea78a15b915741bb3ef7ddd4a61a801dd9f46d577 /deploy/playbook_done.py
parenta9041dbf7b68f56169e82de3c37601b7e86867b0 (diff)
Update ansible version
JIRA: COMPASS-511 Change-Id: Id0e83c65a08c9f9036b5d3a597b905e8a7bde6e8 Signed-off-by: liyuenan <liyuenan@huawei.com>
Diffstat (limited to 'deploy/playbook_done.py')
-rw-r--r--deploy/playbook_done.py113
1 files changed, 113 insertions, 0 deletions
diff --git a/deploy/playbook_done.py b/deploy/playbook_done.py
new file mode 100644
index 00000000..c0a81a40
--- /dev/null
+++ b/deploy/playbook_done.py
@@ -0,0 +1,113 @@
+#!/usr/bin/env python
+#
+# Copyright 2014 Huawei Technologies Co. Ltd
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Ansible playbook callback after a playbook run has completed."""
+import os
+import sys
+
+from ansible.plugins.callback import CallbackBase
+
+current_dir = os.path.dirname(os.path.realpath(__file__))
+sys.path.append(current_dir + '/..')
+
+
+import switch_virtualenv # noqa
+from compass.apiclient.restful import Client # noqa: E402
+from compass.utils import flags # noqa: E402
+
+
+flags.add('compass_server',
+ help='compass server url',
+ default='http://127.0.0.1/api')
+flags.add('compass_user_email',
+ help='compass user email',
+ default='admin@huawei.com')
+flags.add('compass_user_password',
+ help='compass user password',
+ default='admin')
+
+
+class CallbackModule(CallbackBase):
+ CALLBACK_VERSION = 2.0
+ CALLBACK_TYPE = 'notification'
+ CALLBACK_NAME = 'playbook_done'
+ CALLBACK_NEEDS_WHITELIST = True
+
+ def __init__(self):
+ super(CallbackModule, self).__init__()
+
+ self.play = None
+ self.loader = None
+ self.disabled = False
+ try:
+ self.client = self._get_client()
+ except Exception:
+ self.disabled = True
+ self._display.error("No compass server found"
+ "disabling this plugin")
+
+ def _get_client(self):
+ return Client(flags.OPTIONS.compass_server)
+
+ def _login(self, client):
+ """get apiclient token."""
+ status, resp = client.get_token(
+ flags.OPTIONS.compass_user_email,
+ flags.OPTIONS.compass_user_password
+ )
+ self._display.warning(
+ 'login status: %s, resp: %s' %
+ (status, resp)
+ )
+ if status >= 400:
+ raise Exception(
+ 'failed to login %s with user %s',
+ flags.OPTIONS.compass_server,
+ flags.OPTIONS.compass_user_email
+ )
+ return resp['token']
+
+ def v2_playbook_on_play_start(self, play):
+ self.play = play
+ self.loader = self.play.get_loader()
+ return
+
+ def v2_playbook_on_stats(self, stats):
+ all_vars = self.play.get_variable_manager().get_vars(self.loader)
+ host_vars = all_vars["hostvars"]
+ hosts = sorted(stats.processed.keys())
+ cluster_name = host_vars[hosts[0]]['cluster_name']
+ self._display.warning("cluster_name %s" % cluster_name)
+
+ failures = False
+ unreachable = False
+
+ for host in hosts:
+ summary = stats.summarize(host)
+
+ if summary['failures'] > 0:
+ failures = True
+ if summary['unreachable'] > 0:
+ unreachable = True
+
+ if failures or unreachable:
+ return
+
+ self._login(self.client)
+
+ for host in hosts:
+ clusterhost_name = host + "." + cluster_name
+ self.client.clusterhost_ready(clusterhost_name)