chef-sandwich 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2282901c2af027ce54b89570e6269cee00718f61
4
+ data.tar.gz: 0ed0efbb3a04ae19a624539858513216584a3a36
5
+ SHA512:
6
+ metadata.gz: e2d7d054dd49575b162a4881545e5b84e5bda8b1b0c3fc1152d8634821137eef62e133ede86cc568f89a82ad1d436ddc6442564d7235a29a602f92fbcadc8a20
7
+ data.tar.gz: 2b282f8d93c970e9ed15d2f8a97d65573cc182cac244070cab009fb8b91bfed2f9c6f2a7fb0c94e85db5b1168c2eb9157a8c54e226d14c5634dd2e30e065a94a
data/LICENSE CHANGED
@@ -187,7 +187,7 @@
187
187
  same "printed page" as the copyright notice for easier
188
188
  identification within third-party archives.
189
189
 
190
- Copyright 2011 Sebastian Boehm
190
+ Copyright 2011-2015 Sebastian Boehm
191
191
 
192
192
  Licensed under the Apache License, Version 2.0 (the "License");
193
193
  you may not use this file except in compliance with the License.
data/NEWS CHANGED
@@ -1,4 +1,14 @@
1
1
  * sandwich NEWS
2
+ ** 0.4.0 (2015-01-18)
3
+
4
+ - Naotoshi Seo
5
+ - Fix uninitialized constant Sandwich::Client::UUIDTools
6
+ - Fix uninitialized constant Chef::Application
7
+ - Support segment_filenames
8
+ - Add --json-attributes option
9
+ - Support --why-run mode
10
+ - Enhance error message shown by sandwich command
11
+
2
12
  ** 0.3.0 (2011-10-17)
3
13
 
4
14
  - Add -e option
data/Rakefile CHANGED
@@ -1,13 +1,11 @@
1
1
  require 'rake/testtask'
2
+ require 'sandwich/version'
2
3
 
3
- namespace :gem do
4
- desc 'Build chef-sandwich gem'
5
- task :build do
6
- sh 'gem build chef-sandwich.gemspec'
7
- end
4
+ desc "Build chef-sandwich-#{Sandwich::VERSION}.gem"
5
+ task :gem do
6
+ sh 'gem build chef-sandwich.gemspec'
8
7
  end
9
8
 
10
9
  Rake::TestTask.new do |t|
11
10
  t.pattern = 'spec/*_spec.rb'
12
- t.verbose = false
13
11
  end
@@ -6,6 +6,6 @@ begin
6
6
  sandwich.run(ARGV)
7
7
  rescue SystemExit
8
8
  rescue Exception => e
9
- $stderr.puts("sandwich: #{e.message}")
9
+ $stderr.puts("sandwich: #{e.class} #{e.message} #{e.backtrace.first}")
10
10
  exit(1)
11
11
  end
@@ -43,6 +43,18 @@ module Sandwich
43
43
  'Execute command as a sandwich script') do |c|
44
44
  @options[:command] << c
45
45
  end
46
+
47
+ opts.on('-W',
48
+ '--why-run',
49
+ 'Enable whyrun mode') do
50
+ @options[:why_run] = true
51
+ end
52
+
53
+ opts.on('-j',
54
+ '--json-attributes JSON_ATTRIBS',
55
+ 'Load attributes from a JSON file or URL') do |c|
56
+ @options[:json_attribs] = c
57
+ end
46
58
  end
47
59
  end
48
60
 
@@ -70,10 +82,19 @@ module Sandwich
70
82
  end
71
83
  end
72
84
 
85
+ if @options[:why_run]
86
+ Chef::Config[:why_run] = true
87
+ end
88
+
89
+ if @options[:json_attribs]
90
+ config_fetcher = Chef::ConfigFetcher.new(@options[:json_attribs])
91
+ json_attribs = config_fetcher.fetch_json
92
+ end
93
+
73
94
  # pass remaining arguments on to script
74
95
  ARGV.replace(unparsed_arguments)
75
96
 
76
- runner = Sandwich::Runner.new(recipe_filename, recipe)
97
+ runner = Sandwich::Runner.new(recipe_filename, recipe, json_attribs)
77
98
  runner.run(@options[:log_level])
78
99
  end
79
100
  end
@@ -1,5 +1,7 @@
1
1
  require 'sandwich/cookbook_version'
2
2
  require 'chef'
3
+ require 'uuidtools'
4
+ require 'chef/application'
3
5
 
4
6
  module Sandwich
5
7
  # Chef::Client extended to inject a Sandwich cookbook into the
@@ -13,9 +15,10 @@ module Sandwich
13
15
  #
14
16
  # @param [String] recipe_filename the recipe filename
15
17
  # @param [String] recipe_string the recipe definition
16
- def initialize(recipe_filename, recipe_string = nil)
18
+ # @param [Hash] json_attribs the JSON attributes
19
+ def initialize(recipe_filename, recipe_string = nil, json_attribs = nil)
17
20
  Chef::Config[:solo] = true
18
- super()
21
+ super(json_attribs)
19
22
 
20
23
  if recipe_string
21
24
  @sandwich_basedir = Dir.getwd
@@ -24,8 +24,14 @@ module Sandwich
24
24
  segment,
25
25
  filename,
26
26
  current_filepath=nil)
27
- # keep absolute paths, convert relative paths into absolute paths
28
- filename.start_with?('/') ? filename : File.join(@basedir, filename)
27
+ segment_filenames = [
28
+ File.join(segment.to_s, "#{node[:platform]}-#{node[:platform_version]}", filename),
29
+ File.join(segment.to_s, node[:platform], filename),
30
+ File.join(segment.to_s, 'default', filename),
31
+ File.join(segment.to_s, filename),
32
+ File.expand_path(filename, @basedir), # keep absolute paths, convert relative paths into absolute paths
33
+ ]
34
+ segment_filenames.find {|filename| File.exist?(filename) }
29
35
  end
30
36
  end
31
37
  end
@@ -14,8 +14,9 @@ module Sandwich
14
14
  #
15
15
  # @param [String] recipe_filename the recipe filename
16
16
  # @param [String] recipe_string the recipe definition
17
- def initialize(recipe_filename, recipe_string = nil)
18
- @client = Sandwich::Client.new(recipe_filename, recipe_string)
17
+ # @param [Hash] json_attribs the JSON attributes
18
+ def initialize(recipe_filename, recipe_string = nil, json_attribs = nil)
19
+ @client = Sandwich::Client.new(recipe_filename, recipe_string, json_attribs)
19
20
  end
20
21
 
21
22
  # Run Chef in standalone mode, apply recipe
@@ -1,4 +1,4 @@
1
1
  module Sandwich
2
2
  # the current version of sandwich
3
- VERSION = '0.3.0'
3
+ VERSION = '0.4.0'
4
4
  end
@@ -17,17 +17,6 @@ describe Sandwich::Runner do
17
17
  file.must_equal content
18
18
  end
19
19
  end
20
-
21
- it 'should throw exceptions for files in missing directories' do
22
- with_fakefs do
23
- filename = '/i/am/not/here'
24
- content = 'hello world'
25
- recipe = %Q(file '#{filename}' do content '#{content}';end)
26
- run = Proc.new { run_recipe recipe }
27
- run.must_raise(Errno::ENOENT,
28
- Chef::Exceptions::EnclosingDirectoryDoesNotExist)
29
- end
30
- end
31
20
  end
32
21
 
33
22
  describe Chef::Resource::CookbookFile do
@@ -45,6 +34,22 @@ describe Sandwich::Runner do
45
34
  end
46
35
  end
47
36
 
37
+ describe Chef::Resource::Template do
38
+ it 'should create templates' do
39
+ with_fakefs do
40
+ source = '/source.erb'
41
+ target = '/target'
42
+ content = 'hello <%= node[:hostname] %>'
43
+ recipe = %Q(template '#{target}' do source '/source.erb';end)
44
+ # create source template
45
+ File.open(source, 'w') { |f| f.write(content) }
46
+ run_recipe(recipe)
47
+ hostname = ohai_data(:hostname)
48
+ File.read(target).must_equal "hello #{hostname}"
49
+ end
50
+ end
51
+ end
52
+
48
53
  describe Chef::Resource::Directory do
49
54
  it 'should create directories' do
50
55
  with_fakefs do
@@ -16,11 +16,10 @@ class Ohai::System
16
16
  end
17
17
  end
18
18
 
19
- # monkey patch for https://github.com/defunkt/fakefs/issues/96
20
- class FakeFS::Dir
21
- def self.mkdir(path, integer = 0)
22
- FileUtils.mkdir(path)
23
- end
19
+ def ohai_data(key)
20
+ ohai = Ohai::System.new
21
+ ohai.all_plugins
22
+ ohai.data[key]
24
23
  end
25
24
 
26
25
  def runner_from_recipe(recipe)
@@ -31,17 +30,46 @@ def run_recipe(recipe)
31
30
  runner_from_recipe(recipe).run(:fatal)
32
31
  end
33
32
 
34
- def with_fakefs
35
- FakeFS.activate!
36
- setup_standard_dirs
33
+ # fakefs does not support IO.binread (which is used a lot by chef),
34
+ # therefore monkey patch IO.binread to use FakeFS::File.binread
35
+ def with_fake_io_binread
36
+ IO.instance_eval do
37
+ alias :binread_orig :binread
38
+ def self.binread(path); FakeFS::File.binread(path); end
39
+ end
37
40
  yield
38
41
  ensure
39
- FakeFS.deactivate!
42
+ IO.instance_eval { alias :binread :binread_orig }
43
+ end
44
+
45
+ def with_fakefs
46
+ FakeFS do
47
+ setup_standard_dirs
48
+ with_fake_io_binread { yield }
49
+ end
40
50
  end
41
51
 
42
52
  def setup_standard_dirs
43
53
  FileUtils.mkdir_p '/tmp'
54
+ FileUtils.mkdir_p Chef::Config[:file_cache_path]
44
55
  end
45
56
 
46
57
  # make sure Chef 0.10 exceptions are available when using older Chef versions
47
58
  class Chef::Exceptions::EnclosingDirectoryDoesNotExist; end
59
+
60
+ Chef::Config[:client_fork] = false
61
+ Chef::Config[:force_logger] = true
62
+
63
+ # FakeFS does not provide File.realpath, but for our simple tests
64
+ # expand_path is close enough
65
+ class FakeFS::File
66
+ def self.realpath(*args)
67
+ expand_path(*args)
68
+ end
69
+ end
70
+
71
+ # disable Chef run locks
72
+ class Chef::RunLock
73
+ def test; true; end
74
+ def save_pid; end
75
+ end
metadata CHANGED
@@ -1,85 +1,94 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: chef-sandwich
3
- version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.3.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.0
6
5
  platform: ruby
7
- authors:
6
+ authors:
8
7
  - Sebastian Boehm
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
-
13
- date: 2011-10-17 00:00:00 +02:00
14
- default_executable:
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
11
+ date: 2015-01-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
17
14
  name: chef
18
- prerelease: false
19
- requirement: &id001 !ruby/object:Gem::Requirement
20
- none: false
21
- requirements:
22
- - - ">="
23
- - !ruby/object:Gem::Version
24
- version: "0.9"
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 11.12.8
25
20
  type: :runtime
26
- version_requirements: *id001
27
- - !ruby/object:Gem::Dependency
28
- name: uuidtools
29
21
  prerelease: false
30
- requirement: &id002 !ruby/object:Gem::Requirement
31
- none: false
32
- requirements:
33
- - - ">="
34
- - !ruby/object:Gem::Version
35
- version: "0"
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 11.12.8
27
+ - !ruby/object:Gem::Dependency
28
+ name: uuidtools
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 2.1.5
36
34
  type: :runtime
37
- version_requirements: *id002
38
- - !ruby/object:Gem::Dependency
39
- name: minitest
40
35
  prerelease: false
41
- requirement: &id003 !ruby/object:Gem::Requirement
42
- none: false
43
- requirements:
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- version: "0"
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 2.1.5
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 5.5.1
47
48
  type: :development
48
- version_requirements: *id003
49
- - !ruby/object:Gem::Dependency
50
- name: fakefs
51
49
  prerelease: false
52
- requirement: &id004 !ruby/object:Gem::Requirement
53
- none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- version: "0"
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 5.5.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: fakefs
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.6.4
58
62
  type: :development
59
- version_requirements: *id004
60
- - !ruby/object:Gem::Dependency
61
- name: rake
62
63
  prerelease: false
63
- requirement: &id005 !ruby/object:Gem::Requirement
64
- none: false
65
- requirements:
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
66
  - - ~>
67
- - !ruby/object:Gem::Version
68
- version: 0.8.7
67
+ - !ruby/object:Gem::Version
68
+ version: 0.6.4
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: 10.4.2
69
76
  type: :development
70
- version_requirements: *id005
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: 10.4.2
71
83
  description: |
72
84
  Sandwich lets you apply Chef recipes to your system without having to
73
85
  worry about cookbooks or configuration.
74
-
75
86
  email: sebastian@sometimesfood.org
76
- executables:
87
+ executables:
77
88
  - sandwich
78
89
  extensions: []
79
-
80
90
  extra_rdoc_files: []
81
-
82
- files:
91
+ files:
83
92
  - Rakefile
84
93
  - README.md
85
94
  - LICENSE
@@ -94,33 +103,28 @@ files:
94
103
  - lib/sandwich.rb
95
104
  - spec/runner_spec.rb
96
105
  - spec/spec_helper.rb
97
- has_rdoc: true
98
106
  homepage: https://github.com/sometimesfood/sandwich
99
- licenses: []
100
-
107
+ licenses:
108
+ - Apache License (2.0)
109
+ metadata: {}
101
110
  post_install_message:
102
111
  rdoc_options: []
103
-
104
- require_paths:
112
+ require_paths:
105
113
  - lib
106
- required_ruby_version: !ruby/object:Gem::Requirement
107
- none: false
108
- requirements:
109
- - - ">="
110
- - !ruby/object:Gem::Version
111
- version: "0"
112
- required_rubygems_version: !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: "0"
114
+ required_ruby_version: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ required_rubygems_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - '>='
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
118
124
  requirements: []
119
-
120
125
  rubyforge_project:
121
- rubygems_version: 1.6.2
126
+ rubygems_version: 2.0.14
122
127
  signing_key:
123
- specification_version: 3
128
+ specification_version: 4
124
129
  summary: The easiest way to get started as a chef
125
130
  test_files: []
126
-