chef-sugar 2.4.1 → 2.5.0

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
2
  SHA1:
3
- metadata.gz: e465a9d96bf0fdbc8f6456ea39bc616d2cbc7a8d
4
- data.tar.gz: 16bb961fe714064dd2e06460db620053ee7274f5
3
+ metadata.gz: cb7fd64f85beb2f7d54f0db0eeeddc14a7062c4c
4
+ data.tar.gz: 81314e1d07f9f66f6aaacec9791c136f18742e7d
5
5
  SHA512:
6
- metadata.gz: aad1b49fee02c34af4a72acfbe0aeadfc0c875fd6fbf654f83331f73b2608736d75b4404d1640a38cf6ba2f9ee66c9ba11bd62ce0ad60855094771e1a070bcf6
7
- data.tar.gz: fb9fbad59102cfba1a21603d8982aeff403bb97a2442ae91c2179e33e825db5be42b560955d7c477415e0e6028757aead9b6c4205f9cbf7d48893db27e16291f
6
+ metadata.gz: c253b9e100abc3d1b37282b31bef7044dcbc89d198624ea921e1ad9110d5eae03158c0b1bd981c284db9182db58390254fc99ef0f6ac3c92bcff92f104d77f5c
7
+ data.tar.gz: e52323a36a787b6daf95e1ccef69e16c30f2bc92ca1e5ff2e8cbf82d981109cf31c6f18bafc895e8a8bbdc5c554deaae2088a9a80d6cbb707b83bfd411926c5e
data/CHANGELOG.md CHANGED
@@ -2,6 +2,17 @@ Chef Sugar Changelog
2
2
  =========================
3
3
  This file is used to list changes made in each version of the chef-sugar cookbook and gem.
4
4
 
5
+ v2.5.0 (2015-01-05)
6
+ -------------------
7
+ ### Improvements
8
+ - Add `data_bag_item_for_environment` function
9
+ - Add `kvm?` matcher
10
+ - Add `virtualbox?` matcher
11
+
12
+ ### Bug Fixes
13
+ - Use `.key?` to check for hash key presence, raising an `AttributeDoesNotExist`
14
+ error sooner
15
+
5
16
  v2.4.1 (2014-10-12)
6
17
  -------------------
7
18
  - No changes from v2.4.0 - forced a new version upload to the Chef Supermarket
data/README.md CHANGED
@@ -139,7 +139,8 @@ require 'chef/sugar/core_extensions'
139
139
 
140
140
  ### Data Bag
141
141
  - `encrypted_data_bag_item` - a handy DSL method for loading encrypted data bag items the same way you load a regular data bag item; this requires `Chef::Config[:encrypted_data_bag_secret]` is set!
142
- - `encrypted_data_bag_item_for_environment` - find the data bag entry for the current node's Chef environment.
142
+ - `encrypted_data_bag_item_for_environment` - find the encrypted data bag entry for the current node's Chef environment.
143
+ - `data_bag_item_for_environment` - find the data bag entry for the current node's Chef environment.
143
144
 
144
145
  #### Examples
145
146
  ```ruby
@@ -150,6 +151,10 @@ encrypted_data_bag_item('accounts', 'hipchat')
150
151
  encrypted_data_bag_item_for_environment('accounts', 'github')
151
152
  ```
152
153
 
154
+ ```ruby
155
+ data_bag_item_for_environment('accounts', 'github')
156
+ ```
157
+
153
158
  ### Docker
