mirror of
https://github.com/jumpserver/jumpserver.git
synced 2026-01-06 08:04:13 +00:00
[Update] Support history view
This commit is contained in:
@@ -9,6 +9,7 @@ from ansible.parsing.dataloader import DataLoader
|
||||
from ansible.executor.playbook_executor import PlaybookExecutor
|
||||
from ansible.playbook.play import Play
|
||||
import ansible.constants as C
|
||||
from ansible.utils.display import Display
|
||||
|
||||
from .callback import AdHocResultCallback, PlaybookResultCallBack, \
|
||||
CommandResultCallback
|
||||
@@ -21,6 +22,13 @@ C.HOST_KEY_CHECKING = False
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
||||
class CustomDisplay(Display):
|
||||
def display(self, msg, color=None, stderr=False, screen_only=False, log_only=False):
|
||||
pass
|
||||
|
||||
display = CustomDisplay()
|
||||
|
||||
|
||||
Options = namedtuple('Options', [
|
||||
'listtags', 'listtasks', 'listhosts', 'syntax', 'connection',
|
||||
'module_path', 'forks', 'remote_user', 'private_key_file', 'timeout',
|
||||
@@ -123,20 +131,22 @@ class AdHocRunner:
|
||||
ADHoc Runner接口
|
||||
"""
|
||||
results_callback_class = AdHocResultCallback
|
||||
results_callback = None
|
||||
loader_class = DataLoader
|
||||
variable_manager_class = VariableManager
|
||||
options = get_default_options()
|
||||
default_options = get_default_options()
|
||||
|
||||
def __init__(self, inventory, options=None):
|
||||
if options:
|
||||
self.options = options
|
||||
self.options = self.update_options(options)
|
||||
self.inventory = inventory
|
||||
self.loader = DataLoader()
|
||||
self.variable_manager = VariableManager(
|
||||
loader=self.loader, inventory=self.inventory
|
||||
)
|
||||
|
||||
def get_result_callback(self, file_obj=None):
|
||||
return self.__class__.results_callback_class(file_obj=file_obj)
|
||||
|
||||
@staticmethod
|
||||
def check_module_args(module_name, module_args=''):
|
||||
if module_name in C.MODULE_REQUIRE_ARGS and not module_args:
|
||||
@@ -160,19 +170,24 @@ class AdHocRunner:
|
||||
cleaned_tasks.append(task)
|
||||
return cleaned_tasks
|
||||
|
||||
def set_option(self, k, v):
|
||||
kwargs = {k: v}
|
||||
self.options = self.options._replace(**kwargs)
|
||||
def update_options(self, options):
|
||||
if options and isinstance(options, dict):
|
||||
options = self.__class__.default_options._replace(**options)
|
||||
else:
|
||||
options = self.__class__.default_options
|
||||
return options
|
||||
|
||||
def run(self, tasks, pattern, play_name='Ansible Ad-hoc', gather_facts='no'):
|
||||
def run(self, tasks, pattern, play_name='Ansible Ad-hoc', gather_facts='no', file_obj=None):
|
||||
"""
|
||||
:param tasks: [{'action': {'module': 'shell', 'args': 'ls'}, ...}, ]
|
||||
:param pattern: all, *, or others
|
||||
:param play_name: The play name
|
||||
:param gather_facts:
|
||||
:param file_obj: logging to file_obj
|
||||
:return:
|
||||
"""
|
||||
self.check_pattern(pattern)
|
||||
results_callback = self.results_callback_class()
|
||||
self.results_callback = self.get_result_callback(file_obj)
|
||||
cleaned_tasks = self.clean_tasks(tasks)
|
||||
|
||||
play_source = dict(
|
||||
@@ -193,16 +208,16 @@ class AdHocRunner:
|
||||
variable_manager=self.variable_manager,
|
||||
loader=self.loader,
|
||||
options=self.options,
|
||||
stdout_callback=results_callback,
|
||||
stdout_callback=self.results_callback,
|
||||
passwords=self.options.passwords,
|
||||
)
|
||||
logger.debug("Get inventory matched hosts: {}".format(
|
||||
print("Get matched hosts: {}".format(
|
||||
self.inventory.get_matched_hosts(pattern)
|
||||
))
|
||||
|
||||
try:
|
||||
tqm.run(play)
|
||||
return results_callback
|
||||
return self.results_callback
|
||||
except Exception as e:
|
||||
raise AnsibleError(e)
|
||||
finally:
|
||||
|
||||
Reference in New Issue
Block a user