mofa 0.5.3 → 0.5.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 9c5d34e296fd7a81d1660c7ca2373f9b0ae40c21
4
- data.tar.gz: 31f698fe349d88488a296d457ca386129f9d9637
2
+ SHA256:
3
+ metadata.gz: 251a634b14b510bd82968c48565ae7a8141b24493420a179ca3f9c77286dd580
4
+ data.tar.gz: c7cb15e3e79de88d14e63cd96532a690e2238682354473cb95537af0e2d29b57
5
5
  SHA512:
6
- metadata.gz: cb122e05cda26a3923f30aa68dc4fe59f873bd858e33bff7fd92fd9cc6b22a52127fe9cec8fe4ee195e751306305f2f73e318fcd42b06c0d37275eb27c40e787
7
- data.tar.gz: 7333ae0549d1604f26eac29084a2f08b31659b89eec8ed07421b3844bfc02366a523a575b8d460b497cb663d51f0d9e5031645a8544ab4015389ed9a68e220a3
6
+ metadata.gz: ead33bbc0b4347cf748b841c0882cdc3ff232bb9149cb49567105e33b177ea2bc3505c4ecca2c22da890452809926f1ade2ff56c4b07e59ae493241b3c10919a
7
+ data.tar.gz: 894920014cf4622571fd32b5a56edb21f7b64776f00d3e88c7864b71e7d7309918bb2be7e1a6ec8159884e5b531b5a2f7e8ca9c0a9362c5a8ce92f8768f95210
@@ -19,6 +19,7 @@ module Mofa
19
19
  method_option :ignore_ping, :type => :boolean, :aliases => '-p'
20
20
  method_option :target, :type => :string, :aliases => '-t'
21
21
  method_option :concrete_target, :type => :string, :aliases => '-T'
22
+ method_option :sshport, :type => :string, :aliases => '-P'
22
23
  method_option :runlist, :type => :string, :aliases => '-o'
23
24
  method_option :attributes, :type => :string, :aliases => '-j'
24
25
  method_option :service_hostlist_url, :type => :string
@@ -47,12 +48,13 @@ module Mofa
47
48
  cmd.options = options
48
49
 
49
50
  cmd.prepare
50
- cmd.execute
51
+ cmd.execute(options[:sshport])
51
52
  cmd.cleanup
52
53
  end
53
54
 
54
55
  desc 'upload <cookbook>', 'package & upload cookbook into binrepo'
55
56
  method_option :binrepo_host, :type => :string
57
+ method_option :binrepo_sshport, :type => :string
56
58
  method_option :binrepo_ssh_user, :type => :string
57
59
  method_option :binrepo_ssh_keyfile, :type => :string
58
60
 
@@ -67,7 +69,8 @@ module Mofa
67
69
  cmd = UploadCmd.new(token, cookbook)
68
70
 
69
71
  cmd.prepare
70
- cmd.execute
72
+ # FIXME: bring in the ssh-port in a different way
73
+ cmd.execute(22)
71
74
  cmd.cleanup
72
75
  end
73
76
 
@@ -21,7 +21,7 @@ class MofaCmd
21
21
  end
22
22
 
23
23
  # @abstract
24
- def execute
24
+ def execute(_ssh_port)
25
25
  raise RuntimeError, "must be implemented"
26
26
  end
27
27
 
@@ -14,7 +14,7 @@ class ProvisionCmd < MofaCmd
14
14
  cookbook.prepare
15
15
  end
16
16
 
17
- def execute
17
+ def execute(ssh_port = 22)
18
18
  cookbook.execute
19
19
 
20
20
  hostlist.retrieve
@@ -30,7 +30,7 @@ class ProvisionCmd < MofaCmd
30
30
 
31
31
  puts "Hostlist after runlist filtering: #{hostlist.list.inspect}"
32
32
 
33
- exit_code = run_chef_solo_on_hosts
33
+ exit_code = run_chef_solo_on_hosts(ssh_port)
34
34
 
35
35
  exit_code
36
36
  end
@@ -56,12 +56,12 @@ class ProvisionCmd < MofaCmd
56
56
  host_available
57
57
  end
58
58
 
59
- def prepare_host(hostname, host_index, solo_dir)
59
+ def prepare_host(hostname, host_index, solo_dir, ssh_port = Mofa::Config.config['ssh_port'] )
60
60
  puts
61
61
  puts '----------------------------------------------------------------------'
62
62
  puts "Chef-Solo on Host #{hostname} (#{host_index}/#{hostlist.list.length})"
63
63
  puts '----------------------------------------------------------------------'
64
- 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|
64
+ Net::SSH.start(hostname, Mofa::Config.config['ssh_user'], keys: [Mofa::Config.config['ssh_keyfile']], port: ssh_port, use_agent: false, verbose: :error) do |ssh|
65
65
  puts "Remotely creating solo_dir \"#{solo_dir}\" on host #{hostname}"
66
66
  # remotely create the temp folder
