Last active
March 22, 2018 23:17
-
-
Save jrgns/98610aed27edeb9cab70261e6623219c to your computer and use it in GitHub Desktop.
Run Ansible from Slack Ruby Bot (https://github.com/slack-ruby/slack-ruby-bot)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# deploybot/commands/ansible-play.rb | |
module Deploybot | |
module Commands | |
class AnsiblePlay < SlackRubyBot::Commands::Base | |
class AnsibleRunner | |
attr_reader :playbook | |
def initialize(playbook) | |
@playbook = playbook | |
end | |
def run | |
`#{command} 2>&1` | |
end | |
def command | |
"#{playbook_cmd} #{playbook_folder}/#{playbook} -i #{inventory}" | |
end | |
def playbook_folder | |
@playbook_folder ||= (ENV['ANSIBLE_PLAYBOOK_FOLDER'] ? ENV['ANSIBLE_PLAYBOOK_FOLDER'] : '/var/ansible/playbooks') | |
end | |
def playbook_cmd | |
@playbook_cmd ||= (ENV['ANSIBLE_BIN'] ? ENV['ANSIBLE_BIN'] : '/usr/bin/ansible-playbook') | |
end | |
def inventory | |
@inventory ||= (ENV['ANSIBLE_HOSTS_FILE'] ? ENV['ANSIBLE_HOSTS_FILE'] : '/etc/ansible/hosts') | |
end | |
def success? | |
$?.success? | |
end | |
end | |
def self.ansible(client, channel, playbook) | |
ar = AnsibleRunner.new(playbook) | |
client.say(channel: channel, text: "Trying to execute `#{ar.command}`") | |
output = ar.run | |
client.say(channel: channel, text: "```\n#{output}\n```") | |
if ar.success? | |
client.say(channel: channel, text: 'It worked!') | |
else | |
client.say(channel: channel, text: 'It didn\'t work... :(') | |
end | |
end | |
command 'whoami' do |client, data, match| | |
client.say(channel: data.channel, text: "You are <@#{data.user}> / #{data.user}") | |
end | |
match(/\!ansible (?<playbook>[^\s]+\.yml)/) do |client, data, match| | |
unless data.user == ENV['SLACK_AUTHED_USER'] | |
client.say(channel: data.channel, text: "<@#{ENV['SLACK_AUTHED_USER']}> someone is screwing with me: <@#{data.user}>") | |
return | |
end | |
ansible(client, data.channel, match[:playbook]) | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment