lita-puppet 0.2.5 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/lita/handlers/puppet.rb +56 -76
- data/lib/lita-puppet.rb +2 -0
- data/lib/utils/ssh.rb +37 -0
- data/lib/utils/text.rb +15 -0
- data/lita-puppet.gemspec +1 -1
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57bbb8a20245057c75fdbc4b930e35f0402bc53d
|
4
|
+
data.tar.gz: 246146da0825efad3b35fc05838a7a5ab1186bd0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 41b578974acfb904c33f5042936e7b2812e6f1de86d2462355fcfb4cbefa003878e817eff8ad65da6b7f7abb633ebd5e252b743fd353f1cddfbf1c33e2dd195d
|
7
|
+
data.tar.gz: d63d1ccce2367c89758658154daba0993be51e0cf6095fdd0181b92db6b12374f415409d9e08545a74a0e7a41b864b9ae56d84a7ffafac4b843c3a75daefb342
|
data/lib/lita/handlers/puppet.rb
CHANGED
@@ -24,106 +24,86 @@ module Lita
|
|
24
24
|
}
|
25
25
|
)
|
26
26
|
|
27
|
+
include ::Utils::SSH
|
28
|
+
include ::Utils::Text
|
29
|
+
|
27
30
|
def r10k_deploy(response)
|
28
31
|
environment = response.matches[0][3]
|
29
32
|
control_repo = config.control_repo_path || '/opt/puppet/control'
|
30
33
|
user = config.ssh_user || 'lita'
|
31
|
-
username = response.user.name
|
34
|
+
username = friendly_name(response.user.name)
|
32
35
|
|
33
36
|
response.reply("#{username}, I'll get right on that. Give me a moment and I'll let you know how it went.")
|
34
37
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
config.master_hostname,
|
40
|
-
user: user,
|
41
|
-
auth_methods: ['publickey'],
|
42
|
-
password_prompt: false
|
43
|
-
)
|
44
|
-
|
45
|
-
begin
|
46
|
-
Timeout::timeout(600) do
|
47
|
-
puppet_master.cd control_repo
|
48
|
-
|
49
|
-
# Need to use sudo from here on
|
50
|
-
puppet_master.enable_sudo
|
51
|
-
|
52
|
-
puppet_master.git :pull
|
53
|
-
|
54
|
-
# scary...
|
55
|
-
puppet_master.disable_safe_mode
|
56
|
-
command = "r10k deploy environment"
|
57
|
-
command << " #{environment}" if environment
|
58
|
-
command << ' -pv'
|
59
|
-
ret = puppet_master.execute command
|
60
|
-
end
|
61
|
-
rescue Exception => e
|
62
|
-
exception = e
|
63
|
-
ensure
|
64
|
-
puppet_master.disconnect
|
38
|
+
result1 = over_ssh(host: config.master_hostname, user: user, timeout: 120) do |server|
|
39
|
+
# Need to use sudo
|
40
|
+
server.enable_sudo
|
41
|
+
server[control_repo].git :pull
|
65
42
|
end
|
66
43
|
|
67
|
-
|
68
|
-
|
69
|
-
response.reply
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
44
|
+
if result1[:exception]
|
45
|
+
response.reply "#{username}, your r10k run didn't seem to work. Looks like there was a problem with Git:"
|
46
|
+
response.reply "/code " + result1[:exception].message
|
47
|
+
raise result1[:exception]
|
48
|
+
end
|
49
|
+
|
50
|
+
result2 = over_ssh(host: config.master_hostname, user: user) do |server|
|
51
|
+
# Need to use sudo
|
52
|
+
server.enable_sudo
|
53
|
+
# scary...
|
54
|
+
server.disable_safe_mode
|
55
|
+
|
56
|
+
command = "r10k deploy environment"
|
57
|
+
command << " #{environment}" if environment
|
58
|
+
command << ' -pv'
|
59
|
+
server.execute command
|
60
|
+
end
|
61
|
+
|
62
|
+
if result2[:exception]
|
63
|
+
response.reply "#{username}, your r10k run didn't seem to work... Maybe it timed out?"
|
64
|
+
response.reply "/code " + result2[:exception].message
|
65
|
+
raise result2[:exception]
|
74
66
|
end
|
67
|
+
|
68
|
+
# build a reply
|
69
|
+
response.reply("#{username}, your r10k deployment is done!")
|
70
|
+
reply_content = [result1[:stdout].join("\n"), result2[:stderr].join("\n")].join("\n")
|
71
|
+
response.reply "/code " + sanitze_for_chat(reply_content)
|
75
72
|
end
|
76
73
|
|
77
74
|
def puppet_agent_run(response)
|
78
75
|
host = response.matches[0][4]
|
79
76
|
user = config.ssh_user || 'lita'
|
80
|
-
username = response.user.name
|
77
|
+
username = friendly_name(response.user.name)
|
81
78
|
|
82
79
|
response.reply("#{username}, I'll run puppet right away. Give me a sec and I'll let you know how it goes.")
|
83
80
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
remote.enable_sudo
|
101
|
-
|
102
|
-
# scary...
|
103
|
-
remote.disable_safe_mode
|
104
|
-
|
105
|
-
# build up the command
|
106
|
-
command = 'puppet agent'
|
107
|
-
command << ' --verbose --no-daemonize'
|
108
|
-
command << ' --no-usecacheonfailure'
|
109
|
-
command << ' --no-splay --show_diff'
|
110
|
-
|
111
|
-
ret = remote.execute command
|
112
|
-
end
|
113
|
-
rescue Exception => e
|
114
|
-
exception = e
|
115
|
-
ensure
|
116
|
-
remote.disconnect
|
81
|
+
result = over_ssh(host: host, user: user) do |server|
|
82
|
+
server.cd '/tmp'
|
83
|
+
|
84
|
+
# Need to use sudo from here on
|
85
|
+
server.enable_sudo
|
86
|
+
|
87
|
+
# scary...
|
88
|
+
server.disable_safe_mode
|
89
|
+
|
90
|
+
# build up the command
|
91
|
+
command = 'puppet agent'
|
92
|
+
command << ' --verbose --no-daemonize'
|
93
|
+
command << ' --no-usecacheonfailure'
|
94
|
+
command << ' --no-splay --show_diff'
|
95
|
+
|
96
|
+
server.execute command
|
117
97
|
end
|
118
98
|
|
119
99
|
# build a reply
|
120
|
-
if
|
121
|
-
response.reply "#{username}, that puppet run is complete! It exited with status #{
|
100
|
+
if !result[:exception]
|
101
|
+
response.reply "#{username}, that puppet run is complete! It exited with status #{result[:exit_status]}."
|
122
102
|
# Send the standard out, but strip off the bash color code stuff...
|
123
|
-
response.reply "/code " +
|
103
|
+
response.reply "/code " + sanitze_for_chat(result[:stdout].join("\n"))
|
124
104
|
else
|
125
105
|
response.reply "#{username}, your puppet run is done, but didn't seem to work... I think it may have timed out."
|
126
|
-
response.reply "/code " + exception.message
|
106
|
+
response.reply "/code " + result[:exception].message
|
127
107
|
end
|
128
108
|
end
|
129
109
|
|
data/lib/lita-puppet.rb
CHANGED
data/lib/utils/ssh.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
module Utils
|
2
|
+
# Utility methods for doing things over SSH
|
3
|
+
module SSH
|
4
|
+
# Intelligently do some things over SSH
|
5
|
+
def over_ssh(opts = {})
|
6
|
+
result = {}
|
7
|
+
fail "MissingSSHHost" unless opts[:host]
|
8
|
+
fail "MissingSSHUser" unless opts[:user]
|
9
|
+
opts[:timeout] ||= 300 # default to a 5 minute timeout
|
10
|
+
|
11
|
+
remote = Rye::Box.new(
|
12
|
+
opts[:host],
|
13
|
+
user: opts[:user],
|
14
|
+
auth_methods: ['publickey'],
|
15
|
+
password_prompt: false
|
16
|
+
)
|
17
|
+
|
18
|
+
exception = nil
|
19
|
+
|
20
|
+
output = begin
|
21
|
+
Timeout::timeout(opts[:timeout]) do
|
22
|
+
yield remote # pass our host back to the user to work with
|
23
|
+
end
|
24
|
+
rescue Exception => e
|
25
|
+
exception = e
|
26
|
+
ensure
|
27
|
+
remote.disconnect
|
28
|
+
end
|
29
|
+
|
30
|
+
result[:exception] = exception
|
31
|
+
result[:exit_status] = output.exit_status
|
32
|
+
result[:stdout] = output.stdout
|
33
|
+
result[:stderr] = output.stderr
|
34
|
+
return result
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/utils/text.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
module Utils
|
2
|
+
# Utility methods for manipulating text
|
3
|
+
module Text
|
4
|
+
# Try to make names more friendly
|
5
|
+
def friendly_name(long_name)
|
6
|
+
long_name.split(/\s/).first
|
7
|
+
end
|
8
|
+
|
9
|
+
# Strip off bad characters
|
10
|
+
def sanitze_for_chat(text)
|
11
|
+
# Remove bash colorings
|
12
|
+
text.gsub(/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]/, '')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lita-puppet.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lita-puppet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Gnagy
|
@@ -123,6 +123,8 @@ files:
|
|
123
123
|
- Rakefile
|
124
124
|
- lib/lita-puppet.rb
|
125
125
|
- lib/lita/handlers/puppet.rb
|
126
|
+
- lib/utils/ssh.rb
|
127
|
+
- lib/utils/text.rb
|
126
128
|
- lita-puppet.gemspec
|
127
129
|
- locales/en.yml
|
128
130
|
- spec/lita/handlers/puppet_spec.rb
|