lambom 0.4.3 → 0.4.7

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 18348d90022514710524de670d3a08e14a50c34d
4
+ data.tar.gz: 1b06f188691179fd7fafa04aa636d451c7282e02
5
+ SHA512:
6
+ metadata.gz: 058f35736be038c22002cb8f74f11d15db05accdf9380a6381ea7782b0d3c038962cb777fa298d76c25752c6faff655389ef644acaff87f9f24b11ea87be052a
7
+ data.tar.gz: ea449373e8f86512ff94165d710fb999715da0a7b030c6d7ffc85a09c5eef1b55a82bec85411c8bc1153788ec51827b58ef9d4fead4a178b220f687d82ec29d0
data/bin/lambom CHANGED
@@ -24,10 +24,10 @@ OptionParser.new do |opts|
24
24
  options[:json_file] = j
25
25
  end
26
26
 
27
- opts.on("-b", "--berksfile [BERKSFILE FILE]",
28
- "Use specified berksfile to download cookbooks and dependencies") do |j|
29
- options[:berksfile] = b
30
- end
27
+ # opts.on("-b", "--berksfile [BERKSFILE FILE]",
28
+ # "Use specified berksfile to download cookbooks and dependencies") do |j|
29
+ # options[:berksfile] = b
30
+ # end
31
31
 
32
32
  opts.on("-c", "--cached",
33
33
  "Use local cached cookbooks") do
@@ -74,10 +74,21 @@ end.parse!
74
74
 
75
75
  out = ''
76
76
  begin
77
+
77
78
  out = Lambom.run(options)
78
- rescue Exception => e
79
+
80
+ rescue StandardError => e
81
+
79
82
  puts "Error: #{e.message}"
80
83
  exit 1
84
+
85
+ rescue SystemExit => s
86
+
87
+ unless s.success?
88
+ puts "Error executing convergence: #{out}"
89
+ exit s.status
90
+ end
91
+
81
92
  end
82
93
 
83
94
  puts "Command executed successfully"
data/lambom.gemspec CHANGED
@@ -21,11 +21,13 @@ EOF
21
21
  s.files = `git ls-files`.split($/)
22
22
  s.license = 'Apache-2.0'
23
23
 
24
- s.add_runtime_dependency "oj","~> 2.5.4"
25
- s.add_runtime_dependency "mixlib-authentication","~> 1.3.0"
26
- s.add_runtime_dependency "mixlib-shellout","~> 1.3.0"
27
- s.add_runtime_dependency "chef","~> 11.8.2"
28
- s.add_runtime_dependency "berkshelf","~> 2.0.12"
24
+ s.add_runtime_dependency "oj","~> 2.5"
25
+ #s.add_runtime_dependency "mixlib-authentication","~> 1.3"
26
+ #s.add_runtime_dependency "mixlib-shellout","~> 1.3"
27
+ #s.add_runtime_dependency "chef","~> 11.8"
28
+ s.add_runtime_dependency "chef", "~> 12.0.3"
29
+
30
+ # s.add_runtime_dependency "berkshelf","~> 2.0.12"
29
31
 
30
32
  s.add_development_dependency "rspec", "~> 2.0"
31
33
 
data/lib/lambom.rb CHANGED
@@ -22,11 +22,8 @@ module Lambom
22
22
  raise 'Must be run as root' unless Process.uid == 0
23
23
 
24
24
  #cargar config
25
- conf = Lambom::Config.new.load
25
+ conf = Lambom::Config.new.load(argv)
26
26
 
27
- # sobreescribimos a configuracion ca linea de comandos
28
- conf.merge(argv)
29
-
30
27
  # executar converxencia
31
28
  Lambom::Converger.new(conf).run
32
29
  end
data/lib/lambom/config.rb CHANGED
@@ -1,105 +1,121 @@
1
1
  require 'yaml'
2
2
 
3
3
  module Lambom
4
- class Config
5
- CONFIG_DIR = "/etc/riyic"
6
- FILE = "#{CONFIG_DIR}/lambom.conf"
7
- UNIX_PATH_REGEX = /^[\w\s.\/\-_+%]+$/i
8
- URL_REGEX = /^(http(s)?|ftp):\/\/(([A-Za-z0-9-]+\.)*([A-Za-z0-9-]+\.[A-Za-z0-9]+))+((\/?)(([A-Za-z0-9\._\-]+)(\/){0,1}[A-Za-z0-9.-\/]*)){0,1}/
9
-
10
- attr_accessor :server,
11
- :private_key_file,
12
- :environment,
13
- :loglevel,
14
- :json_file,
15
- :berksfile,
16
- :cached,
17
- :download_tarball,
18
- :api_url
19
-
20
- attr_reader :logdir, :logfile
21
-
22
- def initialize
23
- @server = nil
24
- @private_key_file = nil
25
- @json_file = nil
26
- @berksfile = nil
27
- @cached = false
28
- @environment = 'production'
29
- @loglevel = 'debug'
30
- @logdir = '/var/log/riyic'
31
- @logfile = "solo_#{Time.now.strftime("%F_%T")}"
32
- @download_tarball = nil
33
- @api_url = nil
34
- end
35
4
 
36
- def load
37
- # evitamos cascar si o ficheiro de configuracion non existe
38
- return self unless File.exists?(FILE)
39
-
40
- h = {}
41
- begin
42
- h = YAML.load(IO::read(FILE))
43
- rescue Exception => e
44
- e.to_s =~ /line (\d+) column/
45
- raise "Error loading yaml config file #{FILE}, syntax error in line #{$1}"
46
- end
47
-
48
- puts "hash de opcions: #{h.inspect}" if $debug
49
-
50
- # evitamos cargar as opcions si non e un hash
51
- if h.class == Hash
52
- h.each do |k,v|
53
- if validate(k,v)
54
- instance_variable_set "@#{k}".to_sym, v
55
- else
56
- raise "Invalid value '#{v}' to parameter '#{k}'"
57
- end
58
- end
59
- end
5
+ class Config
6
+
7
+ CONFIG_DIR = "/etc/riyic"
8
+ FILE = "#{CONFIG_DIR}/lambom.conf"
9
+ UNIX_PATH_REGEX = /^[\w\s.\/\-_+%]+$/i
10
+ URL_REGEX = /^(http(s)?|ftp):\/\/(([A-Za-z0-9-]+\.)*([A-Za-z0-9-]+\.[A-Za-z0-9]+))+((\/?)(([A-Za-z0-9\._\-]+)(\/){0,1}[A-Za-z0-9.-\/]*)){0,1}/
11
+
12
+ attr_accessor(
13
+ :server,
14
+ :private_key_file,
15
+ :environment,
16
+ :loglevel,
17
+ :json_file,
18
+ :berksfile,
19
+ :cached,
20
+ :download_tarball,
21
+ :api_url
22
+ )
60
23
 
61
- self
24
+ attr_reader :logdir, :logfile
62
25
 
63
- end
26
+
27
+ def initialize
28
+ @server = nil
29
+ @private_key_file = nil
30
+ @json_file = nil
31
+ @berksfile = nil
32
+ @cached = false
33
+ @environment = 'production'
34
+ @loglevel = 'debug'
35
+ @logdir = '/var/log/riyic'
36
+ @logfile = "solo_#{Time.now.strftime("%Y%m%d%H%M%S")}"
37
+ @download_tarball = nil
38
+ @api_url = nil
39
+ end
64
40
 
65
- def merge(options)
66
- options.each do |k,v|
67
- puts "mergeando #{k} con valor #{v} en config" if $debug
68
- self.send("#{k}=",v) if validate(k,v)
69
- #instance_variable_set "@#{k}".to_sym, v if validate(k,v)
70
- end
41
+
42
+ def load(argv={})
43
+
44
+ h = {}
45
+
46
+ # evitamos cascar si o ficheiro de configuracion non existe
47
+ if File.exists?(FILE)
48
+
49
+ begin
50
+ h = YAML.load(IO::read(FILE))
51
+ rescue Exception => e
52
+ e.to_s =~ /line (\d+) column/
53
+ raise "Error loading yaml config file #{FILE}, syntax error in line #{$1}"
71
54
  end
