diff --git a/apps/assets/models/node.py b/apps/assets/models/node.py index 3d5c50997..af4ffd839 100644 --- a/apps/assets/models/node.py +++ b/apps/assets/models/node.py @@ -203,17 +203,14 @@ class Node(OrgModelMixin): # 如果使用current_org 在set_current_org时会死循环 _current_org = get_current_org() with transaction.atomic(): - if _current_org.is_root(): - key = '0' - elif _current_org.is_default(): - key = '1' - else: - set_current_org(Organization.root()) - org_nodes_roots = cls.objects.filter(key__regex=r'^[0-9]+$') - org_nodes_roots_keys = org_nodes_roots.values_list('key', flat=True) or ['1'] - key = max([int(k) for k in org_nodes_roots_keys]) - key = str(key + 1) if key != 0 else '2' - set_current_org(_current_org) + if not _current_org.is_real(): + return cls.default_node() + set_current_org(Organization.root()) + org_nodes_roots = cls.objects.filter(key__regex=r'^[0-9]+$') + org_nodes_roots_keys = org_nodes_roots.values_list('key', flat=True) or ['1'] + key = max([int(k) for k in org_nodes_roots_keys]) + key = str(key + 1) if key != 0 else '2' + set_current_org(_current_org) root = cls.objects.create(key=key, value=_current_org.name) return root diff --git a/apps/ops/ansible/callback.py b/apps/ops/ansible/callback.py index 8583b368e..f3e60a458 100644 --- a/apps/ops/ansible/callback.py +++ b/apps/ops/ansible/callback.py @@ -1,6 +1,7 @@ # ~*~ coding: utf-8 ~*~ import datetime +import json from collections import defaultdict from ansible import constants as C @@ -163,6 +164,28 @@ class CommandResultCallback(AdHocResultCallback): self._play = play self._display.banner(msg) + def v2_runner_on_unreachable(self, result): + self.results_summary['success'] = False + self.gather_result("unreachable", result) + msg = result._result.get("msg") + if not msg: + msg = json.dumps(result._result, indent=4) + self._display.display("%s | FAILED! => \n%s" % ( + result._host.get_name(), + msg, + ), color=C.COLOR_ERROR) + + def v2_runner_on_failed(self, result, ignore_errors=False): + self.results_summary['success'] = False + self.gather_result("failed", result) + msg = result._result.get("msg") or result._result.get("module_stdout") + if not msg: + msg = json.dumps(result._result, indent=4) + self._display.display("%s | FAILED! => \n%s" % ( + result._host.get_name(), + msg, + ), color=C.COLOR_ERROR) + def _print_task_banner(self, task): pass