mofa 0.4.2 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8e463c04e4e576276ec896b3220d00846341b516
4
- data.tar.gz: 4bbba336294fb1a3052024849305ae6efbba0d84
3
+ metadata.gz: 2731aa873c3d661b23a5c8bc92ec3809b5953db1
4
+ data.tar.gz: ccb852563643940df098c745947413007f91eee5
5
5
  SHA512:
6
- metadata.gz: 740be96d7d8cfb80ef6248081e6199c8e259b0a4705bc04f4368a152e0c85252c9e54ae150a18ba55dc0cb035450637bb526d910d365d7daf6f2938083fbda3d
7
- data.tar.gz: 8edb1f46004836e6c8226b1de41c5e588b10749af2a6efc367d38d9101453c3dfafe1c7a2ff7f0dbd95c7ef6edb88fd1d56e9f6b6aa861f94c5dd0be623a908d
6
+ metadata.gz: 2e05ebdb1799829e9bcb4a95bafa9100de7f741ff19b1822a1347448f7d10b6d39691337fd20db82750753dcb3d17792d0c6cd57b7faf209788a5aa64d862543
7
+ data.tar.gz: cdb0efffafd560b2c74c44fe461323bf6ff97d19a719eed6c3ef6c8d8362b3ec8ca68b5f6892dc0ba585cfa13c2d386697b71576227633d50373563ca40e7e4b
@@ -84,14 +84,14 @@ class ProvisionCmd < MofaCmd
84
84
  solo_rb = <<-"EOF"
85
85
  cookbook_path [ "#{solo_dir}/cookbooks" ]
86
86
  data_bag_path "#{solo_dir}/data_bags"
87
- log_level :info
88
- log_location "#{solo_dir}/log"
89
87
  verify_api_cert true
90
88
  EOF
91
89
 
92
90
  file.write(solo_rb)
93
91
  end
94
92
  end
93
+ # log_level :info
94
+ # log_location "#{solo_dir}/log"
95
95
 
96
96
  def create_node_json(sftp, hostname, solo_dir, attributes_map)
97
97
  puts "Remotely creating \"#{solo_dir}/node.json\" on #{hostname}..."
@@ -160,67 +160,83 @@ class ProvisionCmd < MofaCmd
160
160
  sftp.upload!("#{cookbook.pkg_dir}/#{cookbook.pkg_name}", "#{solo_dir}/#{cookbook.pkg_name}")
161
161
  puts 'OK.'
162
162
 
163
- # Do it -> Execute the chef-solo run!
164
- Net::SSH.start(hostname, Mofa::Config.config['ssh_user'], keys: [Mofa::Config.config['ssh_keyfile']], port: Mofa::Config.config['ssh_port'], use_agent: false, verbose: :error) do |ssh|
165
- puts "Remotely unpacking Cookbook Package #{cookbook.pkg_name}... "
166
- out = ssh_exec!(ssh, "cd #{solo_dir}; tar xvfz #{cookbook.pkg_name}")
167
- if out[0] != 0
168
- puts "ERROR (#{out[0]}): #{out[2]}"
169
- puts out[1]
170
- else
171
- puts 'OK.'
163
+ File.open("#{cookbook.pkg_dir}/log", 'w') do |log_file|
164
+ # Do it -> Execute the chef-solo run!
165
+ begin
166
+ begin
167
+ Net::SSH.start(hostname, Mofa::Config.config['ssh_user'], keys: [Mofa::Config.config['ssh_keyfile']], port: Mofa::Config.config['ssh_port'], use_agent: false, verbose: :error) do |ssh|
168
+ puts "Remotely unpacking Cookbook Package #{cookbook.pkg_name}... "
169
+ ssh.exec!("cd #{solo_dir}; tar xvfz #{cookbook.pkg_name}") do |_ch, _stream, line|
170
+ puts line if Mofa::CLI.option_debug
171
+ log_file.write(line) if Mofa::CLI.option_debug
172
+ end
173
+ puts 'OK.'
174
+ end
175
+ rescue StandardError => e
176
+ status_msg = "ERROR: Unpacking cookbook archive on remote host #{hostname} failed (#{e.message})!"
177
+ chef_solo_runs[hostname].store('status', 'FAIL')
178
+ chef_solo_runs[hostname].store('status_msg', status_msg)
179
+ puts status_msg
180
+ log_file.write(status_msg)
181
+ raise e
182
+ end
183
+ begin
184
+ Net::SSH.start(hostname, Mofa::Config.config['ssh_user'], keys: [Mofa::Config.config['ssh_keyfile']], port: Mofa::Config.config['ssh_port'], use_agent: false, verbose: :error) do |ssh|
185
+ puts "Remotely running chef-solo -c #{solo_dir}/solo.rb -j #{solo_dir}/node.json"
186
+ chef_run_exit_code = 0
187
+ ssh.exec!("sudo chef-solo -c #{solo_dir}/solo.rb -j #{solo_dir}/node.json") do |_ch, _stream, line|
188
+ puts line if Mofa::CLI.option_verbose || Mofa::CLI.option_debug
189
+ log_file.write(line)
190
+ chef_run_exit_code = 1 if line =~ /Chef run process exited unsuccessfully/
191
+ end
192
+ raise 'Chef run process exited unsuccessfully' if chef_run_exit_code != 0
193
+ chef_solo_runs[hostname].store('status', 'SUCCESS')
194
+ chef_solo_runs[hostname].store('status_msg', '')
195
+ puts 'Chef-solo run was a SUCCESS!'
196
+ log_file.write('chef-solo run: SUCCESS')
197
+ end
198
+ rescue StandardError => e
199
+ status_msg = "ERROR: Chef-solo run on #{hostname} FAILED! (#{e.message})"
200
+ chef_solo_runs[hostname].store('status', 'FAIL')
201
+ chef_solo_runs[hostname].store('status_msg', status_msg)
202
+ puts status_msg
203
+ log_file.write(status_msg)
204
+ raise e
205
+ end
206
+ rescue StandardError => e
207
+ log_file.write('chef-solo run: FAIL')
208
+ puts "ERRORS detected while provisioning #{hostname} (#{e.message})."
172
209
  end
173
-
174
- puts "Remotely running chef-solo -c #{solo_dir}/solo.rb -j #{solo_dir}/node.json"
175
- out = ssh_exec!(ssh, "sudo chef-solo -c #{solo_dir}/solo.rb -j #{solo_dir}/node.json")
176
- if out[0] != 0
177
- puts "ERROR (#{out[0]}): #{out[2]}"
178
- out = ssh_exec!(ssh, "sudo cat #{solo_dir}/log")
210
+ Net::SSH.start(hostname, Mofa::Config.config['ssh_user'], keys: [Mofa::Config.config['ssh_keyfile']], port: Mofa::Config.config['ssh_port'], use_agent: false, verbose: :error) do |ssh|
211
+ snapshot_or_release = cookbook.is_a?(SourceCookbook) ? 'snapshot' : 'release'
212
+ out = ssh_exec!(ssh, "sudo chown -R #{Mofa::Config.config['ssh_user']}.#{Mofa::Config.config['ssh_user']} #{solo_dir}")
213
+ puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
214
+ out = ssh_exec!(ssh, '[ -d /var/lib/mofa ] || sudo mkdir /var/lib/mofa')
215
+ puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
216
+ out = ssh_exec!(ssh, "echo #{cookbook.name} | sudo tee /var/lib/mofa/last_cookbook_name")
217
+ puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
218
+ out = ssh_exec!(ssh, "echo '#{snapshot_or_release}' | sudo tee /var/lib/mofa/last_cookbook_snapshot_or_release")
219
+ puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
220
+ out = ssh_exec!(ssh, "echo #{cookbook.version} | sudo tee /var/lib/mofa/last_cookbook_version")
221
+ puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
222
+ out = ssh_exec!(ssh, "echo #{chef_solo_runs[hostname]['status']} | sudo tee /var/lib/mofa/last_status")
223
+ puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
224
+ out = ssh_exec!(ssh, "date '+%Y-%m-%d %H:%M:%S' | sudo tee /var/lib/mofa/last_timestamp")
225
+ puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
226
+ out = ssh_exec!(ssh, "echo '#{solo_dir}/log' | sudo tee /var/lib/mofa/last_log")
227
+ puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
228
+ out = ssh_exec!(ssh, "echo $(date '+%Y-%m-%d %H:%M:%S')': #{cookbook.name}@#{cookbook.version} (#{chef_solo_runs[hostname]['status']})' | sudo tee -a /var/lib/mofa/history")
229
+ puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
230
+ out = ssh_exec!(ssh, "sudo find #{solo_dir} -type d | xargs chmod 700")
231
+ puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
232
+ out = ssh_exec!(ssh, "sudo find #{solo_dir} -type f | xargs chmod 600")
179
233
  puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
180
- puts out[1]
181
- chef_solo_runs[hostname].store('status', 'FAIL')
182
- chef_solo_runs[hostname].store('status_msg', out[1])
183
- else
184
- if Mofa::CLI.option_debug
185
- out = ssh_exec!(ssh, "sudo cat #{solo_dir}/log")
186
- puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
187
- puts out[1]
188
- else
189
- out = ssh_exec!(ssh, "sudo grep 'Chef Run' #{solo_dir}/log")
190
- puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
191
- puts 'Done.'
192
- end
193
- chef_solo_runs[hostname].store('status', 'SUCCESS')
194
- chef_solo_runs[hostname].store('status_msg', '')
195
234
  end
196
- snapshot_or_release = cookbook.is_a?(SourceCookbook) ? 'snapshot' : 'release'
197
- out = ssh_exec!(ssh, "sudo chown -R #{Mofa::Config.config['ssh_user']}.#{Mofa::Config.config['ssh_user']} #{solo_dir}")
198
- puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
199
- out = ssh_exec!(ssh, '[ -d /var/lib/mofa ] || sudo mkdir /var/lib/mofa')
200
- puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
201
- out = ssh_exec!(ssh, "echo #{cookbook.name} | sudo tee /var/lib/mofa/last_cookbook_name")
202
- puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
203
- out = ssh_exec!(ssh, "echo '#{snapshot_or_release}' | sudo tee /var/lib/mofa/last_cookbook_snapshot_or_release")
204
- puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
205
- out = ssh_exec!(ssh, "echo #{cookbook.version} | sudo tee /var/lib/mofa/last_cookbook_version")
206
- puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
207
- out = ssh_exec!(ssh, "echo #{chef_solo_runs[hostname]['status']} | sudo tee /var/lib/mofa/last_status")
208
- puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
209
- out = ssh_exec!(ssh, "date '+%Y-%m-%d %H:%M:%S' | sudo tee /var/lib/mofa/last_timestamp")
210
- puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
211
- out = ssh_exec!(ssh, "echo '#{solo_dir}/log' | sudo tee /var/lib/mofa/last_log")
212
- puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
213
- out = ssh_exec!(ssh, "echo $(date '+%Y-%m-%d %H:%M:%S')': #{cookbook.name}@#{cookbook.version} (#{chef_solo_runs[hostname]['status']})' | sudo tee -a /var/lib/mofa/history")
214
- puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
215
- out = ssh_exec!(ssh, "sudo find #{solo_dir} -type d | xargs chmod 700")
216
- puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
217
- out = ssh_exec!(ssh, "sudo find #{solo_dir} -type f | xargs chmod 600")
218
- puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
219
235
  end
236
+ at_least_one_chef_solo_run_failed = true unless chef_solo_runs[hostname]['status'] == 'SUCCESS'
237
+ sftp.upload!("#{cookbook.pkg_dir}/log", "#{solo_dir}/log")
220
238
  end
221
- at_least_one_chef_solo_run_failed = true unless chef_solo_runs[hostname]['status'] == 'SUCCESS'
222
239
  end
223
-
224
240
  # ------- print out report
225
241
  puts
226
242
  puts '----------------------------------------------------------------------'
data/lib/mofa/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Mofa
2
- VERSION = '0.4.2'
2
+ VERSION = '0.5.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mofa
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Birk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-30 00:00:00.000000000 Z
11
+ date: 2017-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec