Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import collections
- from tempfile import NamedTemporaryFile
- from ansible.inventory import Inventory
- from ansible.vars import VariableManager
- from ansible.parsing.dataloader import DataLoader
- from ansible.executor import playbook_executor
- from ansible.utils.display import Display
- from ansible.playbook import play
- from datetime import datetime
- from ansible.plugins.callback import CallbackBase
- from ansible.executor import task_queue_manager
- AnsibleExecutionRecord = collections.namedtuple(
- 'AnsibleExecutionRecord', ['host', 'status', 'task', 'payload'])
- STATUS_OK = 'OK'
- STATUS_FAILED = 'FAILED'
- STATUS_UNREACHABLE = 'UNREACHABLE'
- STATUS_SKIPPED = 'SKIPPED'
- DEFAULT_ERROR_STATUSES = {STATUS_FAILED, STATUS_UNREACHABLE}
- SSH_COMMON_ARGS = '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
- STDOUT_LIMIT = 4096 # Symbols count
- class MyCallback(CallbackBase):
- CALLBACK_VERSION = 2.0
- CALLBACK_TYPE = 'stdout'
- CALLBACK_NAME = 'myown'
- def __init__(self, storage, display=None):
- super(MyCallback, self).__init__(display)
- self.storage = storage
- def _store(self, result, status):
- record = AnsibleExecutionRecord(
- host=result._host.get_name(), status=status,
- task=result._task.get_name(), payload=result._result)
- self.storage.append(record)
- def v2_runner_on_failed(self, result, ignore_errors=False):
- super(MyCallback, self).v2_runner_on_failed(result)
- self._store(result, STATUS_FAILED)
- def v2_runner_on_ok(self, result):
- super(MyCallback, self).v2_runner_on_ok(result)
- self._store(result, STATUS_OK)
- def v2_runner_on_skipped(self, result):
- super(MyCallback, self).v2_runner_on_skipped(result)
- self._store(result, STATUS_SKIPPED)
- def v2_runner_on_unreachable(self, result):
- super(MyCallback, self).v2_runner_on_unreachable(result)
- self._store(result, STATUS_UNREACHABLE)
- class Options(object):
- """
- Options class to replace Ansible OptParser
- """
- def __init__(self, verbosity=None, inventory=None, listhosts=None, subset=None, module_paths=None, extra_vars=None,
- forks=None, ask_vault_pass=None, vault_password_files=None, new_vault_password_file=None,
- output_file=None, tags=None, skip_tags=None, one_line=None, tree=None, ask_sudo_pass=None, ask_su_pass=None,
- sudo=None, sudo_user=None, become=None, become_method=None, become_user=None, become_ask_pass=None,
- ask_pass=None, private_key_file=None, remote_user=None, connection=None, timeout=None, ssh_common_args=None,
- sftp_extra_args=None, scp_extra_args=None, ssh_extra_args=None, poll_interval=None, seconds=None, check=None,
- syntax=None, diff=None, force_handlers=None, flush_cache=None, listtasks=None, listtags=None, module_path=None):
- self.verbosity = verbosity
- self.inventory = inventory
- self.listhosts = listhosts
- self.subset = subset
- self.module_paths = module_paths
- self.extra_vars = extra_vars
- self.forks = forks
- self.ask_vault_pass = ask_vault_pass
- self.vault_password_files = vault_password_files
- self.new_vault_password_file = new_vault_password_file
- self.output_file = output_file
- self.tags = tags
- self.skip_tags = skip_tags
- self.one_line = one_line
- self.tree = tree
- self.ask_sudo_pass = ask_sudo_pass
- self.ask_su_pass = ask_su_pass
- self.sudo = sudo
- self.sudo_user = sudo_user
- self.become = become
- self.become_method = become_method
- self.become_user = become_user
- self.become_ask_pass = become_ask_pass
- self.ask_pass = ask_pass
- self.private_key_file = private_key_file
- self.remote_user = remote_user
- self.connection = connection
- self.timeout = timeout
- self.ssh_common_args = ssh_common_args
- self.sftp_extra_args = sftp_extra_args
- self.scp_extra_args = scp_extra_args
- self.ssh_extra_args = ssh_extra_args
- self.poll_interval = poll_interval
- self.seconds = seconds
- self.check = check
- self.syntax = syntax
- self.diff = diff
- self.force_handlers = force_handlers
- self.flush_cache = flush_cache
- self.listtasks = listtasks
- self.listtags = listtags
- self.module_path = module_path
- class Runner(object):
- def __init__(self, hosts, cmd, verbosity=0):
- play_source = {'hosts': hosts, 'tasks': [{'shell': cmd}], 'gather_facts': 'no'}
- self.options = Options()
- self.options.connection = 'ssh'
- self.options.remote_user = 'ubuntu'
- loader = DataLoader()
- variable_manager = VariableManager()
- inventory_inst = Inventory(loader=loader,
- variable_manager=variable_manager,
- host_list=hosts)
- variable_manager.set_inventory(inventory_inst)
- # create play
- play_inst = play.Play().load(play_source,
- variable_manager=variable_manager,
- loader=loader)
- storage = []
- callback = MyCallback(storage)
- # actually run it
- tqm = None
- try:
- tqm = task_queue_manager.TaskQueueManager(
- inventory=inventory_inst,
- variable_manager=variable_manager,
- loader=loader,
- options=self.options,
- passwords=dict(vault_pass='secret'),
- stdout_callback=callback,
- )
- tqm.run(play_inst)
- finally:
- if tqm is not None:
- tqm.cleanup()
- self.storage = storage
- res = Runner(
- hosts=['172.18.194.190'],
- cmd='uname -a'
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement