stemcell 0.11.3 → 0.11.5

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: e1985ece8df9f721b6539fbb713edc2afac3aa51
4
- data.tar.gz: 0e228632034995ff817c13539f5d26c64502289e
3
+ metadata.gz: d645147dff53b000f27b6c94e9f258b562be3046
4
+ data.tar.gz: 8665361d799f879d46469b8763610ded5adda9c2
5
5
  SHA512:
6
- metadata.gz: 88ac52c792dba1fd783f30d4de62b4d82cce7f666e7afcccabd71915921255b7bacfb1549e3b317f6f87ffaa323804f2b627d36961178ed154a80bdd180fc206
7
- data.tar.gz: e635d3d38f33a2078c32861fe0de7f8844b5f4f153a2c433b7537d450748830d7041e4d47e84901412d202474e78d4d1e4ff87594b35e7042df37bf2a94ad424
6
+ metadata.gz: ff97aebd5d20e481dd18be4e169d74716bace6f852df0e2c3724c9a3857b8eb6f822528dadfb1dc3b06ea12aea6966d6048c234647d2e59d75e6eb0a626c2323
7
+ data.tar.gz: 226385834d35ec5a3d2de806db85d718eac90b0b4332a0f8c73c069d4a97739f2606edb3847b32b39d8325b0362c125a50b94602f64c771b7f31c21a44854c7f
data/.travis.yml CHANGED
@@ -6,3 +6,5 @@ rvm:
6
6
  - 2.1.2
7
7
  - 2.2.4
8
8
  - 2.3.1
9
+ before_install:
10
+ - gem install bundler
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # 0.11.5
2
+ - No changes
3
+
4
+ # 0.11.4
5
+ - Support for setting normal attributes in role expansio
6
+ - Support for loading cookbook attributes
7
+
1
8
  # 0.11.3
2
9
  - add legacy-mode flag to bootstrap.sh.erb when launching Chef 12.11 or newer
3
10
 
data/Gemfile CHANGED
@@ -8,3 +8,5 @@ group :test do
8
8
  gem 'simplecov', :require => false
9
9
  gem 'rake', '~> 10.3.2'
10
10
  end
11
+
12
+ gem 'nokogiri', '< 1.7.0'
data/README.md CHANGED
@@ -77,7 +77,7 @@ $ stemcell $your_chef_role --tail
77
77
 
78
78
  ### Terminating:
79
79
 
80
- To terminate, use the necrosis command and pass a space seperated list of instance ids:
80
+ To terminate, use the necrosis command and pass a space separated list of instance ids:
81
81
 