67
67
  out = ssh_exec!(ssh, "[ -d #{solo_dir} ] || mkdir #{solo_dir}")
@@ -121,13 +121,13 @@ class ProvisionCmd < MofaCmd
121
121
  end
122
122
  end
123
123
 
124
- def run_chef_solo_on_hosts
124
+ def run_chef_solo_on_hosts(ssh_port = Mofa::Config.config['ssh_port'])
125
125
  time = Time.new
126
126
  # Create a temp working dir on the target host
127
127
  solo_dir = '/var/tmp/' + time.strftime('%Y-%m-%d_%H%M%S')
128
128
  puts
129
129
  puts 'Chef-Solo Run started at ' + time.strftime('%Y-%m-%d %H:%M:%S')
130
- puts "Will use ssh_user #{Mofa::Config.config['ssh_user']}, ssh_port #{Mofa::Config.config['ssh_port']} and ssh_key_file #{Mofa::Config.config['ssh_keyfile']}"
130
+ puts "Will use ssh_user #{Mofa::Config.config['ssh_user']}, ssh_port #{ssh_port} and ssh_key_file #{Mofa::Config.config['ssh_keyfile']}"
131
131
  at_least_one_chef_solo_run_failed = false
132
132
  chef_solo_runs = {}
133
133
  host_index = 0
@@ -144,9 +144,9 @@ class ProvisionCmd < MofaCmd
144
144
  end
145
145
  end
146
146
 
147
- prepare_host(hostname, host_index, solo_dir)
147
+ prepare_host(hostname, host_index, solo_dir, ssh_port)
148
148
 
149
- Net::SFTP.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 |sftp|
149
+ Net::SFTP.start(hostname, Mofa::Config.config['ssh_user'], keys: [Mofa::Config.config['ssh_keyfile']], port: ssh_port, use_agent: false, verbose: :error) do |sftp|
150
150
  # remotely creating solo.rb
151
151
  create_solo_rb(sftp, hostname, solo_dir)
152
152
 
@@ -164,7 +164,7 @@ class ProvisionCmd < MofaCmd
164
164
  # Do it -> Execute the chef-solo run!
165
165
  begin
166
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|
167
+ Net::SSH.start(hostname, Mofa::Config.config['ssh_user'], keys: [Mofa::Config.config['ssh_keyfile']], port: ssh_port, use_agent: false, verbose: :error) do |ssh|
168
168
  puts "Remotely unpacking Cookbook Package #{cookbook.pkg_name}... "
169
169
  ssh.exec!("cd #{solo_dir}; tar xvfz #{cookbook.pkg_name}") do |_ch, _stream, line|
170
170
  puts line if Mofa::CLI.option_debug
@@ -181,13 +181,13 @@ class ProvisionCmd < MofaCmd
181
181
  raise e
182
182
  end
183
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|
184
+ Net::SSH.start(hostname, Mofa::Config.config['ssh_user'], keys: [Mofa::Config.config['ssh_keyfile']], port: ssh_port, use_agent: false, verbose: :error) do |ssh|
185
185
  puts "Remotely running chef-solo -c #{solo_dir}/solo.rb -j #{solo_dir}/node.json"
186
186
  chef_run_exit_code = 0
187
187
  ssh.exec!("sudo chef-solo -c #{solo_dir}/solo.rb -j #{solo_dir}/node.json") do |_ch, _stream, line|
188
188
  puts line if Mofa::CLI.option_verbose || Mofa::CLI.option_debug
189
189
  log_file.write(line)
190
- chef_run_exit_code = 1 if line =~ /Chef run process exited unsuccessfully/
190
+ chef_run_exit_code = 1 if line =~ /Chef run process exited unsuccessfully/ || line =~ /chef-solo: command not found/
191
191
  end
192
192
  raise 'Chef run process exited unsuccessfully' if chef_run_exit_code != 0
193
193
  chef_solo_runs[hostname].store('status', 'SUCCESS')
@@ -207,7 +207,7 @@ class ProvisionCmd < MofaCmd
207
207
  log_file.write('chef-solo run: FAIL')
208
208
  puts "ERRORS detected while provisioning #{hostname} (#{e.message})."
209
209
  end
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|
210
+ Net::SSH.start(hostname, Mofa::Config.config['ssh_user'], keys: [Mofa::Config.config['ssh_keyfile']], port: ssh_port, use_agent: false, verbose: :error) do |ssh|
211
211
  snapshot_or_release = cookbook.is_a?(SourceCookbook) ? 'snapshot' : 'release'
212
212
  out = ssh_exec!(ssh, "sudo chown -R #{Mofa::Config.config['ssh_user']}.#{Mofa::Config.config['ssh_user']} #{solo_dir}")
213
213
  puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
@@ -30,7 +30,7 @@ class ReleasedCookbook < Cookbook
30
30
  set_cookbooks_url
31
31
  end
32
32
 
33
- def execute#
33
+ def execute
34
34
  package
35
35
  end
