Advertisement
Guest User

Untitled

a guest
Feb 25th, 2016
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.03 KB | None | 0 0
  1. @manager.task(name='schedule')
  2. def schedule(playbook, variables, tags, is_local=None):
  3. slack.api_token = settings.SLACK_TOKEN
  4. vault_pass = utils.read_vault_file(settings.VAULT_PASSWORD_FILE)
  5. playbook_file = settings.PLAYBOOK_BASE_PATH + '/' + playbook + '.yml'
  6.  
  7. stats = callbacks.AggregateStats()
  8. playbook_cb = callbacks.PlaybookCallbacks(verbose=utils.VERBOSITY)
  9. runner_cb = callbacks.PlaybookRunnerCallbacks(stats, verbose=utils.VERBOSITY)
  10.  
  11. inventory = ansible.inventory.Inventory(settings.ANSIBLE_INVENTORY, vault_password=vault_pass)
  12.  
  13. variables["datetime"] = time.strftime("%Y-%m-%d / %H:%M:%S")
  14.  
  15. if "ec2volumes-cleanup" in tags:
  16. variables["skip_from"] = (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d')
  17. variables["skip_to"] = datetime.now().strftime('%Y-%m-%d')
  18.  
  19. if is_local:
  20. inventory.subset('localhost')
  21.  
  22. playbook_run = ansible.playbook.PlayBook(
  23. playbook=playbook_file,
  24. module_path=C.DEFAULT_MODULE_PATH,
  25. inventory=inventory,
  26. forks=C.DEFAULT_FORKS,
  27. remote_user=C.DEFAULT_REMOTE_USER,
  28. remote_pass=None,
  29. callbacks=playbook_cb,
  30. runner_callbacks=runner_cb,
  31. stats=stats,
  32. timeout=C.DEFAULT_TIMEOUT,
  33. transport=C.DEFAULT_TRANSPORT,
  34. become=C.DEFAULT_BECOME,
  35. become_method=C.DEFAULT_BECOME_METHOD,
  36. become_user=None,
  37. become_pass=None,
  38. extra_vars=variables,
  39. private_key_file=C.DEFAULT_PRIVATE_KEY_FILE,
  40. only_tags=tags,
  41. skip_tags=None,
  42. check=False,
  43. diff=False,
  44. vault_password=vault_pass,
  45. force_handlers=False
  46. )
  47.  
  48. failed_hosts = []
  49. unreachable_hosts = []
  50.  
  51. try:
  52. playbook_run.run()
  53.  
  54. hosts = sorted(playbook_run.stats.processed.keys())
  55. display(callbacks.banner("PLAY RECAP"))
  56. playbook_cb.on_stats(playbook_run.stats)
  57.  
  58. for h in hosts:
  59. t = playbook_run.stats.summarize(h)
  60. if t['failures'] > 0:
  61. failed_hosts.append(h)
  62. if t['unreachable'] > 0:
  63. unreachable_hosts.append(h)
  64.  
  65. for h in hosts:
  66. t = playbook_run.stats.summarize(h)
  67.  
  68. display("%s : %s %s %s %s" % (
  69. hostcolor(h, t),
  70. colorize('ok', t['ok'], 'green'),
  71. colorize('changed', t['changed'], 'yellow'),
  72. colorize('unreachable', t['unreachable'], 'red'),
  73. colorize('failed', t['failures'], 'red')),
  74. screen_only=True
  75. )
  76.  
  77. display("%s : %s %s %s %s" % (
  78. hostcolor(h, t, False),
  79. colorize('ok', t['ok'], None),
  80. colorize('changed', t['changed'], None),
  81. colorize('unreachable', t['unreachable'], None),
  82. colorize('failed', t['failures'], None)),
  83. log_only=True
  84. )
  85.  
  86. if len(unreachable_hosts) > 0 or len(failed_hosts) > 0:
  87. message_color = "yellow"
  88. message = "Unstable " + playbook + " (" + str(variables) + " - " + str(tags) + ") scheduled task - " + \
  89. str(len(unreachable_hosts)) + " unreachable and " + str(len(failed_hosts)) + \
  90. " failed hosts - inspect logs"
  91. return_code = 2
  92. else:
  93. message_color = "green"
  94. message = "Stable " + playbook + " (" + str(variables) + " - " + str(tags) + \
  95. ") scheduled task completed - all hosts succeeded."
  96. return_code = 0
  97.  
  98. slack.chat.post_message(settings.SLACK_ROOM, message, username=settings.SLACK_SENDER)
  99. return return_code
  100.  
  101. except errors.AnsibleError, e:
  102. display("ERROR: %s" % e, color='red')
  103. message_color = "red"
  104. message = "Failed " + playbook + " (" + str(variables) + " - " + str(tags) + \
  105. + ") schedule task - there was an error executing the ansible playbook."
  106. return_code = 1
  107. slack.chat.post_message(settings.SLACK_ROOM, message, username=settings.SLACK_SENDER)
  108. return return_code
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement