mofa 0.5.5 → 0.5.12

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: b253d74784ec5ffc5b796f2387a69f55bbc448e4
4
- data.tar.gz: dfcc89442b03ae56137d1474348c28b1ef5b9c96
2
+ SHA256:
3
+ metadata.gz: 2c1eb88f1c036d2fde056ffc49cedba0bd79e952abd9bd66373fa8df0729f5a1
4
+ data.tar.gz: b0482279a20d8a1988f4e82bb2132cb62f071e7d06265cb9bf75a1b994a1bcd4
5
5
  SHA512:
6
- metadata.gz: 05b0a881191afd9f165bb373ae85f1378aeec54e1224b9142892f7815b58924d3168b9e4f27e38feeff30f287d77e2550695a2194c76f5188b64d6234d8c195d
7
- data.tar.gz: 12e2852d42432b68fbae89a09d45bd47a743b0761ce0e3afaac4cbe70d1d57bdac3bd51f0c40bbde324f7f88d061168beae7abb651218396f78292c5261bfad1
6
+ metadata.gz: a8960aae289ce4d22fdbcc0b5f6804a61e3b34a21e674176791c8d1ab2d013701f6ac1359b6ed64a58231319a5820c49f2141e80fcea6063a38d72ca9a598a55
7
+ data.tar.gz: a1280c2d557f7c7a53ebd1cfc5ccb00820b82320c58ab326380ab73ec6ae6cb2d55adf24d87160d66b60fd444648ae6d68ce530b6bb06bfb516698cd905da29f
data/.gitignore CHANGED
@@ -7,4 +7,6 @@ pkg/*
7
7
 
8
8
  example_hostlist.json
9
9
 
10
+ vendor/bundle
11
+
10
12
 
data/.rubocop.yml CHANGED
@@ -1,9 +1,15 @@
1
+ Metrics/ParameterLists:
2
+ Enabled: false
3
+
1
4
  Metrics/LineLength:
2
5
  Enabled: false
3
6
 
4
7
  Metrics/MethodLength:
5
8
  Enabled: false
6
9
 
10
+ Metrics/BlockLength:
11
+ Enabled: false
12
+
7
13
  Metrics/ClassLength:
8
14
  Enabled: false
9
15
 
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.6.5
data/Dockerfile ADDED
@@ -0,0 +1,12 @@
1
+ FROM docker.io/chef/chefdk:1.6.11
2
+
3
+ RUN apt update && apt upgrade --yes && \
4
+ apt install build-essential rsync --yes && \
5
+ gem install mofa
6
+
7
+ RUN mkdir /root/.mofa
8
+
9
+ COPY config.docker.yml /root/.mofa/config.yml
10
+
11
+ ENV PATH="/root/.chefdk/gem/ruby/2.3.0/bin:${PATH}"
12
+
data/README.md CHANGED
@@ -52,7 +52,7 @@ Before you can start using mofa please create a config file:
52
52
 
53
53
  # local Development
54
54
 
55
- $ git clone https://github.com/hybris/mofa.git
55
+ $ git clone https://github.com/pingworks/mofa.git
56
56
  $ cd mofa
57
57
  $ bundle install
58
58
  $ cd ../somewhere_chef-env_some_cookbook
data/config.docker.yml ADDED
@@ -0,0 +1,39 @@
1
+ # global mofa settings
2
+
3
+ # Admin User Account that should be used for all mofa tasks.
4
+ # The user has to be able to login passwordless
5
+ # and has tohave passwordless sudo permissions.
6
+ ssh_user: sccchef
7
+ ssh_keyfile: ~/.ssh/id_rsa_sccchef
8
+
9
+ # where to build tmporary cookbook packages and so on
10
+ tmp_dir: /var/tmp
11
+
12
+ # A REST-Webservice that returns a list of hosts that are potentially
13
+ # manageable with this mofa.
14
+ service_hostlist_url: file:///opt/workshopbox/etc/hostlist.json
15
+ service_hostlist_default_filter: "localhost"
16
+ #service_hostlist_api_key: xyz
17
+
18
+ # The cookbook architectural pattern should becodified by following
19
+ # a coonaming schema:
20
+ # * Cookbooks beginning with "env_*" are Envrionment Cookbooks
21
+ # * Cookbooks haven a prefix like "<organisation_name>_*" are
22
+ # so-called Wrapper Cookbooks
23
+ # * Cookbooks having a "base_" Prefix are Base Cookbooks
24
+
25
+ cookbook_type_indicator:
26
+ env: "^env_.*"
27
+ wrapper: "^(scc_|fos_|allcop_).*"
28
+ base: ".*_base$"
29
+
30
+ # Binrepo for released cookbooks
31
+ binrepo_base_url: 'https://berks-api/cookbooks'
32
+
33
+ # Releasing into binrepo
34
+ binrepo_host: berks-api
35
+ binrepo_ssh_user: berks
36
+ binrepo_ssh_port: 22
37
+ binrepo_ssh_keyfile: /id_rsa
38
+ binrepo_import_dir: /data/cookbooks/import
39
+
@@ -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
data/lib/mofa/cli.rb CHANGED
@@ -16,13 +16,17 @@ module Mofa
16
16
  class_option :debug, :type => :boolean, :aliases => '-vv', :desc => 'be very vebose'
17
17
 
18
18
  desc 'provision <cookbook>', 'provisions Targethost(s) using a given cookbook.'
19
- method_option :ignore_ping, :type => :boolean, :aliases => '-p'
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
22
  method_option :runlist, :type => :string, :aliases => '-o'
23
23
  method_option :attributes, :type => :string, :aliases => '-j'
24
24
  method_option :service_hostlist_url, :type => :string
25
25
  method_option :override_mofa_secrets, :type => :string, :aliases => '-S'
26
+ method_option :ssh_port, :type => :string, :aliases => '-p', :default => '22'
27
+ method_option :ssh_user, :type => :string, :aliases => '-u', :default => 'sccchef'
28
+ method_option :ssh_keyfile, :type => :string, :aliases => '-i', :default => '~/.ssh/id_rsa_sccchef'
29
+ method_option :tmp_dir, :type => :string, :aliases => '-w', :default => '~/tmp/mofa'
26
30
 
27
31
  def provision(cookbook_name_or_path)
28
32
  set_verbosity
@@ -30,7 +34,6 @@ module Mofa
30
34
  cookbook_name_or_path ||= '.'
31
35
 
32
36
  target_filter = options[:target]
33
- #target_filter ||= Mofa::Config.config['profiles']['default']['target']
34
37
 
35
38
  token = MofaCmd.generate_token
36
39
 
@@ -47,12 +50,13 @@ module Mofa
47
50
  cmd.options = options
48
51
 
49
52
  cmd.prepare
50
- cmd.execute
53
+ cmd.execute(options[:ssh_port], options[:ssh_user], options[:ssh_keyfile])
51
54
  cmd.cleanup
52
55
  end
53
56
 
54
57
  desc 'upload <cookbook>', 'package & upload cookbook into binrepo'
55
58
  method_option :binrepo_host, :type => :string
59
+ method_option :binrepo_ssh_port, :type => :string
56
60
  method_option :binrepo_ssh_user, :type => :string
57
61
  method_option :binrepo_ssh_keyfile, :type => :string
58
62
 
@@ -67,7 +71,8 @@ module Mofa
67
71
  cmd = UploadCmd.new(token, cookbook)
68
72
 
69
73
  cmd.prepare
70
- cmd.execute
74
+ # FIXME: bring in the ssh-port in a different way
75
+ cmd.execute(22)
71
76
  cmd.cleanup
72
77
  end
73
78
 
@@ -77,29 +82,6 @@ module Mofa
77
82
  puts VERSION
78
83
  end
79
84
 
80
- desc 'config', 'prints out mofa config.'
81
-
82
- def config
83
- config_print
84
- end
85
-
86
- desc 'setup', 'setup initial configuration'
87
-
88
- def setup
89
- set_verbosity
90
-
91
- case
92
- when !File.exists?("#{ENV['HOME']}/.mofa/config.yml")
93
- begin
94
- config_create
95
- end until config_valid?
96
- else
97
- begin
98
- config_edit
99
- end until config_valid?
100
- end
101
- end
102
-
103
85
  def self.option_verbose
104
86
  @@option_verbose
105
87
  end
@@ -128,33 +110,6 @@ module Mofa
128
110
  say detail, :red
129
111
  end
130
112
 
131
- def config_create
132
- say 'Creating a new mofa config (~/.mofa/config.yml)...'
133
-
134
- say '- not implemented yet -'
135
-
136
- end
137
-
138
- def config_edit
139
- say 'Editing mofa config (~/.mofa/config.yml)...'
140
-
141
- say '- not implemented yet -'
142
-
143
- end
144
-
145
- def config_print
146
- say 'Mofa Config (~/.mofa/config.yml):'
147
-
148
- say '- not implemented yet -'
149
-
150
- end
151
-
152
- def config_valid?
153
- say 'Validating Mofa config (~/.mofa/config.yml)...'
154
- say '- not implemented yet -'
155
- true
156
- end
157
-
158
113
  def self.exit_on_failure?
159
114
  true
160
115
  end
@@ -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
data/lib/mofa/mofa_cmd.rb CHANGED
@@ -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, ssh_user, ssh_keyfile)
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, ssh_user, ssh_keyfile)
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, ssh_user, ssh_keyfile)
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, ssh_user, keys: [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}")
@@ -90,8 +90,6 @@ class ProvisionCmd < MofaCmd
90
90
  file.write(solo_rb)
91
91
  end
92
92
  end
93
- # log_level :info
94
- # log_location "#{solo_dir}/log"
95
93
 
96
94
  def create_node_json(sftp, hostname, solo_dir, attributes_map)
97
95
  puts "Remotely creating \"#{solo_dir}/node.json\" on #{hostname}..."
@@ -121,13 +119,13 @@ class ProvisionCmd < MofaCmd
121
119
  end
122
120
  end
123
121
 
124
- def run_chef_solo_on_hosts
122
+ def run_chef_solo_on_hosts(ssh_port, ssh_user, ssh_keyfile)
125
123
  time = Time.new
126
124
  # Create a temp working dir on the target host
127
125
  solo_dir = '/var/tmp/' + time.strftime('%Y-%m-%d_%H%M%S')
128
126
  puts
129
127
  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']}"
128
+ puts "Will use ssh_user '#{ssh_user}', ssh_port '#{ssh_port}' and ssh_keyfile '#{ssh_keyfile}'"
131
129
  at_least_one_chef_solo_run_failed = false
132
130
  chef_solo_runs = {}
133
131
  host_index = 0
@@ -144,9 +142,9 @@ class ProvisionCmd < MofaCmd
144
142
  end
145
143
  end
146
144
 
147
- prepare_host(hostname, host_index, solo_dir)
145
+ prepare_host(hostname, host_index, solo_dir, ssh_port, ssh_user, ssh_keyfile)
148
146
 
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|
147
+ Net::SFTP.start(hostname, ssh_user, keys: [ssh_keyfile], port: ssh_port, use_agent: false, verbose: :error) do |sftp|
150
148
  # remotely creating solo.rb
151
149
  create_solo_rb(sftp, hostname, solo_dir)
152
150
 
@@ -164,7 +162,7 @@ class ProvisionCmd < MofaCmd
164
162
  # Do it -> Execute the chef-solo run!
165
163
  begin
166
164
  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|
165
+ Net::SSH.start(hostname, ssh_user, keys: [ssh_keyfile], port: ssh_port, use_agent: false, verbose: :error) do |ssh|
168
166
  puts "Remotely unpacking Cookbook Package #{cookbook.pkg_name}... "
169
167
  ssh.exec!("cd #{solo_dir}; tar xvfz #{cookbook.pkg_name}") do |_ch, _stream, line|
170
168
  puts line if Mofa::CLI.option_debug
@@ -181,13 +179,13 @@ class ProvisionCmd < MofaCmd
181
179
  raise e
182
180
  end
183
181
  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|
182
+ Net::SSH.start(hostname, ssh_user, keys: [ssh_keyfile], port: ssh_port, use_agent: false, verbose: :error) do |ssh|
185
183
  puts "Remotely running chef-solo -c #{solo_dir}/solo.rb -j #{solo_dir}/node.json"
186
184
  chef_run_exit_code = 0
187
185
  ssh.exec!("sudo chef-solo -c #{solo_dir}/solo.rb -j #{solo_dir}/node.json") do |_ch, _stream, line|
188
186
  puts line if Mofa::CLI.option_verbose || Mofa::CLI.option_debug
189
187
  log_file.write(line)
190
- chef_run_exit_code = 1 if line =~ /Chef run process exited unsuccessfully/
188
+ chef_run_exit_code = 1 if line =~ /Chef run process exited unsuccessfully/ || line =~ /chef-solo: command not found/
191
189
  end
192
190
  raise 'Chef run process exited unsuccessfully' if chef_run_exit_code != 0
193
191
  chef_solo_runs[hostname].store('status', 'SUCCESS')
@@ -207,7 +205,7 @@ class ProvisionCmd < MofaCmd
207
205
  log_file.write('chef-solo run: FAIL')
208
206
  puts "ERRORS detected while provisioning #{hostname} (#{e.message})."
209
207
  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|
208
+ Net::SSH.start(hostname, ssh_user, keys: [ssh_keyfile], port: ssh_port, use_agent: false, verbose: :error) do |ssh|
211
209
  snapshot_or_release = cookbook.is_a?(SourceCookbook) ? 'snapshot' : 'release'
212
210
  out = ssh_exec!(ssh, "sudo chown -R #{Mofa::Config.config['ssh_user']}.#{Mofa::Config.config['ssh_user']} #{solo_dir}")
213
211
  puts "ERROR (#{out[0]}): #{out[2]}" if out[0] != 0
@@ -26,11 +26,11 @@ class ReleasedCookbook < Cookbook
26
26
 
27
27
  def prepare
28
28
  @pkg_name ||= "#{name}_#{version}-full.tar.gz"
29
- @pkg_dir = "#{Mofa::Config.config['tmp_dir']}/.mofa/#{token}"
29
+ @pkg_dir = "#{Mofa::CLI::option_tmp_dir}/.mofa/#{token}"
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
 
@@ -110,11 +114,11 @@ class ReleasedCookbook < Cookbook
110
114
  end
111
115
 
112
116
  def cleanup!
113
- unless (Dir.entries("#{Mofa::Config.config['tmp_dir']}/.mofa") - %w{ . .. }).empty?
114
- say "Removing content of folder #{Mofa::Config.config['tmp_dir']}/.mofa"
115
- run "rm -r #{Mofa::Config.config['tmp_dir']}/.mofa/*"
117
+ unless (Dir.entries("#{Mofa::CLI::option_tmp_dir}/.mofa") - %w{ . .. }).empty?
118
+ say "Removing content of folder #{Mofa::CLI::option_tmp_dir}/.mofa"
119
+ run "rm -r #{Mofa::CLI::option_tmp_dir}/.mofa/*"
116
120
  else
117
- say "Folder #{Mofa::Config.config['tmp_dir']}/.mofa is (already) clean."
121
+ say "Folder #{Mofa::CLI::option_tmp_dir}/.mofa is (already) clean."
118
122
  end
119
123
  end
120
124
 
@@ -77,11 +77,11 @@ class SourceCookbook < Cookbook
77
77
  end
78
78
 
79
79
  def cleanup!
80
- unless (Dir.entries("#{Mofa::Config.config['tmp_dir']}/.mofa") - %w{ . .. }).empty?
81
- say "Removing content of folder #{Mofa::Config.config['tmp_dir']}/.mofa"
82
- run "rm -r #{Mofa::Config.config['tmp_dir']}/.mofa/*"
80
+ unless (Dir.entries("#{Mofa::CLI::option_tmp_dir}/.mofa") - %w{ . .. }).empty?
81
+ say "Removing content of folder #{Mofa::CLI::option_tmp_dir}/.mofa"
82
+ run "rm -r #{Mofa::CLI::option_tmp_dir}/.mofa/*"
83
83
  else
84
- say "Folder #{Mofa::Config.config['tmp_dir']}/.mofa is (already) clean."
84
+ say "Folder #{Mofa::CLI::option_tmp_dir}/.mofa is (already) clean."
85
85
  end
86
86
  end
87
87
 
@@ -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
data/lib/mofa/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Mofa
2
- VERSION = '0.5.5'
2
+ VERSION = '0.5.12'
3
3
  end
data/mofa.gemspec CHANGED
@@ -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.5
4
+ version: 0.5.12
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-12-12 00:00:00.000000000 Z
11
+ date: 2021-06-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -202,17 +202,21 @@ extra_rdoc_files: []
202
202
  files:
203
203
  - ".gitignore"
204
204
  - ".rubocop.yml"
205
+ - ".ruby-version"
205
206
  - ".travis.yml"
207
+ - Dockerfile
206
208
  - Gemfile
207
209
  - Guardfile
208
210
  - LICENSE
209
211
  - README.md
210
212
  - Rakefile
211
213
  - bin/mofa
214
+ - config.docker.yml
212
215
  - config.yml.erb
213
216
  - lib/mofa.rb
214
217
  - lib/mofa/attributes_map.rb
215
218
  - lib/mofa/cli.rb
219
+ - lib/mofa/cmd_line_args.rb
216
220
  - lib/mofa/config.rb
217
221
  - lib/mofa/cookbook.rb
218
222
  - lib/mofa/hostlist.rb
@@ -230,7 +234,7 @@ files:
230
234
  homepage: https://github.com/pingworks/mofa
231
235
  licenses: []
232
236
  metadata: {}
233
- post_install_message:
237
+ post_install_message:
234
238
  rdoc_options: []
235
239
  require_paths:
236
240
  - lib
@@ -245,9 +249,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
245
249
  - !ruby/object:Gem::Version
246
250
  version: '0'
247
251
  requirements: []
248
- rubyforge_project: mofa
249
- rubygems_version: 2.6.11
250
- signing_key:
252
+ rubygems_version: 3.0.3
253
+ signing_key:
251
254
  specification_version: 4
252
255
  summary: a lightweight remote chef-solo runner
253
256
  test_files: []