36
36
 
@@ -65,16 +65,20 @@ class ReleasedCookbook < Cookbook
65
65
 
66
66
  # Sync in mofa_secrets
67
67
  if override_mofa_secrets
68
- if File.directory?("#{override_mofa_secrets}/#{name}/cookbooks")
69
- run "rsync -vr #{override_mofa_secrets}/#{name}/cookbooks/ #{pkg_dir}/tmp/cookbooks/"
70
- if File.file?("#{override_mofa_secrets}/#{name}/.mofa.local.yml")
71
- FileUtils.cp "#{override_mofa_secrets}/#{name}/.mofa.local.yml", "#{pkg_dir}/tmp/cookbooks/#{name}/"
72
- end
73
- if File.file?("#{override_mofa_secrets}/#{name}/.mofa.yml")
74
- FileUtils.cp "#{override_mofa_secrets}/#{name}/.mofa.yml", "#{pkg_dir}/tmp/cookbooks/#{name}/"
68
+ if File.directory?("#{override_mofa_secrets}/#{name}")
69
+ if File.directory?("#{override_mofa_secrets}/#{name}/cookbooks")
70
+ run "rsync -vr #{override_mofa_secrets}/#{name}/cookbooks/ #{pkg_dir}/tmp/cookbooks/"
71
+ if File.file?("#{override_mofa_secrets}/#{name}/.mofa.local.yml")
72
+ FileUtils.cp "#{override_mofa_secrets}/#{name}/.mofa.local.yml", "#{pkg_dir}/tmp/cookbooks/#{name}/"
73
+ end
74
+ if File.file?("#{override_mofa_secrets}/#{name}/.mofa.yml")
75
+ FileUtils.cp "#{override_mofa_secrets}/#{name}/.mofa.yml", "#{pkg_dir}/tmp/cookbooks/#{name}/"
76
+ end
77
+ else
78
+ run "rsync -vr #{override_mofa_secrets}/#{name}/ #{pkg_dir}/tmp/cookbooks/#{name}/"
75
79
  end
76
80
  else
77
- run "rsync -vr #{override_mofa_secrets}/#{name}/ #{pkg_dir}/tmp/cookbooks/#{name}/"
81
+ say "Skipping non-existant mofa-secrets folder #{override_mofa_secrets}/#{name}"
78
82
  end
79
83
  end
80
84
 
@@ -44,9 +44,10 @@ class RunlistMap
44
44
  # and so on
45
45
  hostlist.list.each do |hostname|
46
46
  cookbook.recipes.each do |recipe|
47
- recipe_regex = "^#{recipe}[0-9]*\."
47
+ recipe_regex = "^#{recipe}[0-9]*\\\."
48
48
  if hostname.match(recipe_regex)
49
49
  @mp.store(hostname, "recipe[#{cookbook.name}::#{recipe}]")
50
+ break
50
51
  end
51
52
  end
52
53
  end
@@ -142,8 +142,9 @@ class SourceCookbook < Cookbook
142
142
  inside "#{pkg_dir}/tmp" do
143
143
  # Sync in mofa_secrets
144
144
  if override_mofa_secrets
145
- if File.directory?("#{override_mofa_secrets}/#{name}/cookbooks")
146
- run "rsync -vr #{override_mofa_secrets}/#{name}/cookbooks/ cookbooks/"
145
+ path_translated = @override_mofa_secrets.sub(/^([a-zA-Z]):/,"/\1/")
146
+ if File.directory?("#{path_translated}/#{name}/cookbooks")
147
+ run "rsync -vr #{path_translated}/#{name}/cookbooks/ cookbooks/"
147
148
  end
148
149
  end
149
150
  end
@@ -15,7 +15,7 @@ class UploadCmd < MofaCmd
15
15
  cookbook.prepare
16
16
  end
17
17
 
18
- def execute
18
+ def execute(_ssh_port)
19
19
  cookbook.execute
20
20
  upload_cookbook_pkg
21
21
  end
@@ -1,3 +1,3 @@
1
1
  module Mofa
2
- VERSION = '0.5.3'
2
+ VERSION = '0.5.10'
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.5.3
4
+ version: 0.5.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Birk
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-04 00:00:00.000000000 Z
11
+ date: 2020-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -230,7 +230,7 @@ files:
230
230
  homepage: https://github.com/pingworks/mofa
231
231
  licenses: []
232
232
  metadata: {}
233
- post_install_message:
233
+ post_install_message:
234
234
  rdoc_options: []
235
235
  require_paths:
236
236
  - lib
@@ -245,9 +245,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
245
245
  - !ruby/object:Gem::Version
246
246
  version: '0'
247
247
  requirements: []
248
- rubyforge_project: mofa
249
- rubygems_version: 2.6.3
250
- signing_key:
248
+ rubygems_version: 3.0.3
249
+ signing_key:
251
250
  specification_version: 4
252
251
  summary: a lightweight remote chef-solo runner
253
252
  test_files: []