mofa 0.5.4 → 0.5.11

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
- SHA1:
3
- metadata.gz: 9293928f429f3de0f72f511acde41163a2029d1f
4
- data.tar.gz: f29ddaee5ba859408de4f182f746d8ddce4453ed
2
+ SHA256:
3
+ metadata.gz: 53a589ffb32931662ca28a41fbd8081a4471db52287d6b792a1033b64221803e
4
+ data.tar.gz: 50920386da52fabe51ce55bf1dd4144ad49d9f7d26679d9d592da3ca1e9dca36
5
5
  SHA512:
6
- metadata.gz: 3120abaa07e1f6264c53081bdbc2b56d2218e4b0c63355cd0c4b5064f77fbe91647d8460d68b896b8ce11819ae613c41b58e87c76b097f92a8287bfa940ae67d
7
- data.tar.gz: e705ee204fe31f06b3c3162ef4c195bffbf9fcc70c94d776157e89d32816d30f62a23605c2f570532763bb238143bc4fb9380a705b2c5f6ebc52b4f470543105
6
+ metadata.gz: d0aea4b5658276cfdae1bd83f72bbc705ea80b43bc87a15168d08f553912d1629c2a533bfb99895ef6d917420b728c5dfefa6ce391a7882627c5d0c373f7cd3d
7
+ data.tar.gz: ed15e04c4eabebfc08c66e303bb112f8757543ea3c5ec8c3cd5f9184a9b5715d6a1607205a8a5b172462b967da9be51b0b4211f71a52709ce8ec5ff4c650f225
data/.gitignore CHANGED
@@ -7,4 +7,6 @@ pkg/*
7
7
 
8
8
  example_hostlist.json
9
9
 
10
+ vendor/bundle
11
+
10
12
 
@@ -0,0 +1 @@
1
+ ruby-2.6.6
@@ -47,10 +47,16 @@ class AttributesMap
47
47
  elsif value.is_a?(Array)
48
48
  new_attr_hash[key] = []
49
49
  value.each do |value_item|
50
- new_attr_hash[key].push(value_item.gsub(Regexp.new(Regexp.escape(placeholder)), content))
50
+ if value_item.is_a?(Hash)
51
+ new_attr_hash[key] = deep_parse(value, placeholder, content)
52
+ else
53
+ new_attr_hash[key].push(value_item.gsub(Regexp.new(Regexp.escape(placeholder)), content))
54
+ end
51
55
  end
52
56
  else
53
- new_attr_hash[key] = value.gsub(Regexp.new(Regexp.escape(placeholder)), content)
57
+ if value
58
+ new_attr_hash[key] = value.gsub(Regexp.new(Regexp.escape(placeholder)), content)
59
+ end
54
60
  end
55
61
  end
56
62
  new_attr_hash
@@ -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
 
@@ -0,0 +1,25 @@
1
+ module Mofa
2
+ class CmdLineArgs
3
+ def self.instance
4
+ @__instance__ ||= new
5
+ end
6
+
7
+ def initialize
8
+ @cmd_line_args = {}
9
+ end
10
+
11
+ def register(cmd_line_args)
12
+ @cmd_line_args = cmd_line_args
13
+ end
14
+
15
+ def get(key)
16
+ raise "Cmd Line Arg with key #{key} does not exist!" unless @cmd_line_args.key?(key)
17
+ @cmd_line_args[key]
18
+ end
19
+
20
+ def list
21
+ puts 'Comman Line Args:'
22
+ @cmd_line_args.inspect
23
+ end
24
+ end
25
+ end
@@ -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
@@ -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.4'
2
+ VERSION = '0.5.11'
3
3
  end
@@ -19,6 +19,8 @@ Gem::Specification.new do |s|
19
19
  s.add_development_dependency "guard-minitest"
20
20
  s.add_development_dependency "rake"
21
21
  s.add_runtime_dependency "thor"
22
+ # s.add_runtime_dependency "ed25519"
23
+ # s.add_runtime_dependency "bcrypt_pbkdf"
22
24
  s.add_runtime_dependency "json"
23
25
  s.add_runtime_dependency "rest-client"
24
26
  s.add_runtime_dependency "net-ssh"
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.4
4
+ version: 0.5.11
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-06 00:00:00.000000000 Z
11
+ date: 2020-12-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -202,6 +202,7 @@ extra_rdoc_files: []
202
202
  files:
203
203
  - ".gitignore"
204
204
  - ".rubocop.yml"
205
+ - ".ruby-version"
205
206
  - ".travis.yml"
206
207
  - Gemfile
207
208
  - Guardfile
@@ -213,6 +214,7 @@ files:
213
214
  - lib/mofa.rb
214
215
  - lib/mofa/attributes_map.rb
215
216
  - lib/mofa/cli.rb
217
+ - lib/mofa/cmd_line_args.rb
216
218
  - lib/mofa/config.rb
217
219
  - lib/mofa/cookbook.rb
218
220
  - lib/mofa/hostlist.rb
@@ -230,7 +232,7 @@ files:
230
232
  homepage: https://github.com/pingworks/mofa
231
233
  licenses: []
232
234
  metadata: {}
233
- post_install_message:
235
+ post_install_message:
234
236
  rdoc_options: []
235
237
  require_paths:
236
238
  - lib
@@ -245,9 +247,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
245
247
  - !ruby/object:Gem::Version
246
248
  version: '0'
247
249
  requirements: []
248
- rubyforge_project: mofa
249
- rubygems_version: 2.6.3
250
- signing_key:
250
+ rubygems_version: 3.0.3
251
+ signing_key:
251
252
  specification_version: 4
252
253
  summary: a lightweight remote chef-solo runner
253
254
  test_files: []