def run_module(self, module_name='ping', module_args=None, hosts="all", inventory_file=None, **kwargs): if not module_args: check_raw = module_name in ('command', 'win_command', 'shell', 'win_shell', 'script', 'raw') module_args = parse_kv(constants.DEFAULT_MODULE_ARGS, check_raw) conn_pass = None if 'conn_pass' in kwargs: conn_pass = kwargs['conn_pass'] become_pass = None if 'become_pass' in kwargs: become_pass = kwargs['become_pass'] passwords = {'conn_pass': conn_pass, 'become_pass': become_pass} options = self._build_opt_dict(inventory_file, **kwargs) variable_manager = vars.VariableManager() loader = dataloader.DataLoader() variable_manager.extra_vars = options.extra_vars ansible_inv = inventory.Inventory(loader=loader, variable_manager=variable_manager, host_list=options.inventory) variable_manager.set_inventory(ansible_inv) ansible_inv.subset(options.subset) play_ds = self._play_ds(hosts, module_name, module_args) play_obj = play.Play().load(play_ds, variable_manager=variable_manager, loader=loader) try: tqm = task_queue_manager.TaskQueueManager( inventory=ansible_inv, variable_manager=variable_manager, loader=loader, options=options, passwords=passwords, stdout_callback='minimal', run_additional_callbacks=True ) # There is no public API for adding callbacks, hence we use a # private property to add callbacks tqm._callback_plugins.extend(self._callbacks) result = tqm.run(play_obj) finally: if tqm: tqm.cleanup() if loader: loader.cleanup_all_tmp_files() stats = tqm._stats result = self._process_stats(stats) return result
def run_playbook(self, playbook_file, inventory_file=None, **kwargs): reload(constants) if not os.path.isfile(playbook_file): raise exceptions.FileNotFound(name=playbook_file) if inventory_file is None: inventory_file = self.inventory_file LOG.debug('Running with inventory file: %s', inventory_file) LOG.debug('Running with playbook file: %s', playbook_file) conn_pass = None if 'conn_pass' in kwargs: conn_pass = kwargs['conn_pass'] become_pass = None if 'become_pass' in kwargs: become_pass = kwargs['become_pass'] passwords = {'conn_pass': conn_pass, 'become_pass': become_pass} playbooks = [playbook_file] options = self._build_opt_dict(inventory_file, **kwargs) variable_manager = vars.VariableManager() loader = dataloader.DataLoader() options.extra_vars = {six.u(key): six.u(value) for key, value in options.extra_vars.items()} variable_manager.extra_vars = options.extra_vars ansible_inv = inventory.Inventory(loader=loader, variable_manager=variable_manager, host_list=options.inventory) ansible_inv.set_playbook_basedir(os.path.dirname(playbook_file)) variable_manager.set_inventory(ansible_inv) ansible_inv.subset(options.subset) pbex = playbook_executor.PlaybookExecutor( playbooks=playbooks, inventory=ansible_inv, variable_manager=variable_manager, loader=loader, options=options, passwords=passwords) self.tqm = pbex._tqm errors_callback = ErrorsCallback() self.add_callback(errors_callback) # There is no public API for adding callbacks, hence we use a private # property to add callbacks pbex._tqm._callback_plugins.extend(self._callbacks) status = pbex.run() stats = pbex._tqm._stats failed_results = errors_callback.failed_results result = self._process_stats(stats, failed_results) return result
def __init__(self, playbook, dci_context, options=None, verbosity=3): if options is None: self._options = Options() self._options.verbosity = verbosity self._options.connection = 'ssh' self._options.become = True self._options.become_method = 'sudo' self._options.become_user = '******' self._loader = dataloader.DataLoader() self._variable_manager = vars.VariableManager() task_queue_manager.display.verbosity = verbosity callback.global_display.verbosity = verbosity self._inventory = inventory.Inventory( loader=self._loader, variable_manager=self._variable_manager, host_list='/etc/ansible/hosts') self._variable_manager.set_inventory(self._inventory) # Instantiate our Callback plugin self._results_callback = DciCallback(dci_context=dci_context) self._playbook = Playbook.load(playbook, variable_manager=self._variable_manager, loader=self._loader) self._pbex = playbook_executor.PlaybookExecutor( playbooks=[playbook], inventory=self._inventory, variable_manager=self._variable_manager, loader=self._loader, options=self._options, passwords={})