72
55
 
73
- def validate(parametro,valor)
74
-
75
- case parametro.to_sym
76
- when :server
77
- # uuid
78
- valor =~ /^[\d\w\-]{36}$/
79
- when :private_key_file
80
- #unix path
81
- valor =~ UNIX_PATH_REGEX && File.exists?(valor)
82
- when :environment
83
- #env de rails
84
- ["production","development","test"].include?(valor)
85
- when :loglevel
86
- #loglevel de chef
87
- %w{debug info}.include?(valor)
88
- when :berksfile
89
- valor =~ UNIX_PATH_REGEX && File.exists?(valor)
90
- when :json_file
91
- valor =~ UNIX_PATH_REGEX && File.exists?(valor)
92
- when :cached
93
- [true,false].include?(valor)
94
- when :api_url
95
- valor =~ URL_REGEX
96
- when :download_tarball
97
- valor =~ URL_REGEX
98
- else
99
- false
100
- #raise "Invalid parameter #{parametro}"
101
- end
56
+ puts "hash de opcions: #{h.inspect}" if $debug
57
+
58
+ raise "Error in config file, YAML loaded is not a hash" unless h.class == Hash
102
59
 
60
+ # convert keys from string to symbols
61
+ h = h.each_with_object({}) {|(k,v),o| o[k.to_sym] = v}
62
+
63
+ end
64
+
65
+ # merge line command hash with config file loaded
66
+ h.merge!(argv)
67
+
68
+ # validate parametros
69
+ h.each do |k,v|
70
+ if validate(k,v)
71
+ instance_variable_set "@#{k}".to_sym, v
72
+ else
73
+ raise "Invalid value '#{v}' to parameter '#{k}'"
103
74
  end
75
+ end
76
+
77
+ return self
78
+
79
+ end
80
+
81
+ def merge(options={})
82
+ options.each do |k,v|
83
+ puts "mergeando #{k} con valor #{v} en config" if $debug
84
+ self.send("#{k}=",v) if validate(k,v)
85
+ end
86
+ end
87
+
88
+
89
+ def validate(parametro,valor)
90
+
91
+ case parametro.to_sym
92
+ when :server
93
+ # uuid
94
+ valor =~ /^[\d\w\-]{36}$/
95
+ when :private_key_file
96
+ #unix path
97
+ valor =~ UNIX_PATH_REGEX && File.exists?(valor)
98
+ when :environment
99
+ #env de rails
100
+ ["production","development","test"].include?(valor)
101
+ when :loglevel
102
+ #loglevel de chef
103
+ %w{debug info}.include?(valor)
104
+ when :berksfile
105
+ valor =~ UNIX_PATH_REGEX && File.exists?(valor)
106
+ when :json_file
107
+ valor =~ UNIX_PATH_REGEX && File.exists?(valor)
108
+ when :cached
109
+ [true,false].include?(valor)
110
+ when :api_url
111
+ valor =~ URL_REGEX
112
+ when :download_tarball
113
+ valor =~ URL_REGEX
114
+ else
115
+ false
116
+ #raise "Invalid parameter #{parametro}"
117
+ end
118
+
104
119
  end
120
+ end
105
121
  end
@@ -1,4 +1,5 @@
1
1
  #require "berkshelf/cli"
2
+ require 'chef/application/solo'
2
3
  module Lambom
3
4
  class Converger
4
5
  include ShellMixin
@@ -22,7 +23,7 @@ module Lambom
22
23
  CHEF_CONF_FILE = "#{Lambom::Config::CONFIG_DIR}/solo.rb"
23
24
 
24
25
  CHEF_CONF_DEV = <<EOF