154
159
  Chef Sugar looks for hints to see if the node being converged is a Docker container. When [Ohai supports checking other nodes](https://github.com/opscode/ohai/pull/428), Chef Sugar will automatically pick up the information.
155
160
 
@@ -258,13 +263,16 @@ end
258
263
  ```
259
264
 
260
265
  ### Node
266
+
267
+ Additional methods for the `node` object
268
+
261
269
  - `deep_fetch` - safely fetch a nested attribute.
262
270
  - `deep_fetch!` - fetch a nested attribute, raising a more semantic error if the key does not exist.
263
271
  - `in?` - determine if the node is in the given Chef environment.
264
272
 
265
273
  #### Examples
266
274
  ```ruby
267
- credentials = if in?('production')
275
+ credentials = if node.in?('production')
268
276
  Chef::EncryptedDataBag.new('...')
269
277
  else
270
278
  data_bag('...')
@@ -389,7 +397,9 @@ end
389
397
  ```
390
398
 
391
399
  ### Virtualization
400
+ - `kvm?`
392
401
  - `lxc?`
402
+ - `virtualbox?`
393
403
  - `vmware?`
394
404
 
395
405
  #### Examples
@@ -91,6 +91,39 @@ EOH
91
91
  data['default']
92
92
  end
93
93
  end
94
+
95
+ #
96
+ # This algorithm attempts to find the data bag entry for the current
97
+ # node's Chef environment. If there are no environment-specific
98
+ # values, the "default" bucket is used. The data bag must follow the
99
+ # schema:
100
+ #
101
+ # {
102
+ # "default": {...},
103
+ # "environment_name": {...},
104
+ # "other_environment": {...},
105
+ # }
106
+ #
107
+ # @param [Node] node
108
+ # the current Chef node
109
+ # @param [String] bag
110
+ # the name of the data bag
111
+ # @param [String] id
112
+ # the id of the data bag
113
+ #
114
+ # @return [Hash]
115
+ #
116
+ def data_bag_item_for_environment(node, bag, id)
117
+ data = Chef::DataBagItem.load(bag, id)
118
+
119
+ if data[node.chef_environment]
120
+ Chef::Log.debug "Using #{node.chef_environment} as the key"
121
+ data[node.chef_environment]
122
+ else
123
+ Chef::Log.debug "#{node.chef_environment} key does not exist, using `default`"
124
+ data['default']
125
+ end
126
+ end
94
127
  end
95
128
 
96
129
  module DSL
@@ -103,6 +136,11 @@ EOH
103
136
  def encrypted_data_bag_item_for_environment(bag, id, secret = nil)
104
137
  Chef::Sugar::DataBag.encrypted_data_bag_item_for_environment(node, bag, id, secret)
105
138
  end
139
+
140
+ # @see Chef::Sugar::DataBag#data_bag_item_for_environment
141
+ def data_bag_item_for_environment(bag, id)
142
+ Chef::Sugar::DataBag.data_bag_item_for_environment(node, bag, id)
143
+ end
106
144
  end
107
145
  end
108
146
  end
@@ -73,10 +73,12 @@ EOH
73
73
  keys.map!(&:to_s)
74
74
 
75
75
  keys.inject(attributes.to_hash) do |hash, key|
76
- hash[key]
76
+ if hash.key?(key)
77
+ hash[key]
78
+ else
79
+ raise AttributeDoesNotExistError.new(keys)
80
+ end
77
81
  end
78
- rescue NoMethodError
79
- raise AttributeDoesNotExistError.new(keys)
80
82
  end
81
83
 
82
84
  #
@@ -16,6 +16,6 @@
16
16
 
17
17
  class Chef
18
18
  module Sugar
19
- VERSION = '2.4.1'
19
+ VERSION = '2.5.0'
20
20
  end
21
21
  end
@@ -19,6 +19,19 @@ class Chef
19
19
  module Virtualization
20
20
  extend self
21
21
 
22
+ #
23
+ # Determine if the current node is running under KVM.
24
+ #
25
+ # @param [Chef::Node] node
26
+ #
27
+ # @return [Boolean]
28
+ # true if the machine is currently running under KVM, false
29
+ # otherwise
30
+ #
31
+ def kvm?(node)
32
+ node.key?('virtualization') && node['virtualization']['system'] == 'kvm'
33
+ end
34
+
22
35
  #
23
36
  # Determine if the current node is running in a linux container.
24
37
  #
@@ -32,6 +45,19 @@ class Chef
32
45
  node.key?('virtualization') && node['virtualization']['system'] == 'lxc'
33
46
  end
34
47
 
48
+ #
49
+ # Determine if the current node is running under VirtualBox.
50
+ #
51
+ # @param [Chef::Node] node
52
+ #
53
+ # @return [Boolean]
54
+ # true if the machine is currently running under VirtualBox, false
55
+ # otherwise
56
+ #
57
+ def virtualbox?(node)
58
+ node.key?('virtualization') && node['virtualization']['system'] == 'vbox'
59
+ end
60
+
35
61
  #
36
62
  # Determine if the current node is running under VMware.
37
63
  #
@@ -47,11 +73,17 @@ class Chef
47
73
  end
48
74
 
49
75
  module DSL
76
+ # @see Chef::Sugar::Virtualization#kvm?
77
+ def kvm?; Chef::Sugar::Virtualization.kvm?(node); end
78
+
50
79
  # @see Chef::Sugar::Virtualization#lxc?
51
80
  def lxc?; Chef::Sugar::Virtualization.lxc?(node); end
52
81
 
82
+ # @see Chef::Sugar::Virtualization#virtualbox?
83
+ def virtualbox?; Chef::Sugar::Virtualization.virtualbox?(node); end
84
+
53
85
  # @see Chef::Sugar::Virtualization#vmware?
54
86
  def vmware?; Chef::Sugar::Virtualization.vmware?(node); end
55
- end
87
+ end
56
88
  end
57
89
  end
@@ -71,4 +71,48 @@ describe Chef::Sugar::DataBag do
71
71
  end
72
72
  end
73
73
  end
74
+
75
+ describe '#data_bag_item_for_environment' do
76
+ let(:node) { double(:node, chef_environment: 'production') }
77
+
78
+ context 'when the environment exists' do
79
+ it 'loads the data from the environment' do
80
+ allow(Chef::DataBagItem).to receive(:load).and_return(
81
+ 'production' => {
82
+ 'username' => 'sethvargo',
83
+ 'comment' => 'loves bacon',
84
+ },
85
+ 'default' => {
86
+ 'username' => 'schisamo',
87
+ 'comment' => 'more of a ham guy',
88
+ }
89
+ )
90
+
91
+ expect(described_class.data_bag_item_for_environment(node, 'accounts', 'github')).to eq(
92
+ 'comment' => 'loves bacon',
93
+ 'username' => 'sethvargo',
94
+ )
95
+ end
96
+ end
97
+
98
+ context 'when the environment does not exist' do
99
+ it 'loads the data from the default bucket' do
100
+ allow(Chef::DataBagItem).to receive(:load).and_return(
101
+ 'staging' => {
102
+ 'username' => 'sethvargo',
103
+ 'comment' => 'loves bacon',
104
+ },
105
+ 'default' => {
106
+ 'username' => 'schisamo',
107
+ 'comment' => 'more of a ham guy',
108
+ }
109
+ )
110
+
111
+ expect(described_class.data_bag_item_for_environment(node, 'accounts', 'github')).to eq(
112
+ 'comment' => 'more of a ham guy',
113
+ 'username' => 'schisamo',
114
+ )
115
+ end
116
+ end
117
+ end
74
118
  end
@@ -46,7 +46,7 @@ describe Chef::Node do
46
46
 
47
47
  it 'raises an error if a key does not exist' do
48
48
  expect {
49
- node.deep_fetch!(:apache2, :not_real, :nested, :yup)
49
+ node.deep_fetch!(:apache2, :not_real)
50
50
  }.to raise_error(Chef::Node::AttributeDoesNotExistError)
51
51
  end
52
52
  end
@@ -3,6 +3,23 @@ require 'spec_helper'
3
3
  describe Chef::Sugar::Virtualization do
4
4
  it_behaves_like 'a chef sugar'
5
5
 
6
+ describe '#kvm?' do
7
+ it 'returns true when the machine is under kvm' do
8
+ node = { 'virtualization' => { 'system' => 'kvm' } }
9
+ expect(described_class.kvm?(node)).to be true
10
+ end
11
+
12
+ it 'returns false when the virtual machine is not under kvm' do
13
+ node = { 'virtualization' => { 'system' => 'vbox' } }
14
+ expect(described_class.kvm?(node)).to be false
15
+ end
16
+
17
+ it 'returns false when the machine is not virtual' do
18
+ node = {}
19
+ expect(described_class.kvm?(node)).to be false
20
+ end
21
+ end
22
+
6
23
  describe '#lxc?' do
7
24
  it 'returns true when the machine is a linux contianer' do
8
25
  node = { 'virtualization' => { 'system' => 'lxc' } }
@@ -20,6 +37,23 @@ describe Chef::Sugar::Virtualization do
20
37
  end
21
38
  end
22
39
 
40
+ describe '#virtualbox?' do
41
+ it 'returns true when the machine is under virtualbox' do
42
+ node = { 'virtualization' => { 'system' => 'vbox' } }
43
+ expect(described_class.virtualbox?(node)).to be true
44
+ end
45
+
46
+ it 'returns false when the virtual machine is not under virtualbox' do
47
+ node = { 'virtualization' => { 'system' => 'kvm' } }
48
+ expect(described_class.virtualbox?(node)).to be false
49
+ end
50
+
51
+ it 'returns false when the machine is not virtual' do
52
+ node = {}
53
+ expect(described_class.virtualbox?(node)).to be false
54
+ end
55
+ end
56
+
23
57
  describe '#vmware?' do
24
58
  it 'returns true when the machine is under vmware' do
25
59
  node = { 'virtualization' => { 'system' => 'vmware' } }
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'chef-sugar::default' do
4
- let(:chef_run) { ChefSpec::Runner.new.converge(described_recipe) }
4
+ let(:chef_run) { ChefSpec::ServerRunner.new.converge(described_recipe) }
5
5
 
6
6
  it 'installs the chef gem' do
7
7
  expect(chef_run).to install_chef_gem('chef-sugar').with(version: Chef::Sugar::VERSION)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-sugar
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.1
4
+ version: 2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Seth Vargo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-12 00:00:00.000000000 Z
11
+ date: 2015-01-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -166,7 +166,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
166
  version: '0'
167
167
  requirements: []
168
168
  rubyforge_project:
169
- rubygems_version: 2.3.0
169
+ rubygems_version: 2.4.5
170
170
  signing_key:
171
171
  specification_version: 4
172
172
  summary: A collection of helper methods and modules that make working with Chef recipes