Guest User

Untitled

a guest
Sep 21st, 2016
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.05 KB | None | 0 0
  1. #!/usr/bin/python3
  2.  
  3. import logging, sys
  4. logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
  5.  
  6. from collections import namedtuple
  7. from ansible.parsing.dataloader import DataLoader
  8. from ansible.vars import VariableManager
  9. from ansible.inventory import Inventory
  10. from ansible.playbook.play import Play
  11. from ansible.executor.task_queue_manager import TaskQueueManager
  12.  
  13. from ansible.playbook.task import Task
  14. from ansible.parsing.splitter import parse_kv
  15.  
  16.  
  17. class Ansible:
  18.  
  19. def __init__(self):
  20. self.logger = logging.getLogger("ansible")
  21. return
  22.  
  23. def play(self, target_ip, tasks):
  24. Options = namedtuple('Options', ['connection','module_path', 'forks', 'remote_user', 'private_key_file', 'ssh_common_args', 'ssh_extra_args', 'sftp_extra_args', 'scp_extra_args', 'become', 'become_method', 'become_user', 'verbosity', 'check'])
  25. # initialize needed objects
  26. variable_manager = VariableManager()
  27. # TODO load vars
  28. loader = DataLoader()
  29. options = Options(
  30. connection='ssh',
  31. module_path='/etc/ansible/modules',
  32. forks=100,
  33. remote_user="ansible",
  34. private_key_file="/etc/ansible/ansible.key.pem",
  35. ssh_common_args=None,
  36. ssh_extra_args=None,
  37. sftp_extra_args=None,
  38. scp_extra_args=None,
  39. become=True,
  40. become_method="sudo",
  41. become_user="root",
  42. verbosity=None,
  43. check=False)
  44. passwords = dict(vault_pass='secret')
  45.  
  46. # create inventory and pass to var manager
  47. inventory = Inventory(loader=loader, variable_manager=variable_manager, \
  48. host_list=[target_ip])
  49. variable_manager.set_inventory(inventory)
  50.  
  51. # create play with tasks
  52. task_list = []
  53. for task in tasks:
  54. # task = "sysctl: name=net.ipv4.ip_forward value=1 state=present
  55. module, tasks_str = task.split(':', 1)
  56. # parse args
  57. kv_args = parse_kv(tasks_str)
  58. # create datastructure
  59. task_list.append(
  60. dict(action=dict(module=module, args=kv_args), register='shell_out'),
  61. )
  62.  
  63. play_source = dict(
  64. name = "Ansible Play {}".format(target_ip),
  65. hosts = target_ip,
  66. gather_facts = 'no',
  67. tasks = task_list
  68. )
  69. play = Play().load(play_source, variable_manager=variable_manager, loader=loader)
  70.  
  71. # actually run it
  72. tqm = None
  73. try:
  74. tqm = TaskQueueManager(
  75. inventory=inventory,
  76. variable_manager=variable_manager,
  77. loader=loader,
  78. options=options,
  79. passwords=passwords,
  80. # TODO callback must be an instance of CallbackBase or the name of a callback plugin
  81. stdout_callback='default',
  82. )
  83. result = tqm.run(play)
  84. finally:
  85. if tqm is not None:
  86. tqm.cleanup()
  87.  
  88. return 0, ""
Add Comment
Please, Sign In to add comment