25
- cookbook_path ["/mnt/opscode/cookbooks", "/mnt/others/cookbooks", "/mnt/riyic/cookbooks"]
26
+ cookbook_path ["/mnt/cookbooks/supermarket", "/mnt/others/cookbooks", "/mnt/riyic/cookbooks"]
26
27
  file_cache_path "#{CACHE_PATH}"
27
28
  EOF
28
29
 
@@ -72,45 +73,64 @@ EOF
72
73
  end
73
74
 
74
75
  def descargar_cookbooks
76
+
75
77
  if conf.download_tarball
78
+
76
79
  # download cookbooks from a tarball
77
80
  temp = "/tmp/cookbooks.tar.gz"
78
81
  run_cmd('curl','-o',temp, '-L',conf.download_tarball)
79
82
  FileUtils.mkdir_p(DEFAULT_CHEF_PATH) unless File.directory?(DEFAULT_CHEF_PATH)
80
83
  run_cmd('tar','xzf',temp,'--no-same-owner','-C', DEFAULT_CHEF_PATH)
81
84
  File.unlink(temp)
82
- else
83
- # use berkshelf to download cookbooks
84
- # Download berksfile from riyic unless it was passed by command line
85
- descargar_berksfile unless @berksfile
86
- berks_install
85
+
87
86
  end
87
+
88
+ # else
89
+ # # use berkshelf to download cookbooks
90
+ # # Download berksfile from riyic unless it was passed by command line
91
+ # descargar_berksfile unless @berksfile
92
+ # berks_install
93
+ # end
88
94
  end
89
95
 
90
- def descargar_berksfile
91
- @berksfile = "#{CACHE_PATH}/#{@name}.berksfile"
92
- berksfile_str = Lambom::ApiClient.new(conf).get_berksfile
96
+ # def descargar_berksfile
97
+ # @berksfile = "#{CACHE_PATH}/#{@name}.berksfile"
98
+ # berksfile_str = Lambom::ApiClient.new(conf).get_berksfile
93
99
 
94
- file = File.new(@berksfile,"w")
95
- file.write(berksfile_str)
96
- file.close
97
- end
100
+ # file = File.new(@berksfile,"w")
101
+ # file.write(berksfile_str)
102
+ # file.close
103
+ # end
98
104
 
99
105
 
100
- def berks_install
101
- cmd = %W{
102
- berks install -b #{@berksfile} -p #{DEFAULT_CHEF_PATH}/cookbooks
103
- }
106
+ # def berks_install
107
+ # cmd = %W{
108
+ # berks install -b #{@berksfile} -p #{DEFAULT_CHEF_PATH}/cookbooks
109
+ # }
104
110
 
105
- run_cmd *cmd
111
+ # run_cmd *cmd
106
112
 
107
- end
113
+ # end
108
114
 
109
115
 
110
116
  def ejecutar_converger
111
117
 
118
+ #cmd = %W{
119
+ # chef-solo
120
+ # -c #{CHEF_CONF_FILE}
121
+ # --log_level #{conf.loglevel}
122
+ # -j #{@json_file}
123
+ #}
124
+ #
125
+ #unless $debug
126
+ # cmd += [
127
+ # "--logfile",
128
+ # "#{conf.logdir}/#{conf.logfile}"
129
+ # ]
130
+ #end
131
+ #run_cmd *cmd
132
+
112
133
  cmd = %W{
113
- chef-solo
114
134
  -c #{CHEF_CONF_FILE}
115
135
  --log_level #{conf.loglevel}
116
136
  -j #{@json_file}
@@ -122,11 +142,17 @@ EOF
122
142
  "#{conf.logdir}/#{conf.logfile}"
123
143
  ]
124
144
  end
125
-
126
- run_cmd *cmd
127
145
 
146
+ # reseteamos argv
147
+ ARGV.clear
148
+ cmd.each do |arg|
149
+ ARGV << arg
150
+ end
151
+
152
+ Chef::Application::Solo.new.run
128
153
  end
129
154
 
155
+
130
156
  def preparar_entorno
131
157
  # dont drop ruby vars from env
132
158
  #ENV_VARS_DELETE.each {|v| ENV.delete(v)}
@@ -1,3 +1,3 @@
1
1
  module Lambom
2
- VERSION = "0.4.3"
2
+ VERSION = "0.4.7"
3
3
  end
@@ -2,27 +2,27 @@ require "lambom"
2
2
  require "lambom/api"
3
3
 
4
4
  describe Lambom::ApiClient do
5
- conf = Lambom::Config.new.load
6
-
7
- conf.merge(environment: "production",
8
- server: "4586273f-f17a-4984-99ef-69c255e1b395",
9
- private_key_file: "spec/private_key.pem",
10
- api_url: "http://172.17.42.1:3000/api/v1")
5
+ conf = Lambom::Config.new.load(
6
+ environment: "production",
7
+ server: "4586273f-f17a-4984-99ef-69c255e1b395",
8
+ private_key_file: "spec/private_key.pem",
9
+ api_url: "http://172.17.42.1:3000/api/v1"
10
+ )
11
11
 
12
- api = Lambom::ApiClient.new(conf)
12
+ api = Lambom::ApiClient.new(conf)
13
13
 
14
- it "must be an ApiClient object" do
15
- expect(api).to be_an_instance_of(Lambom::ApiClient)
16
- end
14
+ it "must be an ApiClient object" do
15
+ expect(api).to be_an_instance_of(Lambom::ApiClient)
16
+ end
17
17
 
18
- describe "getAttributes" do
19
- it "must connect to riyic api" do
20
- expect(api.get_server_config).to match(/^\{.+\}$/)
21
- end
22
- it "must fail to connect to api" do
23
- conf.merge(server: "61a75d44-9856-4e64-a269-111111111111")
24
- api2 = Lambom::ApiClient.new(conf)
25
- expect{api2.get_server_config}.to raise_error(/api error/)
26
- end
18
+ describe "getAttributes" do
19
+ it "must connect to riyic api" do
20
+ expect(api.get_server_config).to match(/^\{.+\}$/)
21
+ end
22
+ it "must fail to connect to api" do
23
+ conf.merge(server: "61a75d44-9856-4e64-a269-111111111111")
24
+ api2 = Lambom::ApiClient.new(conf)
25
+ expect{api2.get_server_config}.to raise_error(/api error/)
27
26
  end
27
+ end
28
28
  end
@@ -4,12 +4,15 @@ require "lambom/converger"
4
4
  describe Lambom::Converger do
5
5
  conf = Lambom::Config.new
6
6
 
7
- conf.merge(:environment => "production",
8
- :server => "4586273f-f17a-4984-99ef-69c255e1b395",
9
- :private_key_file => "spec/private_key.pem",
10
- :loglevel => 'info',
11
- :json_file => 'spec/test_json_file',
12
- :api_url => 'http://172.17.42.1:3000/api/v1' )
7
+ conf.merge(
8
+ :environment => "production",
9
+ :server => "4586273f-f17a-4984-99ef-69c255e1b395",
10
+ :private_key_file => "spec/private_key.pem",
11
+ :loglevel => 'info',
12
+ :json_file => 'spec/test_json_file',
13
+ :api_url => 'http://172.17.42.1:3000/api/v1',
14
+ :download_tarball => 'https://s3-eu-west-1.amazonaws.com/riyic/cookbooks.tar.gz'
15
+ )
13
16
 
14
17
 
15
18
  it "must run convergence tool" do
data/spec/test_json_file CHANGED
@@ -1,10 +1,9 @@
1
1
  {
2
2
  "riyic": {
3
- "dockerized": "no",
4
3
  "updates_check_interval": "never",
5
4
  "env": "development"
6
5
  },
7
6
  "run_list": [
8
7
  "recipe[riyic::default]"
9
8
  ]
10
- }
9
+ }
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lambom
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
5
- prerelease:
4
+ version: 0.4.7
6
5
  platform: ruby
7
6
  authors:
8
7
  - J. Gomez
@@ -14,100 +13,46 @@ dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: oj
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ~>
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
- version: 2.5.4
19
+ version: '2.5'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ~>
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: 2.5.4
30
- - !ruby/object:Gem::Dependency
31
- name: mixlib-authentication
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ~>
36
- - !ruby/object:Gem::Version
37
- version: 1.3.0
38
- type: :runtime
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- version: 1.3.0
46
- - !ruby/object:Gem::Dependency
47
- name: mixlib-shellout
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ~>
52
- - !ruby/object:Gem::Version
53
- version: 1.3.0
54
- type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: 1.3.0
26
+ version: '2.5'
62
27
  - !ruby/object:Gem::Dependency
63
28
  name: chef
64
29
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ~>
68
- - !ruby/object:Gem::Version
69
- version: 11.8.2
70
- type: :runtime
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ~>
76
- - !ruby/object:Gem::Version
77
- version: 11.8.2
78
- - !ruby/object:Gem::Dependency
79
- name: berkshelf
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
30
  requirements:
83
- - - ~>
31
+ - - "~>"
84
32
  - !ruby/object:Gem::Version
85
- version: 2.0.12
33
+ version: 12.0.3
86
34
  type: :runtime
87
35
  prerelease: false
88
36
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
37
  requirements:
91
- - - ~>
38
+ - - "~>"
92
39
  - !ruby/object:Gem::Version
93
- version: 2.0.12
40
+ version: 12.0.3
94
41
  - !ruby/object:Gem::Dependency
95
42
  name: rspec
96
43
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
44
  requirements:
99
- - - ~>
45
+ - - "~>"
100
46
  - !ruby/object:Gem::Version
101
47
  version: '2.0'
102
48
  type: :development
103
49
  prerelease: false
104
50
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
51
  requirements:
107
- - - ~>
52
+ - - "~>"
108
53
  - !ruby/object:Gem::Version
109
54
  version: '2.0'
110
- description: ! "Riyic is a server configuration service based on chef (http://riyic.com).\nThe
55
+ description: "Riyic is a server configuration service based on chef (http://riyic.com).\nThe
111
56
  lambom gem is a tool to apply chef configurations generated with the riyic service,
112
57
  or defined in a pair of plain text files \n(a json attributes file where the server
113
58
  configuration is detailed and a berkshelf file which specifies cookbooks restrictions
@@ -118,8 +63,8 @@ executables:
118
63
  extensions: []
119
64
  extra_rdoc_files: []
120
65
  files:
121
- - .gitignore
122
- - .rspec
66
+ - ".gitignore"
67
+ - ".rspec"
123
68
  - README.md
124
69
  - bin/lambom
125
70
  - lambom.gemspec
@@ -144,26 +89,25 @@ files:
144
89
  homepage: https://github.com/RIYIC/lambom
145
90
  licenses:
146
91
  - Apache-2.0
92
+ metadata: {}
147
93
  post_install_message:
148
94
  rdoc_options: []
149
95
  require_paths:
150
96
  - lib
151
97
  required_ruby_version: !ruby/object:Gem::Requirement
152
- none: false
153
98
  requirements:
154
- - - ! '>='
99
+ - - ">="
155
100
  - !ruby/object:Gem::Version
156
101
  version: '0'
157
102
  required_rubygems_version: !ruby/object:Gem::Requirement
158
- none: false
159
103
  requirements:
160
- - - ! '>='
104
+ - - ">="
161
105
  - !ruby/object:Gem::Version
162
106
  version: '0'
163
107
  requirements: []
164
108
  rubyforge_project:
165
- rubygems_version: 1.8.24
109
+ rubygems_version: 2.2.2
166
110
  signing_key:
167
- specification_version: 3
111
+ specification_version: 4
168
112
  summary: Tool to configure servers based on chef-solo and berkshelf
169
113
  test_files: []