Преглед изворни кода

Fix etcd scaleup plays

This commit ensures that only the proper host groups
have sanity checks run during etcd scaleup.

This commit also adds additional debugging statements
to sanity_checks.py to make it easier to debug when
an error occurs.

Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1543771
Michael Gugino пре 7 година
родитељ
комит
a043ba9e99
2 измењених фајлова са 19 додато и 1 уклоњено
  1. 1 0
      playbooks/openshift-etcd/scaleup.yml
  2. 18 1
      roles/lib_utils/action_plugins/sanity_checks.py

+ 1 - 0
playbooks/openshift-etcd/scaleup.yml

@@ -45,6 +45,7 @@
   vars:
   vars:
     skip_version: True
     skip_version: True
     l_init_fact_hosts: "oo_masters_to_config:oo_etcd_to_config:oo_lb_to_config:oo_new_etcd_to_config"
     l_init_fact_hosts: "oo_masters_to_config:oo_etcd_to_config:oo_lb_to_config:oo_new_etcd_to_config"
+    l_sanity_check_hosts: "{{ groups['oo_new_etcd_to_config'] | union(groups['oo_masters_to_config']) | union(groups['oo_etcd_to_config']) }}"
     l_openshift_version_set_hosts: "all:!all"
     l_openshift_version_set_hosts: "all:!all"
     l_openshift_version_check_hosts: "all:!all"
     l_openshift_version_check_hosts: "all:!all"
   when:
   when:

+ 18 - 1
roles/lib_utils/action_plugins/sanity_checks.py

@@ -54,6 +54,12 @@ class ActionModule(ActionBase):
     def template_var(self, hostvars, host, varname):
     def template_var(self, hostvars, host, varname):
         """Retrieve a variable from hostvars and template it.
         """Retrieve a variable from hostvars and template it.
            If undefined, return None type."""
            If undefined, return None type."""
+        # We will set the current host and variable checked for easy debugging
+        # if there are any unhandled exceptions.
+        # pylint: disable=W0201
+        self.last_checked_var = varname
+        # pylint: disable=W0201
+        self.last_checked_host = host
         res = hostvars[host].get(varname)
         res = hostvars[host].get(varname)
         if res is None:
         if res is None:
             return None
             return None
@@ -156,6 +162,11 @@ class ActionModule(ActionBase):
         # pylint: disable=W0201
         # pylint: disable=W0201
         self.task_vars = task_vars or {}
         self.task_vars = task_vars or {}
 
 
+        # pylint: disable=W0201
+        self.last_checked_host = "none"
+        # pylint: disable=W0201
+        self.last_checked_var = "none"
+
         # self._task.args holds task parameters.
         # self._task.args holds task parameters.
         # check_hosts is a parameter to this plugin, and should provide
         # check_hosts is a parameter to this plugin, and should provide
         # a list of hosts.
         # a list of hosts.
@@ -172,7 +183,13 @@ class ActionModule(ActionBase):
 
 
         # We loop through each host in the provided list check_hosts
         # We loop through each host in the provided list check_hosts
         for host in check_hosts:
         for host in check_hosts:
-            self.run_checks(hostvars, host)
+            try:
+                self.run_checks(hostvars, host)
+            except Exception as uncaught_e:
+                msg = "last_checked_host: {}, last_checked_var: {};"
+                msg = msg.format(self.last_checked_host, self.last_checked_var)
+                msg += str(uncaught_e)
+                raise errors.AnsibleModuleError(msg)
 
 
         result["changed"] = False
         result["changed"] = False
         result["failed"] = False
         result["failed"] = False