82
82
  ```bash
83
83
  $ necrosis i-12345678 i-12345679 i-12345670
@@ -29,6 +29,7 @@ module Stemcell
29
29
  'chef_role',
30
30
  'chef_environment',
31
31
  'chef_data_bag_secret',
32
+ 'chef_data_bag_secret_path',
32
33
  'git_branch',
33
34
  'git_key',
34
35
  'git_origin',
@@ -76,6 +77,7 @@ module Stemcell
76
77
  @vpc_id = opts['vpc_id']
77
78
  @aws_access_key = opts['aws_access_key']
78
79
  @aws_secret_key = opts['aws_secret_key']
80
+ @aws_session_token = opts['aws_session_token']
79
81
  end
80
82
 
81
83
  def launch(opts={})
@@ -185,13 +187,13 @@ module Stemcell
185
187
 
186
188
  # link to classiclink
187
189
  set_classic_link(instances, opts['classic_link'])
188
- @log.info "succesfully applied classic link settings (if any)"
190
+ @log.info "successfully applied classic link settings (if any)"
189
191
 
190
192
  # turn on termination protection
191
193
  # we do this now to make sure all other settings worked
192
194
  if opts['termination_protection']
193
195
  enable_termination_protection(instances)
194
- @log.info "succesfully enabled termination protection"
196
+ @log.info "successfully enabled termination protection"
195
197
  end
196
198
 
197
199
  # wait for aws to report instance stats
@@ -401,13 +403,16 @@ module Stemcell
401
403
  :access_key_id => @aws_access_key,
402
404
  :secret_access_key => @aws_secret_key
403
405
  }) if @aws_access_key && @aws_secret_key
406
+ aws_configs.merge!({
407
+ :session_token => @aws_session_token,
408
+ }) if @aws_session_token
404
409
  AWS.config(aws_configs)
405
410
 
406
411
  # calculate our ec2 url
407
412
  ec2_url = "ec2.#{@region}.amazonaws.com"
408
413
 
409
414
  if @vpc_id
410
- @ec2 = AWS::VPC.new(@vpc_id, :ec2_endpoint => ec2_url)
415
+ @ec2 = AWS::EC2::VPC.new(@vpc_id, :ec2_endpoint => ec2_url)
411
416
  else
412
417
  @ec2 = AWS::EC2.new(:ec2_endpoint => ec2_url)
413
418
  end
@@ -95,9 +95,10 @@ module Stemcell
95
95
 
96
96
  def invoke_launcher(options={})
97
97
  launcher = Launcher.new({
98
- 'aws_access_key' => options['aws_access_key'],
99
- 'aws_secret_key' => options['aws_secret_key'],
100
- 'region' => options['region'],
98
+ 'aws_access_key' => options['aws_access_key'],
99
+ 'aws_secret_key' => options['aws_secret_key'],
100
+ 'aws_session_token' => options['aws_session_token'],
101
+ 'region' => options['region'],
101
102
  })
102
103
  # Slice off just the options used for launching.
103
104
  launch_options = {}
@@ -25,11 +25,9 @@ module Stemcell
25
25
  end
26
26
 
27
27
  # This method will return nil if the role has no stemcell metdata.
28
- def metadata_for_role(chef_role, chef_environment)
29
- default_attrs, override_attrs = expand_role(chef_role, chef_environment)
30
- # hash_only_merge is how chef combines override_attrs and default_attrs so that overrides "win"
31
- merged_attrs = hash_only_merge!(default_attrs, override_attrs)
32
- METADATA_ATTRIBUTES.inject(nil) { |r, key| r || merged_attrs[key] }
28
+ def metadata_for_role(chef_role, chef_environment, chef_options = {})
29
+ attrs = expand_role(chef_role, chef_environment, chef_options)
30
+ METADATA_ATTRIBUTES.inject(nil) { |r, key| r || attrs[key] }
33
31
  end
34
32
 
35
33
  private
@@ -40,14 +38,40 @@ module Stemcell
40
38
  Chef::Config[:role_path] = File.join(chef_root, 'roles')
41
39
  end
42
40
 
43
- def expand_role(chef_role, chef_environment)
44
- run_list = Chef::RunList.new
45
- run_list << "role[#{chef_role}]"
41
+ def expand_role(chef_role, chef_environment, chef_options)
42
+ node = Chef::Node.new
43
+ node.chef_environment = chef_environment
44
+ node.run_list << "role[#{chef_role}]"
46
45
 
47
- expansion = run_list.expand(chef_environment, 'disk')
46
+ normal_attributes = chef_options.fetch(:normal_attributes, {})
47
+ node.consume_attributes(normal_attributes)
48
+
49
+ # Load cookbooks.
50
+ cookbook_loader = Chef::CookbookLoader.new(Chef::Config[:cookbook_path])
51
+ cookbook_attributes = chef_options.fetch(:cookbook_attributes, [])
52
+ cookbook_attributes.each do |file_spec|
53
+ cookbook_name, * = node.parse_attribute_file_spec(file_spec)
54
+ cookbook_loader.load_cookbook(cookbook_name)
55
+ end
56
+
57
+ cookbook_collection = Chef::CookbookCollection.new(cookbook_loader.cookbooks_by_name)
58
+ events = Chef::EventDispatch::Dispatcher.new
59
+ run_context = Chef::RunContext.new(node, cookbook_collection, events)
60
+
61
+ # Expand the node's run list.
62
+ expansion = node.run_list.expand(chef_environment, 'disk')
48
63
  raise RoleExpansionError if expansion.errors?
49
64
 
50
- [expansion.default_attrs, expansion.override_attrs]
65
+ # Set the default and override attributes.
66
+ node.attributes.role_default = expansion.default_attrs
67
+ node.attributes.role_override = expansion.override_attrs
68
+
69
+ # Load cookbook attributes.
70
+ cookbook_attributes.each do |file_spec|
71
+ node.include_attribute(file_spec)
72
+ end
73
+
74
+ node.attributes
51
75
  end
52
76
 
53
77
  end
@@ -48,9 +48,18 @@ module Stemcell
48
48
  raise ArgumentError, "Missing chef environment" unless environment
49
49
  allow_empty_roles = options.fetch(:allow_empty_roles, false)
50
50
 
51
- # Step 1: Expand the role metadata
51
+ # Normal and cookbook attributes to load during role metadata expansion
52
+ normal_attributes = options.fetch(:normal_attributes, {})
53
+ cookbook_attributes = override_options['chef_cookbook_attributes']
54
+ cookbook_attributes ||= config.default_options['chef_cookbook_attributes']
55
+ cookbook_attributes ||= []
56
+
57
+ chef_options = {}
58
+ chef_options[:cookbook_attributes] = cookbook_attributes unless cookbook_attributes.empty?
59
+ chef_options[:normal_attributes] = normal_attributes unless normal_attributes.empty?
52
60
 
53
- role_options = chef_repo.metadata_for_role(role, environment)
61
+ # Step 1: Expand the role metadata
62
+ role_options = chef_repo.metadata_for_role(role, environment, chef_options)
54
63
  role_empty = role_options.nil? || role_options.empty?
55
64
 
56
65
  raise EmptyRoleError if !allow_empty_roles && role_empty
@@ -35,6 +35,13 @@ module Stemcell
35
35
  :env => 'AWS_SECRET_KEY',
36
36
  :hide => true
37
37
  },
38
+ {
39
+ :name => 'aws_session_token',
40
+ :desc => "aws session token",
41
+ :type => String,
42
+ :env => 'AWS_SESSION_TOKEN',
43
+ :hide => true
44
+ },
38
45
  {
39
46
  :name => 'region',
40
47
  :desc => "ec2 region to launch in",
@@ -180,6 +187,12 @@ module Stemcell
180
187
  :type => String,
181
188
  :env => 'CHEF_DATA_BAG_SECRET'
182
189
  },
190
+ {
191
+ :name => 'chef_data_bag_secret_path',
192
+ :desc => "instance-local path to the secret file",
193
+ :type => String,
194
+ :env => 'CHEF_DATA_BAG_SECRET_PATH'
195
+ },
183
196
  {
184
197
  :name => 'chef_role',
185
198
  :desc => "chef role of instance to be launched",
@@ -204,6 +217,12 @@ module Stemcell
204
217
  :type => String,
205
218
  :env => 'CHEF_ENVIRONMENT'
206
219
  },
220
+ {
221
+ :name => 'chef_cookbook_attributes',
222
+ :desc => "comma-separated list of cookbook attribute files to load during role expansion",
223
+ :type => String,
224
+ :env => 'CHEF_COOKBOOK_ATTRIBUTES'
225
+ },
207
226
  {
208
227
  :name => 'git_origin',
209
228
  :desc => "git origin to use",
@@ -383,11 +402,13 @@ module Stemcell
383
402
  options['block_device_mappings'] = block_device_mappings
384
403
  end
385
404
 
386
- # convert security_groups from comma seperated string to ruby array
405
+ # convert security_groups from comma separated string to ruby array
387
406
  options['security_groups'] &&= options['security_groups'].split(',')
388
407
  options['security_group_ids'] &&= options['security_group_ids'].split(',')
389
408
  # convert ephemeral_devices from comma separated string to ruby array
390
409
  options['ephemeral_devices'] &&= options['ephemeral_devices'].split(',')
410
+ # convert chef_cookbook_attributes from comma separated string to ruby array
411
+ options['chef_cookbook_attributes'] &&= options['chef_cookbook_attributes'].split(',')
391
412
 
392
413
  # format the classic link options
393
414
  if options['classic_link_vpc_id']
@@ -47,7 +47,7 @@ hostname='<%= opts['instance_hostname'] %>'
47
47
  domain_name='<%= opts['instance_domain_name'] %>'
48
48
  chef_version='<%= opts['chef_version'] %>'
49
49
  username='<%= opts.fetch('user', ENV['USER']) %>'
50
-
50
+ encrypted_data_bag_secret_path='<%= opts['chef_data_bag_secret_path'].to_s %>'
51
51
 
52
52
  ##
53
53
  ## common functions
@@ -159,6 +159,14 @@ log_location STDOUT
159
159
  Ohai::Config[:plugin_path] << "#{repo_dir}/ohai_plugins"
160
160
  EOF
161
161
 
162
+ if [ -n "$encrypted_data_bag_secret_path" ]; then
163
+ cat <<EOF >> ${chef_dir}/solo.rb
164
+
165
+ encrypted_data_bag_secret "${encrypted_data_bag_secret_path}"
166
+ EOF
167
+ fi
168
+
169
+
162
170
  encrypted_data_bag_secret_file=${chef_dir}/encrypted_data_bag_secret
163
171
  echo -e "$data_bag_secret" > $encrypted_data_bag_secret_file
164
172
  chmod 0400 $encrypted_data_bag_secret_file
@@ -1,3 +1,3 @@
1
1
  module Stemcell
2
- VERSION = "0.11.3"
2
+ VERSION = "0.11.5"
3
3
  end
@@ -0,0 +1,4 @@
1
+ default['instance_metadata']['tags'] = {
2
+ 'tag1' => 'tag1_value_attribute_default',
3
+ 'tag3' => 'tag3_value_attribute_default',
4
+ }
@@ -0,0 +1,3 @@
1
+ default['instance_metadata']['tags'] = { 'tag1' => 'tag1_value_attribute_default' }
2
+ tag1 = node['instance_metadata']['tags']['tag1']
3
+ default['instance_metadata']['tags']['derived_tag1'] = tag1
@@ -0,0 +1 @@
1
+ override['instance_metadata']['tags']['tag2'] = 'tag2_value_override'
@@ -0,0 +1 @@
1
+ name 'unit_cookbook'
@@ -0,0 +1,14 @@
1
+ {
2
+ "defaults": {
3
+ "instance_type": "m1.small",
4
+ "chef_cookbook_attributes": ["cookbook_name::attr_file"]
5
+ },
6
+ "backing_store": {
7
+ "instance_store": {
8
+ "image_id": "ami-d9d6a6b0"
9
+ }
10
+ },
11
+ "availability_zones": {
12
+ "us-east-1": ["us-east-1a"]
13
+ }
14
+ }
@@ -33,12 +33,20 @@ describe Stemcell::MetadataSource::ChefRepository do
33
33
  describe '#metadata_for_role' do
34
34
 
35
35
  let(:expected_metadata) { FixtureHelper.expected_metadata_for_role(role) }
36
- let(:result_metadata) { chef_repo.metadata_for_role(role, environment) }
37
-
36
+ let(:result_metadata) { chef_repo.metadata_for_role(role, environment, options) }
37
+
38
+ let(:cookbook_attributes) { [] }
39
+ let(:normal_attributes) { {} }
40
+ let(:options) {
41
+ {
42
+ :cookbook_attributes => cookbook_attributes,
43
+ :normal_attributes => normal_attributes
44
+ }
45
+ }
38
46
  let(:environment) { 'production' }
39
47
  let(:role) { nil }
40
48
 
41
- context "for a role with no inheritence" do
49
+ context "for a role with no inheritance" do
42
50
 
43
51
  context "and no attributes" do
44
52
  let(:role) { 'unit-simple-none' }
@@ -70,7 +78,7 @@ describe Stemcell::MetadataSource::ChefRepository do
70
78
 
71
79
  end
72
80
 
73
- context "for a role with inheritence" do
81
+ context "for a role with inheritance" do
74
82
 
75
83
  context "and no attributes" do
76
84
  let(:role) { 'unit-inherit-none' }
@@ -102,6 +110,94 @@ describe Stemcell::MetadataSource::ChefRepository do
102
110
 
103
111
  end
104
112
 
113
+ context "with chef cookbook attributes" do
114
+
115
+ context "that are not valid" do
116
+ let(:role) { 'unit-simple-none' }
117
+ let(:cookbook_attributes) { ['unknown::attr'] }
118
+ it "raises an error" do
119
+ expect { result_metadata }.to raise_error(Chef::Exceptions::CookbookNotFound)
120
+ end
121
+ end
122
+
123
+ context "for a role with no inheritance and default attributes" do
124
+ let(:role) { 'unit-simple-default' }
125
+ let(:cookbook_attributes) { ['unit_cookbook::simple-default'] }
126
+ it "returns the expected metdata" do
127
+ expect(result_metadata).to include(
128
+ "tags" => {
129
+ "tag1" => "tag1_value_default",
130
+ "tag2" => "tag2_value",
131
+ "tag3" => "tag3_value_attribute_default"
132
+ }
133
+ )
134
+ end
135
+ end
136
+
137
+ context "for a role with no inheritance and derived attributes" do
138
+ let(:role) { 'unit-simple-default' }
139
+ let(:cookbook_attributes) { ['unit_cookbook::simple-derived'] }
140
+ it "returns the expected metdata" do
141
+ expect(result_metadata).to include(
142
+ "tags" => {
143
+ "tag1" => "tag1_value_default",
144
+ "derived_tag1" => "tag1_value_default",
145
+ "tag2" => "tag2_value"
146
+ }
147
+ )
148
+ end
149
+ end
150
+
151
+ context "that override a role with no inheritance and default attributes" do
152
+ let(:role) { 'unit-simple-default' }
153
+ let(:cookbook_attributes) { ['unit_cookbook::simple-override'] }
154
+ it "returns the expected metdata" do
155
+ expect(result_metadata).to include(
156
+ "tags" => {
157
+ "tag1" => "tag1_value_default",
158
+ "tag2" => "tag2_value_override"
159
+ }
160
+ )
161
+ end
162
+ end
163
+
164
+ end
165
+
166
+ context "with normal attributes" do
167
+ let(:role) { 'unit-simple-default' }
168
+
169
+ context "for a role with default attribute" do
170
+ let(:normal_attributes) { { :instance_metadata => { :instance_type => 'test' } } }
171
+ it "returns the attribute with higher precedence" do
172
+ expect(result_metadata).to include("instance_type" => "test")
173
+ end
174
+ end
175
+
176
+ context "for a cookbook attribute" do
177
+ let(:role) { 'unit-simple-default' }
178
+ let(:cookbook_attributes) { ['unit_cookbook::simple-derived'] }
179
+ let(:normal_attributes) {
180
+ {
181
+ :instance_metadata => {
182
+ :tags => {
183
+ 'tag1' => 'tag1_value_normal'
184
+ }
185
+ }
186
+ }
187
+ }
188
+ it "returns the normal/derived attribute" do
189
+ expect(result_metadata).to include(
190
+ "tags" => {
191
+ "tag1" => "tag1_value_normal",
192
+ "derived_tag1" => "tag1_value_normal",
193
+ "tag2" => "tag2_value"
194
+ }
195
+ )
196
+ end
197
+ end
198
+
199
+ end
200
+
105
201
  end
106
202
 
107
203
  end
@@ -44,6 +44,16 @@ describe Stemcell::MetadataSource::Configuration do
44
44
  end
45
45
  end
46
46
 
47
+ context "when non-required options are present" do
48
+ let(:config_filename) { 'stemcell-cookbook-attribute.json' }
49
+ it "sets default_options" do
50
+ expect(config.default_options).to eql({
51
+ 'instance_type' => 'm1.small',
52
+ 'chef_cookbook_attributes' => ['cookbook_name::attr_file']
53
+ })
54
+ end
55
+ end
56
+
47
57
  context "when defaults are not specified" do
48
58
  let(:config_filename) { 'stemcell-defaults-missing.json' }
49
59
  it "raises" do
@@ -167,7 +167,7 @@ describe Stemcell::MetadataSource do
167
167
 
168
168
  it "calls the repository object to determine the role metadata" do
169
169
  role_metadata.merge!('image_id' => 'ami-nyancat')
170
- expect(chef_repo).to receive(:metadata_for_role).with(role, environment) { role_metadata }
170
+ expect(chef_repo).to receive(:metadata_for_role).with(role, environment, {}) { role_metadata }
171
171
  expect(expansion['image_id']).to eql 'ami-nyancat'
172
172
  end
173
173
 
@@ -227,6 +227,30 @@ describe Stemcell::MetadataSource do
227
227
  end
228
228
  end
229
229
 
230
+ it "calls the config object to retrieve chef cookbook attributes" do
231
+ default_options.merge!('chef_cookbook_attributes' => ['a::b'])
232
+ expect(config).to receive(:default_options) { default_options }
233
+ expect(expansion['chef_cookbook_attributes']).to eql ['a::b']
234
+ end
235
+
236
+ context 'when the override options specify chef cookbook attributes' do
237
+ let(:options) { { :cookbook_attributes => ['c::d'] } }
238
+ it 'is the value in the override options' do
239
+ default_options.merge!('chef_cookbook_attributes' => ['a::b'])
240
+ override_options.merge!('chef_cookbook_attributes' => ['c::d'])
241
+ expect(chef_repo).to receive(:metadata_for_role).with(role, environment, options) { role_metadata }
242
+ expect(expansion['chef_cookbook_attributes']).to eql ['c::d']
243
+ end
244
+ end
245
+
246
+ context 'when the expand options specify chef normal attributes' do
247
+ before { expand_options[:normal_attributes] = { :a => :b } }
248
+ it 'is the value in the expand options' do
249
+ expect(chef_repo).to receive(:metadata_for_role).with(role, environment, expand_options) { role_metadata }
250
+ expect(expansion).to_not be_nil
251
+ end
252
+ end
253
+
230
254
  end
231
255
 
232
256
  end
data/stemcell.gemspec CHANGED
@@ -29,6 +29,8 @@ Gem::Specification.new do |s|
29
29
  # version dependency. lets explicitly include it here. if this becomes
30
30
  # no-longer a dependency of chef via chef-zero, then remove it
31
31
  s.add_runtime_dependency 'rack', '< 2.0.0'
32
+ s.add_runtime_dependency 'nokogiri', '< 1.7.0'
33
+ s.add_runtime_dependency 'ffi-yajl', '< 2.3.1'
32
34
 
33
35
  s.add_runtime_dependency 'trollop', '~> 2.1'
34
36
  s.add_runtime_dependency 'aws-creds', '~> 0.2.3'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stemcell
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.3
4
+ version: 0.11.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Rhoads
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2016-10-04 00:00:00.000000000 Z
14
+ date: 2017-10-18 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: aws-sdk-v1
@@ -69,6 +69,34 @@ dependencies:
69
69
  - - "<"
70
70
  - !ruby/object:Gem::Version
71
71
  version: 2.0.0
72
+ - !ruby/object:Gem::Dependency
73
+ name: nokogiri
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - "<"
77
+ - !ruby/object:Gem::Version
78
+ version: 1.7.0
79
+ type: :runtime
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - "<"
84
+ - !ruby/object:Gem::Version
85
+ version: 1.7.0
86
+ - !ruby/object:Gem::Dependency
87
+ name: ffi-yajl
88
+ requirement: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - "<"
91
+ - !ruby/object:Gem::Version
92
+ version: 2.3.1
93
+ type: :runtime
94
+ prerelease: false
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "<"
98
+ - !ruby/object:Gem::Version
99
+ version: 2.3.1
72
100
  - !ruby/object:Gem::Dependency
73
101
  name: trollop
74
102
  requirement: !ruby/object:Gem::Requirement
@@ -157,6 +185,10 @@ files:
157
185
  - lib/stemcell/option_parser.rb
158
186
  - lib/stemcell/templates/bootstrap.sh.erb
159
187
  - lib/stemcell/version.rb
188
+ - spec/fixtures/chef_repo/cookbooks/unit_cookbook/attributes/simple-default.rb
189
+ - spec/fixtures/chef_repo/cookbooks/unit_cookbook/attributes/simple-derived.rb
190
+ - spec/fixtures/chef_repo/cookbooks/unit_cookbook/attributes/simple-override.rb
191
+ - spec/fixtures/chef_repo/cookbooks/unit_cookbook/metadata.rb
160
192
  - spec/fixtures/chef_repo/roles-expected-metadata/unit-inherit-both.json
161
193
  - spec/fixtures/chef_repo/roles-expected-metadata/unit-inherit-default.json
162
194
  - spec/fixtures/chef_repo/roles-expected-metadata/unit-inherit-none.json
@@ -176,6 +208,7 @@ files:
176
208
  - spec/fixtures/chef_repo/stemcell-azs-missing.json
177
209
  - spec/fixtures/chef_repo/stemcell-backing-store-empty.json
178
210
  - spec/fixtures/chef_repo/stemcell-backing-store-missing.json
211
+ - spec/fixtures/chef_repo/stemcell-cookbook-attribute.json
179
212
  - spec/fixtures/chef_repo/stemcell-defaults-missing.json
180
213
  - spec/fixtures/chef_repo/stemcell.json
181
214
  - spec/lib/stemcell/launcher_spec.rb
@@ -206,11 +239,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
206
239
  version: '0'
207
240
  requirements: []
208
241
  rubyforge_project:
209
- rubygems_version: 2.5.1
242
+ rubygems_version: 2.5.2
210
243
  signing_key:
211
244
  specification_version: 4
212
245
  summary: no summary
213
246
  test_files:
247
+ - spec/fixtures/chef_repo/cookbooks/unit_cookbook/attributes/simple-default.rb
248
+ - spec/fixtures/chef_repo/cookbooks/unit_cookbook/attributes/simple-derived.rb
249
+ - spec/fixtures/chef_repo/cookbooks/unit_cookbook/attributes/simple-override.rb
250
+ - spec/fixtures/chef_repo/cookbooks/unit_cookbook/metadata.rb
214
251
  - spec/fixtures/chef_repo/roles-expected-metadata/unit-inherit-both.json
215
252
  - spec/fixtures/chef_repo/roles-expected-metadata/unit-inherit-default.json
216
253
  - spec/fixtures/chef_repo/roles-expected-metadata/unit-inherit-none.json
@@ -230,6 +267,7 @@ test_files:
230
267
  - spec/fixtures/chef_repo/stemcell-azs-missing.json
231
268
  - spec/fixtures/chef_repo/stemcell-backing-store-empty.json
232
269
  - spec/fixtures/chef_repo/stemcell-backing-store-missing.json
270
+ - spec/fixtures/chef_repo/stemcell-cookbook-attribute.json
233
271
  - spec/fixtures/chef_repo/stemcell-defaults-missing.json
234
272
  - spec/fixtures/chef_repo/stemcell.json
235
273
  - spec/lib/stemcell/launcher_spec.rb