pero 0.5.5 → 0.5.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/pero/puppet.rb +62 -57
- data/lib/pero/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 987ee0dddd45d8f05e4a1ca60cfe2df83a31542e2793931ddfda01446f3bbe1b
|
4
|
+
data.tar.gz: 791d656dc30d9530316a10fa5b7dc08c69e7089d24a5b040f884435a44f4f038
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1745f07c1634fc170bd6b34c5f2332627a86d2352645045919cdd26e5cf57a3b6bb32e69606b2be4f7dbc6272153905f36095699062a89d047c2e1e54dacd330
|
7
|
+
data.tar.gz: e866274608d76736a53f74f0d9e2b0503c55e200548b1df204059743daca66c7cb208ff387cd9ffcd9bbe170fbd6cc7beb433822ffd55b4c4809104982b537a4
|
data/lib/pero/puppet.rb
CHANGED
@@ -9,9 +9,9 @@ module Specinfra
|
|
9
9
|
return @sudo_password if defined?(@sudo_password)
|
10
10
|
|
11
11
|
# TODO: Fix this dirty hack
|
12
|
-
return nil unless caller.any? {|call| call.include?('channel_data') }
|
12
|
+
return nil unless caller.any? { |call| call.include?('channel_data') }
|
13
13
|
|
14
|
-
print
|
14
|
+
print 'sudo password: '
|
15
15
|
@sudo_password = STDIN.noecho(&:gets).strip
|
16
16
|
print "\n"
|
17
17
|
@sudo_password
|
@@ -23,6 +23,7 @@ module Pero
|
|
23
23
|
class Puppet
|
24
24
|
extend Pero::SshExecutable
|
25
25
|
attr_reader :specinfra
|
26
|
+
|
26
27
|
def initialize(host, options, mutex)
|
27
28
|
@options = options.dup
|
28
29
|
@mutex = mutex
|
@@ -30,15 +31,13 @@ module Pero
|
|
30
31
|
@options[:host] = host
|
31
32
|
so = ssh_options
|
32
33
|
|
33
|
-
|
34
|
-
so.delete(:strict_host_key_checking)
|
35
|
-
end
|
34
|
+
so.delete(:strict_host_key_checking) unless Net::SSH::VALID_OPTIONS.include?(:strict_host_key_checking)
|
36
35
|
|
37
36
|
@specinfra = Specinfra::Backend::Ssh.new(
|
38
37
|
request_pty: true,
|
39
38
|
host: so[:host_name],
|
40
39
|
ssh_options: so,
|
41
|
-
disable_sudo: false
|
40
|
+
disable_sudo: false
|
42
41
|
)
|
43
42
|
end
|
44
43
|
|
@@ -48,15 +47,15 @@ module Pero
|
|
48
47
|
opts[:host_name] = @options[:host]
|
49
48
|
|
50
49
|
# from ssh-config
|
51
|
-
ssh_config_files = @options[
|
52
|
-
opts.merge!(Net::SSH::Config.for(@options[
|
53
|
-
opts[:user] = @options[
|
54
|
-
opts[:password] = @options[
|
55
|
-
opts[:keys] = [@options[
|
56
|
-
opts[:port] = @options[
|
57
|
-
opts[:timeout] = @options[
|
58
|
-
|
59
|
-
if @options[
|
50
|
+
ssh_config_files = @options['ssh_config'] ? [@options['ssh_config']] : Net::SSH::Config.default_files
|
51
|
+
opts.merge!(Net::SSH::Config.for(@options['host'], ssh_config_files))
|
52
|
+
opts[:user] = @options['user'] || opts[:user] || Etc.getlogin
|
53
|
+
opts[:password] = @options['password'] if @options['password']
|
54
|
+
opts[:keys] = [@options['key']] if @options['key']
|
55
|
+
opts[:port] = @options['port'] if @options['port']
|
56
|
+
opts[:timeout] = @options['timeout'] if @options['timeout']
|
57
|
+
|
58
|
+
if @options['vagrant']
|
60
59
|
config = Tempfile.new('', Dir.tmpdir)
|
61
60
|
hostname = opts[:host_name] || 'default'
|
62
61
|
vagrant_cmd = "vagrant ssh-config #{hostname} > #{config.path}"
|
@@ -70,8 +69,8 @@ module Pero
|
|
70
69
|
opts.merge!(Net::SSH::Config.for(hostname, [config.path]))
|
71
70
|
end
|
72
71
|
|
73
|
-
if @options[
|
74
|
-
print
|
72
|
+
if @options['ask_password']
|
73
|
+
print 'password: '
|
75
74
|
password = STDIN.noecho(&:gets).strip
|
76
75
|
print "\n"
|
77
76
|
opts.merge!(password: password)
|
@@ -82,47 +81,55 @@ module Pero
|
|
82
81
|
def install
|
83
82
|
osi = specinfra.os_info
|
84
83
|
os = case osi[:family]
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
os.install(@options[
|
84
|
+
when 'redhat'
|
85
|
+
Redhat.new(specinfra, osi)
|
86
|
+
else
|
87
|
+
raise 'sorry unsupport os, please pull request!!!'
|
88
|
+
end
|
89
|
+
os.install(@options['agent-version']) if @options['agent-version']
|
91
90
|
Pero::History::Attribute.new(specinfra, @options).save
|
92
91
|
end
|
93
92
|
|
94
93
|
def stop_master
|
94
|
+
@mutex.lock
|
95
95
|
run_container.kill if docker.alerady_run?
|
96
|
+
ensure
|
97
|
+
@mutex.unlock
|
96
98
|
end
|
97
99
|
|
98
100
|
def serve_master
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
101
|
+
container = run_container
|
102
|
+
begin
|
103
|
+
yield container
|
104
|
+
rescue StandardError => e
|
105
|
+
Pero.log.error e.inspect
|
106
|
+
raise e
|
107
|
+
end
|
106
108
|
end
|
107
109
|
|
108
110
|
def docker
|
109
|
-
Pero::Docker.new(@options[
|
111
|
+
Pero::Docker.new(@options['server-version'], @options['image-name'], @options['environment'], @options['volumes'])
|
110
112
|
end
|
111
113
|
|
112
114
|
def run_container
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
@mutex.unlock
|
118
|
-
end
|
115
|
+
@mutex.lock
|
116
|
+
docker.alerady_run? || docker.run
|
117
|
+
ensure
|
118
|
+
@mutex.unlock
|
119
119
|
end
|
120
120
|
|
121
121
|
def apply
|
122
122
|
serve_master do |container|
|
123
|
-
port = container.info[
|
123
|
+
port = container.info['Ports'].first['PublicPort']
|
124
|
+
https = Net::HTTP.new('localhost', port)
|
125
|
+
https.use_ssl = true
|
126
|
+
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
127
|
+
https.start do
|
128
|
+
https.delete('/puppet-admin-api/v1/environment-cache')
|
129
|
+
end
|
130
|
+
|
124
131
|
begin
|
125
|
-
tmpdir=container.info[
|
132
|
+
tmpdir = container.info['id'][0..5]
|
126
133
|
in_ssh_forwarding(port) do |host, ssh|
|
127
134
|
Pero.log.info "#{host}:puppet cmd[#{puppet_cmd}]"
|
128
135
|
cmd = "mkdir -p /tmp/puppet/#{tmpdir} && unshare -m -- /bin/bash -c 'export PATH=$PATH:/opt/puppetlabs/bin/ && \
|
@@ -131,14 +138,14 @@ module Pero
|
|
131
138
|
Pero.log.debug "run cmd:#{cmd}"
|
132
139
|
ssh_exec(ssh, host, cmd)
|
133
140
|
|
134
|
-
if @options[
|
141
|
+
if @options['one-shot']
|
135
142
|
cmd = "/bin/rm -rf /tmp/puppet/#{tmpdir}"
|
136
143
|
ssh_exec(ssh, host, cmd)
|
137
144
|
end
|
138
145
|
|
139
|
-
ssh.loop {true} if ENV['PERO_DEBUG']
|
146
|
+
ssh.loop { true } if ENV['PERO_DEBUG']
|
140
147
|
end
|
141
|
-
rescue => e
|
148
|
+
rescue StandardError => e
|
142
149
|
Pero.log.error "puppet apply error:#{e.inspect}"
|
143
150
|
end
|
144
151
|
end
|
@@ -149,15 +156,15 @@ module Pero
|
|
149
156
|
def ssh_exec(ssh, host, cmd)
|
150
157
|
ssh.open_channel do |ch|
|
151
158
|
ch.request_pty
|
152
|
-
ch.on_data do |
|
159
|
+
ch.on_data do |_ch, data|
|
153
160
|
Pero.log.info "#{host}:#{data.chomp}"
|
154
161
|
end
|
155
162
|
|
156
|
-
ch.on_extended_data do |
|
163
|
+
ch.on_extended_data do |_c, _type, data|
|
157
164
|
Pero.log.error "#{host}:#{data.chomp}"
|
158
165
|
end
|
159
166
|
|
160
|
-
ch.exec specinfra.build_command(cmd) do |
|
167
|
+
ch.exec specinfra.build_command(cmd) do |_ch, success|
|
161
168
|
raise "could not execute #{cmd}" unless success
|
162
169
|
end
|
163
170
|
end
|
@@ -165,29 +172,27 @@ module Pero
|
|
165
172
|
end
|
166
173
|
|
167
174
|
def puppet_cmd
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
175
|
+
if Gem::Version.new('5.0.0') > Gem::Version.new(@options['agent-version'])
|
176
|
+
"puppet agent --no-daemonize --onetime #{parse_puppet_option(@options)} --ca_port 8140 --ca_server localhost --masterport 8140 --server localhost"
|
177
|
+
else
|
178
|
+
"/opt/puppetlabs/bin/puppet agent --no-daemonize --onetime #{parse_puppet_option(@options)} --ca_server localhost --masterport 8140 --server localhost"
|
179
|
+
end
|
173
180
|
end
|
174
181
|
|
175
182
|
def parse_puppet_option(options)
|
176
|
-
ret =
|
177
|
-
%w
|
183
|
+
ret = ''
|
184
|
+
%w[noop verbose test].each do |n|
|
178
185
|
ret << " --#{n}" if options[n]
|
179
186
|
end
|
180
|
-
ret << " --tags #{options[
|
181
|
-
ret << " --environment #{options[
|
187
|
+
ret << " --tags #{options['tags'].join(',')}" if options['tags']
|
188
|
+
ret << " --environment #{options['environment']}" if options['environment']
|
182
189
|
ret
|
183
190
|
end
|
184
191
|
|
185
192
|
def in_ssh_forwarding(port)
|
186
193
|
options = specinfra.get_config(:ssh_options)
|
187
194
|
|
188
|
-
|
189
|
-
options.delete(:strict_host_key_checking)
|
190
|
-
end
|
195
|
+
options.delete(:strict_host_key_checking) unless Net::SSH::VALID_OPTIONS.include?(:strict_host_key_checking)
|
191
196
|
|
192
197
|
Pero.log.info "start forwarding #{specinfra.get_config(:host)}:8140 => localhost:#{port}"
|
193
198
|
Net::SSH.start(
|
data/lib/pero/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pero
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- pyama86
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-02-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -199,7 +199,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
199
199
|
- !ruby/object:Gem::Version
|
200
200
|
version: '0'
|
201
201
|
requirements: []
|
202
|
-
rubygems_version: 3.4.
|
202
|
+
rubygems_version: 3.4.19
|
203
203
|
signing_key:
|
204
204
|
specification_version: 4
|
205
205
|
summary: tool for puppet apply from our desktop.
|