Advertisement
Guest User

Untitled

a guest
Dec 9th, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.79 KB | None | 0 0
  1. import os
  2. import collections
  3. from tempfile import NamedTemporaryFile
  4. from ansible.inventory import Inventory
  5. from ansible.vars import VariableManager
  6. from ansible.parsing.dataloader import DataLoader
  7. from ansible.executor import playbook_executor
  8. from ansible.utils.display import Display
  9. from ansible.playbook import play
  10. from datetime import datetime
  11. from ansible.plugins.callback import CallbackBase
  12. from ansible.executor import task_queue_manager
  13.  
  14.  
  15. AnsibleExecutionRecord = collections.namedtuple(
  16. 'AnsibleExecutionRecord', ['host', 'status', 'task', 'payload'])
  17.  
  18.  
  19. STATUS_OK = 'OK'
  20. STATUS_FAILED = 'FAILED'
  21. STATUS_UNREACHABLE = 'UNREACHABLE'
  22. STATUS_SKIPPED = 'SKIPPED'
  23.  
  24. DEFAULT_ERROR_STATUSES = {STATUS_FAILED, STATUS_UNREACHABLE}
  25.  
  26. SSH_COMMON_ARGS = '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
  27.  
  28. STDOUT_LIMIT = 4096 # Symbols count
  29.  
  30. class MyCallback(CallbackBase):
  31.  
  32. CALLBACK_VERSION = 2.0
  33. CALLBACK_TYPE = 'stdout'
  34. CALLBACK_NAME = 'myown'
  35.  
  36. def __init__(self, storage, display=None):
  37. super(MyCallback, self).__init__(display)
  38. self.storage = storage
  39.  
  40. def _store(self, result, status):
  41. record = AnsibleExecutionRecord(
  42. host=result._host.get_name(), status=status,
  43. task=result._task.get_name(), payload=result._result)
  44. self.storage.append(record)
  45.  
  46. def v2_runner_on_failed(self, result, ignore_errors=False):
  47. super(MyCallback, self).v2_runner_on_failed(result)
  48. self._store(result, STATUS_FAILED)
  49.  
  50. def v2_runner_on_ok(self, result):
  51. super(MyCallback, self).v2_runner_on_ok(result)
  52. self._store(result, STATUS_OK)
  53.  
  54. def v2_runner_on_skipped(self, result):
  55. super(MyCallback, self).v2_runner_on_skipped(result)
  56. self._store(result, STATUS_SKIPPED)
  57.  
  58. def v2_runner_on_unreachable(self, result):
  59. super(MyCallback, self).v2_runner_on_unreachable(result)
  60. self._store(result, STATUS_UNREACHABLE)
  61.  
  62.  
  63. class Options(object):
  64. """
  65. Options class to replace Ansible OptParser
  66. """
  67. def __init__(self, verbosity=None, inventory=None, listhosts=None, subset=None, module_paths=None, extra_vars=None,
  68. forks=None, ask_vault_pass=None, vault_password_files=None, new_vault_password_file=None,
  69. output_file=None, tags=None, skip_tags=None, one_line=None, tree=None, ask_sudo_pass=None, ask_su_pass=None,
  70. sudo=None, sudo_user=None, become=None, become_method=None, become_user=None, become_ask_pass=None,
  71. ask_pass=None, private_key_file=None, remote_user=None, connection=None, timeout=None, ssh_common_args=None,
  72. sftp_extra_args=None, scp_extra_args=None, ssh_extra_args=None, poll_interval=None, seconds=None, check=None,
  73. syntax=None, diff=None, force_handlers=None, flush_cache=None, listtasks=None, listtags=None, module_path=None):
  74. self.verbosity = verbosity
  75. self.inventory = inventory
  76. self.listhosts = listhosts
  77. self.subset = subset
  78. self.module_paths = module_paths
  79. self.extra_vars = extra_vars
  80. self.forks = forks
  81. self.ask_vault_pass = ask_vault_pass
  82. self.vault_password_files = vault_password_files
  83. self.new_vault_password_file = new_vault_password_file
  84. self.output_file = output_file
  85. self.tags = tags
  86. self.skip_tags = skip_tags
  87. self.one_line = one_line
  88. self.tree = tree
  89. self.ask_sudo_pass = ask_sudo_pass
  90. self.ask_su_pass = ask_su_pass
  91. self.sudo = sudo
  92. self.sudo_user = sudo_user
  93. self.become = become
  94. self.become_method = become_method
  95. self.become_user = become_user
  96. self.become_ask_pass = become_ask_pass
  97. self.ask_pass = ask_pass
  98. self.private_key_file = private_key_file
  99. self.remote_user = remote_user
  100. self.connection = connection
  101. self.timeout = timeout
  102. self.ssh_common_args = ssh_common_args
  103. self.sftp_extra_args = sftp_extra_args
  104. self.scp_extra_args = scp_extra_args
  105. self.ssh_extra_args = ssh_extra_args
  106. self.poll_interval = poll_interval
  107. self.seconds = seconds
  108. self.check = check
  109. self.syntax = syntax
  110. self.diff = diff
  111. self.force_handlers = force_handlers
  112. self.flush_cache = flush_cache
  113. self.listtasks = listtasks
  114. self.listtags = listtags
  115. self.module_path = module_path
  116.  
  117.  
  118. class Runner(object):
  119.  
  120. def __init__(self, hosts, cmd, verbosity=0):
  121. play_source = {'hosts': hosts, 'tasks': [{'shell': cmd}], 'gather_facts': 'no'}
  122.  
  123. self.options = Options()
  124. self.options.connection = 'ssh'
  125. self.options.remote_user = 'ubuntu'
  126.  
  127. loader = DataLoader()
  128. variable_manager = VariableManager()
  129. inventory_inst = Inventory(loader=loader,
  130. variable_manager=variable_manager,
  131. host_list=hosts)
  132. variable_manager.set_inventory(inventory_inst)
  133.  
  134. # create play
  135. play_inst = play.Play().load(play_source,
  136. variable_manager=variable_manager,
  137. loader=loader)
  138.  
  139. storage = []
  140. callback = MyCallback(storage)
  141.  
  142. # actually run it
  143. tqm = None
  144. try:
  145. tqm = task_queue_manager.TaskQueueManager(
  146. inventory=inventory_inst,
  147. variable_manager=variable_manager,
  148. loader=loader,
  149. options=self.options,
  150. passwords=dict(vault_pass='secret'),
  151. stdout_callback=callback,
  152. )
  153. tqm.run(play_inst)
  154. finally:
  155. if tqm is not None:
  156. tqm.cleanup()
  157.  
  158. self.storage = storage
  159.  
  160. res = Runner(
  161. hosts=['172.18.194.190'],
  162. cmd='uname -a'
  163. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement