vagrant-chefconfig 0.0.2 → 0.1.0

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
2
  SHA1:
3
- metadata.gz: 8c980079fd5c2c530dedcc73e25dd65d5990bfb6
4
- data.tar.gz: bdea236f19e96c7696ec82b1fd0e6948ac5cd2e0
3
+ metadata.gz: f509a14e5ea7178235cdbe28f7f5795532e4155b
4
+ data.tar.gz: d33cdfa17892f30c543554d46b0c177acb05bd95
5
5
  SHA512:
6
- metadata.gz: 9188a96baa8a07b7dd5f1aa71d7980897e9cad1366828ce157f37018ee39b21e2c30221e157c432e24d55a353fc1944a6f20a102fcb49080dc7c697c980116d1
7
- data.tar.gz: c5b3275fb47b4e86f4e2ba9fb92d7b946826de41cb65b2bae2e6fbf2ba091ce0df249bc44d88193dd4f7d6eb2c8befee50dd04c3e7c3900e43f9a5598c8144e3
6
+ metadata.gz: f2f953660d958c572f1b79ebfbb0ec3d2b4d9226f797530a3356e90ebd063dc4263510038d6cead17fa597b9f7ff522cca619042e1d36b501529806543e42bc6
7
+ data.tar.gz: f249315e7323e2bd3dd99a805f3f6de46b72ecabf015f5db6b798b8716bc01d253bb4b8df487d7b204b488f284d86366a887bb0d41ba041bc3f2fcd8895c32ab
data/Gemfile CHANGED
@@ -7,7 +7,7 @@ group :development do
7
7
  # We depend on Vagrant for development, but we don't add it as a
8
8
  # gem dependency because we expect to be installed within the
9
9
  # Vagrant environment itself using `vagrant plugin`.
10
- gem "vagrant", :github => 'mitchellh/vagrant'
10
+ gem "vagrant", :git => "https://github.com/mitchellh/vagrant.git"
11
11
  end
12
12
 
13
13
  # This group is read by Vagrant for plugin development
data/README.md CHANGED
@@ -21,14 +21,33 @@ end
21
21
 
22
22
  The plugin will automatically configure the following Vagrant chef-client provisioner attributes from your knife.rb.
23
23
 
24
- Vagrant chef-client attribute -> knife config attribute
25
- --------------------------------------------------------
26
- * `chef_server_url` - same
27
- * `log_level` - same
28
- * `validation_key_path` - maps to `validation_key`
29
- * `validation_client_name` - same
30
- * `environment` - maps to `vagrant_environment`, this is a non-standard knife config key.
31
- * `encrypted_data_bag_secret_key_path` - maps to `encrypted_data_bag_secret`
24
+ ## Vagrant chef-client attribute -> knife config attribute
25
+ <table>
26
+ <tr>
27
+ <th>Vagrant attribute name</th>
28
+ <th>Knife attribute name</th>
29
+ </tr>
30
+ <tr>
31
+ <td>chef_server_url</td>
32
+ <td>chef_server_url</td>
33
+ </tr>
34
+ <tr>
35
+ <td>log_level</td>
36
+ <td>log_level</td>
37
+ </tr>
38
+ <tr>
39
+ <td>validation_key_path</td>
40
+ <td>validation_key</td>
41
+ </tr>
42
+ <tr>
43
+ <td>environment</td>
44
+ <td>vagrant_environment</td>
45
+ </tr>
46
+ <tr>
47
+ <td>encrypted_data_bag_secret_key_path</td>
48
+ <td>encrypted_data_bag_secret</td>
49
+ </tr>
50
+ </table>
32
51
 
33
52
  Values specified directly in the Vagrantfile override any configured values found in your knife configuration file.
34
53
 
@@ -41,14 +60,26 @@ By default the plugin will be enabled and the path to the knife.rb uses the [sta
41
60
 
42
61
  ## Changelog
43
62
 
63
+ ### 0.1.0
64
+
65
+ - Added support for Vagrant 1.7+.
66
+ - Fixed issue 1. Don't read knife.rb if there are no chef-client provisioner blocks in Vagrantfile.
67
+ - Removed dependency upon Chef gem. Handles loading Knife config directly with mixlib-config
68
+
44
69
  ### 0.0.1
45
70
 
46
- Initial release for Vagrant 1.5
71
+ - Initial release for Vagrant 1.5
47
72
 
48
73
  # Authors
49
74
 
50
75
  * Shawn Neal (<sneal@sneal.net>)
51
76
 
77
+ ## Developing
78
+
79
+ 1. Clone repo
80
+ 2. `bundle install`
81
+ 3. `bundle exec vagrant up`
82
+
52
83
  ## Contributing
53
84
 
54
85
  1. Fork it
data/Rakefile CHANGED
@@ -1 +1,3 @@
1
- require "bundler/gem_tasks"
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ Bundler::GemHelper.install_tasks
@@ -2,7 +2,7 @@
2
2
  # vi: set ft=ruby :
3
3
 
4
4
  Vagrant.configure('2') do |config|
5
- config.vm.box = "opscode_ubuntu-12.04_chef-11.2.0"
5
+ config.vm.box = 'chef/ubuntu-14.04'
6
6
  config.vm.provision :chef_client do |chef|
7
7
  chef.node_name = 'vagrant_chefconfig_test_vm'
8
8
  chef.run_list = [ 'apt' ]
@@ -1,6 +1,6 @@
1
1
  require 'log4r'
2
- require 'chef'
3
- require 'chef/knife'
2
+ require_relative 'knife_config'
3
+ require_relative 'knife_config_locator'
4
4
 
5
5
  module Vagrant
6
6
  module ChefConfig
@@ -12,16 +12,20 @@ module Vagrant
12
12
  end
13
13
 
14
14
  def apply_knife_config()
15
+ provisioners = chef_client_provisioners
16
+ return if provisioners.length == 0
17
+
15
18
  load_knife_config()
16
19
 
17
- chef_client_provisioners.each do |chef_client_provisioner|
18
- chef_config = chef_client_provisioner.config
20
+ provisioners.each do |provisioner|
21
+ chef_config = provisioner.config
19
22
 
20
- set_if_default(chef_config, :chef_server_url, :chef_server_url)
21
- set_if_default(chef_config, :log_level, :log_level)
22
- set_if_default(chef_config, :validation_key_path, :validation_key)
23
- set_if_default(chef_config, :validation_client_name, :validation_client_name)
24
- set_if_default(chef_config, :environment, :vagrant_environment)
23
+ # vagrant config key knife config key
24
+ set_if_default(chef_config, :chef_server_url, :chef_server_url)
25
+ set_if_default(chef_config, :log_level, :log_level)
26
+ set_if_default(chef_config, :validation_key_path, :validation_key)
27
+ set_if_default(chef_config, :validation_client_name, :validation_client_name)
28
+ set_if_default(chef_config, :environment, :vagrant_environment)
25
29
  set_if_default(chef_config, :encrypted_data_bag_secret_key_path, :encrypted_data_bag_secret)
26
30
  end
27
31
  end
@@ -29,45 +33,54 @@ module Vagrant
29
33
 
30
34
  private
31
35
 
32
- def set_if_default(chef_config, config_prop_sym, chef_prop_sym)
36
+ def set_if_default(chef_config, config_prop_sym, knife_prop_sym)
33
37
  config_val = chef_config.send(config_prop_sym)
38
+ knife_val = KnifeConfig[knife_prop_sym]
34
39
 
35
40
  @logger.debug("Vagrantfile config val #{config_prop_sym} = #{config_val}")
36
- @logger.debug("Knife config val #{config_prop_sym} = #{Chef::Config[chef_prop_sym]}")
41
+ @logger.debug("Knife config val #{knife_prop_sym} = #{knife_val}")
37
42
 
38
- if is_default_value(config_prop_sym, config_val)
43
+ if is_default_vagrant_value(config_prop_sym, config_val)
39
44
  @logger.debug("Overwriting '#{config_prop_sym}' in Vagrantfile chef-client " +
40
- "provisioner with '#{Chef::Config[chef_prop_sym]}'")
41
- chef_config.send("#{config_prop_sym}=", Chef::Config[chef_prop_sym])
45
+ "provisioner with '#{knife_val}'")
46
+ chef_config.send("#{config_prop_sym}=", knife_val)
42
47
  end
43
48
  end
44
49
 
45
- def is_default_value(config_prop_sym, config_val)
50
+ def is_default_vagrant_value(config_prop_sym, config_val)
46
51
  case config_prop_sym
47
52
  when :validation_client_name
48
53
  return config_val == 'chef-validator'
49
- when :client_key_path
50
- return config_val == '/etc/chef/client.pem'
54
+ when :log_level
55
+ return config_val == :info
51
56
  else
52
57
  return config_val.nil?
53
58
  end
54
59
  end
55
60
 
56
61
  def chef_client_provisioners()
57
- @env[:machine].config.vm.provisioners.select { |prov| prov.name == :chef_client }
62
+ @env[:machine].config.vm.provisioners.select do |prov|
63
+ begin
64
+ prov.type == :chef_client
65
+ rescue NoMethodError
66
+ prov.name == :chef_client # support for Vagrant <= 1.6.5
67
+ end
68
+ end
58
69
  end
59
70
 
60
71
  def load_knife_config()
61
72
  knife_config_path = locate_knife_config_file()
62
73
  @logger.debug("Using knife config from '#{knife_config_path}'")
63
- Chef::Config.from_file(knife_config_path)
74
+ KnifeConfig.from_file(knife_config_path)
64
75
  end
65
76
 
66
77
  def locate_knife_config_file()
67
- # If the Vagrantfile directly sets the knife.rb path use it, otherwise let
68
- # knife find its configuration file
78
+ # If the Vagrantfile directly sets the knife.rb path use it, otherwise
79
+ # default to the .chef directory under the user's home dir
80
+ # This could be improved to have the same behavior as Chef for finding
81
+ # the knife.rb relative to the current directory
69
82
  knife_config_path = plugin_config().knife_config_path
70
- knife_config_path ? knife_config_path : Chef::Knife.locate_config_file()
83
+ knife_config_path ? knife_config_path : KnifeConfigLocator.new().locate_local_config
71
84
  end
72
85
 
73
86
  def plugin_config()
@@ -76,4 +89,4 @@ module Vagrant
76
89
 
77
90
  end #ChefClientConfigurator
78
91
  end
79
- end
92
+ end
@@ -0,0 +1,28 @@
1
+ require 'mixlib/config'
2
+ require_relative 'path_helper'
3
+
4
+ module Vagrant
5
+ module ChefConfig
6
+ # Subset of Chef Config class functionality
7
+ # Matches Chef 12 default behavior
8
+ class KnifeConfig
9
+
10
+ extend Mixlib::Config
11
+
12
+ default :chef_server_url, "https://localhost:443"
13
+ default :log_level, :auto
14
+ default(:validation_key) { PathHelper.platform_specific_path("/etc/chef/validation.pem") }
15
+ default :validation_client_name, 'chef-validator'
16
+ default :vagrant_environment, :dev
17
+
18
+ default(:encrypted_data_bag_secret) do
19
+ key_path = PathHelper.platform_specific_path("/etc/chef/encrypted_data_bag_secret")
20
+ if File.exist?(key_path)
21
+ key_path
22
+ else
23
+ nil
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,73 @@
1
+ require_relative 'path_helper'
2
+
3
+ module Vagrant
4
+ module ChefConfig
5
+ # Locates the local knife config using the same behavior as Chef 12
6
+ # Borrowed from Chef WorkstationConfigLoader
7
+ # Author:: Daniel DeLeo (<dan@getchef.com>)
8
+ class KnifeConfigLocator
9
+
10
+ def initialize()
11
+ @logger = Log4r::Logger.new("vagrant_chefconfig::knifeconfiglocator")
12
+ end
13
+
14
+ def locate_local_config
15
+ candidate_configs = []
16
+
17
+ # Look for $KNIFE_HOME/knife.rb (allow multiple knives config on same machine)
18
+ if ENV['KNIFE_HOME']
19
+ candidate_configs << File.join(ENV['KNIFE_HOME'], 'config.rb')
20
+ candidate_configs << File.join(ENV['KNIFE_HOME'], 'knife.rb')
21
+ end
22
+ # Look for $PWD/knife.rb
23
+ if Dir.pwd
24
+ candidate_configs << File.join(Dir.pwd, 'config.rb')
25
+ candidate_configs << File.join(Dir.pwd, 'knife.rb')
26
+ end
27
+ # Look for $UPWARD/.chef/knife.rb
28
+ if chef_config_dir
29
+ candidate_configs << File.join(chef_config_dir, 'config.rb')
30
+ candidate_configs << File.join(chef_config_dir, 'knife.rb')
31
+ end
32
+ # Look for $HOME/.chef/knife.rb
33
+ candidate_configs << File.join(home_dot_chef_dir, 'config.rb')
34
+ candidate_configs << File.join(home_dot_chef_dir, 'knife.rb')
35
+
36
+ candidate_configs.find do | candidate_config |
37
+ have_config?(candidate_config)
38
+ end
39
+ end
40
+
41
+ private
42
+
43
+ def chef_config_dir
44
+ if @chef_config_dir.nil?
45
+ @chef_config_dir = false
46
+ full_path = Dir.pwd.split(File::SEPARATOR)
47
+ (full_path.length - 1).downto(0) do |i|
48
+ candidate_directory = File.join(full_path[0..i] + [".chef" ])
49
+ if File.exist?(candidate_directory) && File.directory?(candidate_directory)
50
+ @chef_config_dir = candidate_directory
51
+ break
52
+ end
53
+ end
54
+ end
55
+ @chef_config_dir
56
+ end
57
+
58
+ def home_dot_chef_dir
59
+ File.join(Dir.home, '.chef')
60
+ end
61
+
62
+ def have_config?(path)
63
+ if File.exist?(path)
64
+ @logger.info("Using config at #{path}")
65
+ true
66
+ else
67
+ @logger.debug("Config not found at #{path}, trying next option")
68
+ false
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,27 @@
1
+ module Vagrant
2
+ module ChefConfig
3
+ # Helper to deal with paths, mainly on Windows
4
+ # Borrowed from Chef 12 PathHelper class
5
+ class PathHelper
6
+ def self.platform_specific_path(path)
7
+ path = cleanpath(path)
8
+ if Gem.win_platform?
9
+ # \etc\chef\client.rb and \var\chef\client.rb -> C:/chef/client.rb
10
+ if env['SYSTEMDRIVE'] && path[0] == '\\' && path.split('\\')[2] == 'chef'
11
+ path = File.join(env['SYSTEMDRIVE'], path.split('\\', 3)[2])
12
+ end
13
+ end
14
+ path
15
+ end
16
+
17
+ def self.cleanpath(path)
18
+ path = Pathname.new(path).cleanpath.to_s
19
+ # ensure all forward slashes are backslashes
20
+ if Gem.win_platform?
21
+ path = path.gsub(File::SEPARATOR, path_separator)
22
+ end
23
+ path
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,5 +1,5 @@
1
1
  module Vagrant
2
2
  module ChefConfig
3
- VERSION = '0.0.2'
3
+ VERSION = '0.1.0'
4
4
  end
5
5
  end
@@ -18,9 +18,8 @@ Gem::Specification.new do |gem|
18
18
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
19
  gem.require_paths = ["lib"]
20
20
 
21
- gem.add_dependency "chef", "~> 11"
21
+ gem.add_runtime_dependency "mixlib-config", "~> 2"
22
22
 
23
23
  gem.add_development_dependency "rake"
24
24
  gem.add_development_dependency "rspec"
25
- gem.add_development_dependency "bundler", ">= 1.3"
26
25
  end
metadata CHANGED
@@ -1,71 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-chefconfig
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shawn Neal
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-18 00:00:00.000000000 Z
11
+ date: 2015-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: chef
14
+ name: mixlib-config
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '11'
19
+ version: '2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '11'
26
+ version: '2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: bundler
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - '>='
60
- - !ruby/object:Gem::Version
61
- version: '1.3'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - '>='
67
- - !ruby/object:Gem::Version
68
- version: '1.3'
69
55
  description: Load Chef gem client config from knife.rb
70
56
  email:
71
57
  - sneal@sneal.net
@@ -73,8 +59,8 @@ executables: []
73
59
  extensions: []
74
60
  extra_rdoc_files: []
75
61
  files:
76
- - .gitignore
77
- - .travis.yml
62
+ - ".gitignore"
63
+ - ".travis.yml"
78
64
  - Gemfile
79
65
  - LICENSE.txt
80
66
  - README.md
@@ -87,6 +73,9 @@ files:
87
73
  - lib/vagrant-chefconfig/config.rb
88
74
  - lib/vagrant-chefconfig/env.rb
89
75
  - lib/vagrant-chefconfig/errors.rb
76
+ - lib/vagrant-chefconfig/knife_config.rb
77
+ - lib/vagrant-chefconfig/knife_config_locator.rb
78
+ - lib/vagrant-chefconfig/path_helper.rb
90
79
  - lib/vagrant-chefconfig/plugin.rb
91
80
  - lib/vagrant-chefconfig/version.rb
92
81
  - vagrant-chefconfig.gemspec
@@ -100,17 +89,17 @@ require_paths:
100
89
  - lib
101
90
  required_ruby_version: !ruby/object:Gem::Requirement
102
91
  requirements:
103
- - - '>='
92
+ - - ">="
104
93
  - !ruby/object:Gem::Version
105
94
  version: '0'
106
95
  required_rubygems_version: !ruby/object:Gem::Requirement
107
96
  requirements:
108
- - - '>='
97
+ - - ">="
109
98
  - !ruby/object:Gem::Version
110
99
  version: '0'
111
100
  requirements: []
112
101
  rubyforge_project:
113
- rubygems_version: 2.0.14
102
+ rubygems_version: 2.2.2
114
103
  signing_key:
115
104
  specification_version: 4
116
105
  summary: Duplicating Chef client configuration is less than ideal, lets reuse our