berkshelf-solo 0.0.1

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: 25f56005c305a9338010d5345de97dea117f910d
4
+ data.tar.gz: ad64806f3c518daacd7e190802d54bdfdf8dadfa
5
+ SHA512:
6
+ metadata.gz: 0558fed1bbe14ce71851dc932073ced54f683ef29ac1b196fb155aec07307ba836f2802760347a7428a327456e8616ab49f772f5cf2be4f6820aa40317e383db
7
+ data.tar.gz: 248abebed963c913d97f89c7c793c00e57d30d1ba7b2aabe28ee8230c5dc5adf7531e421611fedd329fcfcb6493c9524c62dffcab5058391d476efaf860e524c
data/README.md ADDED
@@ -0,0 +1,4 @@
1
+ berkshelf-solo
2
+ ==============
3
+
4
+ Generate Chef solo JSON file
data/Rakefile ADDED
@@ -0,0 +1,19 @@
1
+ $:.unshift File.expand_path '../lib', __FILE__
2
+ require 'berkshelf/solo'
3
+ require 'rake'
4
+ require 'rubygems/package_task'
5
+ require "rake/testtask"
6
+
7
+ Gem::PackageTask.new(eval File.read('berkshelf-solo.gemspec')) do |pkg|
8
+ pkg.need_zip = false
9
+ pkg.need_tar = false
10
+ end
11
+
12
+ task :build => [:compile] do
13
+ `rake gem`
14
+ end
15
+
16
+ task :install => [:build] do
17
+ sh "gem install pkg/berkshelf-solo"
18
+ Rake::Task['clobber_package'].execute
19
+ end
@@ -0,0 +1,5 @@
1
+ module Berkshelf
2
+ module Solo
3
+ VERSION="0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,85 @@
1
+ require 'berkshelf'
2
+ require 'berkshelf/dependency'
3
+ require 'fileutils'
4
+ require 'json'
5
+
6
+ module Berkshelf
7
+ module Solo
8
+ class Runner
9
+
10
+ Berkshelf::Dependency.add_valid_option :recipes
11
+
12
+ def initialize dependencies, cookbook_path
13
+ @dependencies = dependencies
14
+ @options = get_options cookbook_path
15
+ @solo_config = { "run_list" => [] }.merge load_solo_config
16
+ end
17
+
18
+ attr_reader :options, :dependencies, :solo_config
19
+
20
+ def run
21
+ [
22
+ :cookbook_path,
23
+ :roles_path,
24
+ :environments_path,
25
+ :data_bags_path
26
+ ].map(&options.method(:fetch)).map(&FileUtils.method(:mkdir_p))
27
+
28
+ dependencies.each do |name, opt|
29
+ solo_config["run_list"] += (opt[:recipes] || ['default']).map {|o| "recipe[#{name}::#{o}]"}
30
+ end
31
+ solo_config["run_list"].uniq!
32
+
33
+ File.open(options[:solo_config_path],'w') { |f| f.puts JSON.pretty_generate(solo_config) }
34
+ File.open(options[:solo_config_rb_path],'w') { |f| f.puts solo_config_rb }
35
+ end
36
+
37
+ private
38
+
39
+ def load_solo_config
40
+ JSON.parse(File.read(options[:solo_config_path])) rescue Hash.new
41
+ end
42
+
43
+ def solo_config_rb
44
+ <<-TEXT.gsub(/^\s+/,'')
45
+ file_cache_path File.expand_path(File.dirname(__FILE__))
46
+ cookbook_path File.expand_path('../#{File.basename(options[:cookbook_path])}',__FILE__)
47
+ role_path File.expand_path('../roles',__FILE__)
48
+ environment_path File.expand_path('../environments',__FILE__)
49
+ data_bag_path File.expand_path('../data_bags',__FILE__)
50
+ solo true
51
+ TEXT
52
+ end
53
+
54
+ def get_options cookbook_path
55
+ base = File.expand_path('..',cookbook_path)
56
+ {
57
+ :path => base,
58
+ :cookbook_path => File.expand_path(cookbook_path),
59
+ :roles_path => File.join(base,'roles'),
60
+ :solo_config_path => File.join(base,'solo.json'),
61
+ :solo_config_rb_path => File.join(base,'solo.rb'),
62
+ :environments_path => File.join(base,'environments'),
63
+ :data_bags_path => File.join(base,'data_bags')
64
+ }
65
+ end
66
+
67
+ end
68
+ end
69
+ end
70
+
71
+ set_trace_func proc { |_,file,_,_,binding,_|
72
+ if file =~ /Berksfile/i and ARGV.include? "vendor"
73
+ cookbook_path = ARGV[ARGV.index('vendor')+1]
74
+ FileUtils.mkdir_p(File.expand_path('..',cookbook_path))
75
+ Kernel.at_exit {
76
+ dependencies = Hash[
77
+ eval("@instance",binding).instance_variable_get(:@dependencies).map { |name, dep|
78
+ [name, dep.instance_variable_get(:@options)]
79
+ }
80
+ ]
81
+ Berkshelf::Solo::Runner.new(dependencies,cookbook_path).run
82
+ }
83
+ set_trace_func(nil)
84
+ end
85
+ }
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: berkshelf-solo
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Eran Barak Levi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-08-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 5.0.0
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 5.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: mocha
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 0.14.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 0.14.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: berkshelf
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 3.0.0.beta2
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 3.0.0.beta2
55
+ description: Makes Berkshelf more friendly to chef-solo by generating chef-solo folder
56
+ layout
57
+ email: eran@kontera.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - README.md
63
+ - Rakefile
64
+ - lib/berkshelf/solo/version.rb
65
+ - lib/berkshelf/solo.rb
66
+ homepage: http://www.kontera.com
67
+ licenses: []
68
+ metadata: {}
69
+ post_install_message:
70
+ rdoc_options: []
71
+ require_paths:
72
+ - lib
73
+ required_ruby_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 1.9.1
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ requirements: []
84
+ rubyforge_project: berkshelf-solo
85
+ rubygems_version: 2.0.3
86
+ signing_key:
87
+ specification_version: 4
88
+ summary: Makes Berkshelf more friendly to chef-solo
89
+ test_files: []