chef-vault 3.3.0 → 4.1.11

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.
Files changed (71) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +32 -6
  3. data/bin/chef-vault +5 -5
  4. data/chef-vault.gemspec +7 -26
  5. data/lib/chef/knife/mixin/helper.rb +29 -1
  6. data/lib/chef/knife/vault_admins.rb +5 -1
  7. data/lib/chef/knife/vault_base.rb +23 -13
  8. data/lib/chef/knife/vault_create.rb +26 -23
  9. data/lib/chef/knife/vault_delete.rb +4 -2
  10. data/lib/chef/knife/vault_download.rb +2 -2
  11. data/lib/chef/knife/vault_edit.rb +4 -4
  12. data/lib/chef/knife/vault_isvault.rb +4 -4
  13. data/lib/chef/knife/vault_itemtype.rb +4 -4
  14. data/lib/chef/knife/vault_list.rb +5 -5
  15. data/lib/chef/knife/vault_refresh.rb +7 -7
  16. data/lib/chef/knife/vault_remove.rb +19 -16
  17. data/lib/chef/knife/vault_rotate_all_keys.rb +5 -4
  18. data/lib/chef/knife/vault_rotate_keys.rb +3 -3
  19. data/lib/chef/knife/vault_show.rb +8 -10
  20. data/lib/chef/knife/vault_update.rb +38 -24
  21. data/lib/chef-vault/actor.rb +9 -7
  22. data/lib/chef-vault/chef_api.rb +4 -4
  23. data/lib/chef-vault/exceptions.rb +3 -0
  24. data/lib/chef-vault/item.rb +57 -21
  25. data/lib/chef-vault/item_keys.rb +35 -9
  26. data/lib/chef-vault/mixins.rb +2 -2
  27. data/lib/chef-vault/version.rb +1 -1
  28. data/lib/chef-vault.rb +8 -8
  29. metadata +8 -135
  30. data/.github/CODEOWNERS +0 -2
  31. data/.gitignore +0 -33
  32. data/.rspec +0 -2
  33. data/.rubocop.yml +0 -6
  34. data/.simplecov +0 -6
  35. data/.travis.yml +0 -19
  36. data/Changelog.md +0 -134
  37. data/DEMO.md +0 -60
  38. data/KNIFE_EXAMPLES.md +0 -256
  39. data/README.md +0 -333
  40. data/Rakefile +0 -50
  41. data/THEORY.md +0 -363
  42. data/UPGRADE.md +0 -55
  43. data/appveyor.yml +0 -32
  44. data/features/clean.feature +0 -23
  45. data/features/clean_on_refresh.feature +0 -27
  46. data/features/clean_unknown_clients.feature +0 -45
  47. data/features/detect_and_warn_v1_vault.feature +0 -14
  48. data/features/isvault.feature +0 -29
  49. data/features/itemtype.feature +0 -24
  50. data/features/step_definitions/chef-databag.rb +0 -9
  51. data/features/step_definitions/chef-repo.rb +0 -72
  52. data/features/step_definitions/chef-vault.rb +0 -151
  53. data/features/step_definitions/chef_databagitem.rb +0 -9
  54. data/features/support/env.rb +0 -14
  55. data/features/vault_create.feature +0 -63
  56. data/features/vault_list.feature +0 -31
  57. data/features/vault_show.feature +0 -45
  58. data/features/vault_show_vaultname.feature +0 -21
  59. data/features/vault_update.feature +0 -18
  60. data/features/verify_id_matches.feature +0 -10
  61. data/features/wrong_private_key.feature +0 -13
  62. data/hooks/pre-commit +0 -43
  63. data/spec/chef-vault/actor_spec.rb +0 -247
  64. data/spec/chef-vault/certificate_spec.rb +0 -37
  65. data/spec/chef-vault/chef_api_spec.rb +0 -39
  66. data/spec/chef-vault/item_keys_spec.rb +0 -263
  67. data/spec/chef-vault/item_spec.rb +0 -360
  68. data/spec/chef-vault/user_spec.rb +0 -36
  69. data/spec/chef-vault_spec.rb +0 -65
  70. data/spec/spec_helper.rb +0 -91
  71. data/tasks/github_changelog_generator.rb +0 -30
@@ -1,360 +0,0 @@
1
- require "openssl"
2
-
3
- RSpec.describe ChefVault::Item do
4
- subject(:item) { ChefVault::Item.new("foo", "bar") }
5
-
6
- before do
7
- item["foo"] = "bar"
8
- http_response = double("http_response")
9
- allow(http_response).to receive(:code).and_return("404")
10
- non_existing = Net::HTTPServerException.new("http error message", http_response)
11
-
12
- allow(Chef::DataBagItem).to receive(:load).with(anything, /_key_/).and_raise(non_existing)
13
- end
14
-
15
- describe "vault probe predicates" do
16
- before do
17
- # a normal data bag item
18
- @db = { "foo" => "..." }
19
- @dbi = Chef::DataBagItem.new
20
- @dbi.data_bag("normal")
21
- @dbi.raw_data = { "id" => "foo", "foo" => "bar" }
22
- allow(@db).to receive(:load).with("foo").and_return(@dbi)
23
- allow(Chef::DataBag).to receive(:load).with("normal").and_return(@db)
24
- allow(Chef::DataBagItem).to receive(:load).with("normal", "foo").and_return(@dbi)
25
-
26
- # an encrypted data bag item (non-vault)
27
- @encdb = { "foo" => "..." }
28
- @encdbi = Chef::DataBagItem.new
29
- @encdbi.data_bag("encrypted")
30
- @encdbi.raw_data = {
31
- "id" => "foo",
32
- "foo" => { "encrypted_data" => "..." },
33
- }
34
- allow(@encdb).to receive(:load).with("foo").and_return(@encdbi)
35
- allow(Chef::DataBag).to receive(:load).with("encrypted").and_return(@encdb)
36
- allow(Chef::DataBagItem).to receive(:load).with("encrypted", "foo").and_return(@encdbi)
37
-
38
- # two items that make up a vault
39
- @vaultdb = { "foo" => "...", "foo_keys" => "..." }
40
- @vaultdbi = Chef::DataBagItem.new
41
- @vaultdbi.data_bag("vault")
42
- @vaultdbi.raw_data = {
43
- "id" => "foo",
44
- "foo" => { "encrypted_data" => "..." },
45
- }
46
- allow(@vaultdb).to receive(:load).with("foo").and_return(@vaultdbi)
47
- @vaultdbki = Chef::DataBagItem.new
48
- @vaultdbki.data_bag("vault")
49
- @vaultdbki.raw_data = { "id" => "foo_keys" }
50
- allow(@vaultdb).to receive(:load).with("foo_keys").and_return(@vaultdbki)
51
- allow(Chef::DataBag).to receive(:load).with("vault").and_return(@vaultdb)
52
- allow(Chef::DataBagItem).to receive(:load).with("vault", "foo").and_return(@vaultdbi)
53
- end
54
-
55
- describe "::vault?" do
56
- it "should detect a vault item" do
57
- expect(ChefVault::Item.vault?("vault", "foo")).to be_truthy
58
- end
59
-
60
- it "should detect non-vault items" do
61
- expect(ChefVault::Item.vault?("normal", "foo")).not_to be_truthy
62
- expect(ChefVault::Item.vault?("encrypted", "foo")).not_to be_truthy
63
- end
64
- end
65
-
66
- describe "::data_bag_item_type" do
67
- it "should detect a vault item" do
68
- expect(ChefVault::Item.data_bag_item_type("vault", "foo")).to eq(:vault)
69
- end
70
-
71
- it "should detect an encrypted data bag item" do
72
- expect(ChefVault::Item.data_bag_item_type("encrypted", "foo")).to eq(:encrypted)
73
- end
74
-
75
- it "should detect a normal data bag item" do
76
- expect(ChefVault::Item.data_bag_item_type("normal", "foo")).to eq(:normal)
77
- end
78
- end
79
- end
80
-
81
- describe "::new" do
82
- it "item[keys] is an instance of ChefVault::ItemKeys" do
83
- expect(item.keys).to be_an_instance_of(ChefVault::ItemKeys)
84
- end
85
-
86
- it "the item's 'vault' parameter is assigned to data_bag" do
87
- expect(item.data_bag).to eq "foo"
88
- end
89
-
90
- it "the vault item name is assiged to the data bag ['id']" do
91
- expect(item["id"]).to eq "bar"
92
- end
93
-
94
- it "creates a corresponding 'keys' data bag with an '_keys' id" do
95
- expect(item.keys["id"]).to eq "bar_keys"
96
- end
97
-
98
- it "sets the item keys data bag to 'foo'" do
99
- expect(item.keys.data_bag).to eq "foo"
100
- end
101
-
102
- it "defaults the node name" do
103
- item = ChefVault::Item.new("foo", "bar")
104
- expect(item.node_name).to eq(Chef::Config[:node_name])
105
- end
106
-
107
- it "defaults the client key path" do
108
- item = ChefVault::Item.new("foo", "bar")
109
- expect(item.client_key_path).to eq(Chef::Config[:client_key])
110
- end
111
-
112
- it "allows for a node name override" do
113
- item = ChefVault::Item.new("foo", "bar", node_name: "baz")
114
- expect(item.node_name).to eq("baz")
115
- end
116
-
117
- it "allows for a client key path override" do
118
- item = ChefVault::Item.new("foo", "bar", client_key_path: "/foo/client.pem")
119
- expect(item.client_key_path).to eq("/foo/client.pem")
120
- end
121
-
122
- it "allows for both node name and client key overrides" do
123
- item = ChefVault::Item.new(
124
- "foo", "bar",
125
- node_name: "baz",
126
- client_key_path: "/foo/client.pem"
127
- )
128
- expect(item.node_name).to eq("baz")
129
- expect(item.client_key_path).to eq("/foo/client.pem")
130
- end
131
- end
132
-
133
- describe "::load" do
134
- it "allows for both node name and client key overrides" do
135
- keys_db = Chef::DataBagItem.new
136
- keys_db.raw_data = {
137
- "id" => "bar_keys",
138
- "baz" => "...",
139
- }
140
- allow(ChefVault::ItemKeys)
141
- .to receive(:load)
142
- .and_return(keys_db)
143
- fh = double "private key handle"
144
- allow(fh).to receive(:read).and_return("...")
145
- allow(File).to receive(:open).and_return(fh)
146
- privkey = double "private key contents"
147
- allow(privkey).to receive(:private_decrypt).and_return("sekrit")
148
- allow(OpenSSL::PKey::RSA).to receive(:new).and_return(privkey)
149
- allow(Chef::EncryptedDataBagItem).to receive(:load).and_return(
150
- "id" => "bar",
151
- "password" => "12345"
152
- )
153
- item = ChefVault::Item.load(
154
- "foo", "bar",
155
- node_name: "baz",
156
- client_key_path: "/foo/client.pem"
157
- )
158
- expect(item.node_name).to eq("baz")
159
- expect(item.client_key_path).to eq("/foo/client.pem")
160
- end
161
- end
162
-
163
- describe "#save" do
164
- context 'when item["id"] is bar.bar' do
165
- let(:item) { ChefVault::Item.new("foo", "bar.bar") }
166
- it "raises an error on save with an invalid item['id']" do
167
- expect { item.save }.to raise_error(RuntimeError)
168
- end
169
- end
170
-
171
- it "validates that the id of the vault matches the id of the keys data bag" do
172
- item = ChefVault::Item.new("foo", "bar")
173
- item["id"] = "baz"
174
- item.keys["clients"] = %w{admin}
175
- expect { item.save }.to raise_error(ChefVault::Exceptions::IdMismatch)
176
- end
177
- end
178
-
179
- describe "#refresh" do
180
- let(:node) { { "name" => "testnode" } }
181
-
182
- it "saves only the keys" do
183
- keys = double("keys",
184
- search_query: "*:*",
185
- add: nil,
186
- admins: [],
187
- clients: ["testnode"])
188
- allow(keys).to receive(:[]).with("id").and_return("bar_keys")
189
- allow(ChefVault::ItemKeys).to receive(:new).and_return(keys)
190
-
191
- item = ChefVault::Item.new("foo", "bar")
192
-
193
- query = double("query")
194
- allow(Chef::Search::Query).to receive(:new).and_return(query)
195
- allow(query).to receive(:search).and_yield(node)
196
-
197
- client_key = double("client_key",
198
- name: "testnode",
199
- public_key: OpenSSL::PKey::RSA.new(1024).public_key)
200
- allow(item).to receive(:load_actor).with("testnode", "clients").and_return(client_key)
201
-
202
- expect(item).not_to receive(:save)
203
- expect(keys).to receive(:save)
204
- item.refresh
205
- end
206
- end
207
-
208
- describe "#clients" do
209
- context "when search returns a node with a valid client backing it and one without a valid client" do
210
- let(:node_with_valid_client) { { "name" => "foo" } }
211
- let(:node_without_valid_client) { { "name" => "bar" } }
212
- let(:query_result) { double("chef search results") }
213
- let(:client_key) { double("chef key") }
214
-
215
- before do
216
- # node with valid client proper loads client key
217
- allow(item).to receive(:load_actor).with("foo", "clients").and_return(client_key)
218
- privkey = OpenSSL::PKey::RSA.new(1024)
219
- pubkey = privkey.public_key
220
- allow(client_key).to receive(:key).and_return(pubkey.to_pem)
221
- allow(client_key).to receive(:name).and_return("foo")
222
- allow(client_key).to receive(:type).and_return("clients")
223
-
224
- # node without client throws relevant error on key load
225
- allow(item).to receive(:load_actor).with("bar", "clients").and_raise(ChefVault::Exceptions::ClientNotFound)
226
-
227
- allow(query_result)
228
- .to receive(:search)
229
- .with(Symbol, String, Hash)
230
- .and_yield(node_with_valid_client).and_yield(node_without_valid_client)
231
- allow(Chef::Search::Query)
232
- .to receive(:new)
233
- .and_return(query_result)
234
- end
235
-
236
- it "should not blow up when search returns a node without a public key" do
237
- # try to set clients when we know a node is missing a public key
238
- # this should not die as of v2.4.1
239
- expect { item.clients("*:*") }.not_to raise_error
240
- end
241
-
242
- it "should emit a warning if search returns a node without a public key" do
243
- # it should however emit a warning that you have a borked node
244
- expect(ChefVault::Log).to receive(:warn).with(/node 'bar' has no private key; skipping/)
245
- item.clients("*:*")
246
- end
247
- end
248
-
249
- context "when a Chef::ApiClient is passed" do
250
- let(:client) { Chef::ApiClient.new }
251
- let(:client_name) { "foo" }
252
- let(:client_key) { double("chef key") }
253
-
254
- before do
255
- client.name client_name
256
- privkey = OpenSSL::PKey::RSA.new(1024)
257
- pubkey = privkey.public_key
258
- allow(item).to receive(:load_actor).with(client_name, "clients").and_return(client_key)
259
- allow(client_key).to receive(:key).and_return(pubkey.to_pem)
260
- allow(client_key).to receive(:name).and_return(client_name)
261
- allow(client_key).to receive(:type).and_return("clients")
262
- end
263
-
264
- context "when no action is passed" do
265
- it "default to add and properly add the client" do
266
- item.clients(client)
267
- expect(item.get_clients).to include(client_name)
268
- end
269
-
270
- it "does not perform a query" do
271
- expect(Chef::Search::Query).not_to receive(:new)
272
- item.clients(client)
273
- end
274
- end
275
-
276
- context "when the delete action is passed on an existing client" do
277
- before do
278
- # add the client
279
- item.clients(client)
280
- end
281
-
282
- it "properly deletes the client" do
283
- item.clients(client, :delete)
284
- expect(item.get_clients).to_not include(client_name)
285
- end
286
-
287
- it "does not perform a query" do
288
- expect(Chef::Search::Query).not_to receive(:new)
289
- item.clients(client, :delete)
290
- end
291
- end
292
- end
293
-
294
- context "when an Array with named clients is passed" do
295
- let(:client) { Chef::ApiClient.new }
296
- let(:clients) { Array.new }
297
- let(:client_name) { "foo" }
298
- let(:client_key) { double("chef key") }
299
-
300
- before do
301
- clients << client_name
302
- client.name client_name
303
- privkey = OpenSSL::PKey::RSA.new(1024)
304
- pubkey = privkey.public_key
305
- allow(item).to receive(:load_actor).with(client_name, "clients").and_return(client_key)
306
- allow(client_key).to receive(:key).and_return(pubkey.to_pem)
307
- allow(client_key).to receive(:name).and_return(client_name)
308
- allow(client_key).to receive(:type).and_return("clients")
309
- end
310
-
311
- context "when no action is passed" do
312
- it "defaults to add and properly adds the client" do
313
- item.clients(clients)
314
- expect(item.get_clients).to include(client_name)
315
- end
316
-
317
- it "does not perform a query" do
318
- expect(Chef::Search::Query).not_to receive(:new)
319
- item.clients(clients)
320
- end
321
- end
322
-
323
- context "when the delete action is passed on an existing client" do
324
- before do
325
- # add the client
326
- item.clients(clients)
327
- end
328
-
329
- it "properly deletes the client" do
330
- item.clients(clients, :delete)
331
- expect(item.get_clients).to_not include(client_name)
332
- end
333
-
334
- it "does not perform a query" do
335
- expect(Chef::Search::Query).not_to receive(:new)
336
- item.clients(clients, :delete)
337
- end
338
- end
339
- end
340
- end
341
-
342
- describe "#admins" do
343
- before do
344
- allow(item).to receive(:load_actor).with("foo", "admins").and_raise(ChefVault::Exceptions::AdminNotFound)
345
- end
346
-
347
- it "should blow up if you try to use a node without a public key as an admin" do
348
- expect { item.admins("foo,bar") }
349
- .to raise_error(ChefVault::Exceptions::AdminNotFound)
350
- end
351
- end
352
-
353
- describe "#raw_keys" do
354
- it "should return the keys of the underlying data bag item" do
355
- item = ChefVault::Item.new("foo", "bar")
356
- item["foo"] = "bar"
357
- expect(item.raw_keys).to eq(%w{id foo})
358
- end
359
- end
360
- end
@@ -1,36 +0,0 @@
1
- RSpec.describe ChefVault::User do
2
- let(:item) { double(ChefVault::Item) }
3
- let(:user) { ChefVault::User.new("foo", "bar") }
4
-
5
- before do
6
- allow(ChefVault::Item).to receive(:load).with("foo", "bar") { item }
7
- allow(item).to receive(:[]).with("id") { "bar" }
8
- allow(item).to receive(:[]).with("password") { "baz" }
9
- end
10
-
11
- describe "#new" do
12
- it "loads item" do
13
- expect(ChefVault::Item).to receive(:load).with("foo", "bar")
14
-
15
- ChefVault::User.new("foo", "bar")
16
- end
17
- end
18
-
19
- describe "#[]" do
20
- it "returns the value of the 'id' parameter" do
21
- expect(user["id"]).to eq "bar"
22
- end
23
- end
24
-
25
- describe "decrypt_password" do
26
- it "echoes warning" do
27
- expect(ChefVault::Log).to receive(:warn).with("This method is deprecated, please switch to item['value'] calls")
28
- user.decrypt_password
29
- end
30
-
31
- it "returns items password" do
32
- expect(item).to receive(:[]).with("password")
33
- expect(user.decrypt_password).to eq "baz"
34
- end
35
- end
36
- end
@@ -1,65 +0,0 @@
1
- #
2
- # Helper for configuring the Chef Zero server
3
- # (inspired by ChefSpec)
4
- #
5
- def chef_zero
6
- require "socket"
7
- require "tmpdir"
8
- require "fileutils"
9
- require "chef_zero/server"
10
- # Find a free TCP port
11
- server = TCPServer.new("127.0.0.1", 0)
12
- port = server.addr[1].to_i
13
- server.close
14
- # Define a Chef Zero Server
15
- server = ChefZero::Server.new(port: port)
16
- # Write the private key
17
- tmp = Dir.mktmpdir
18
- key = File.join(tmp, "client.pem")
19
- File.write(key, ChefZero::PRIVATE_KEY)
20
- # Configure the server
21
- Chef::Config[:client_key] = key
22
- Chef::Config[:client_name] = "chefvault"
23
- Chef::Config[:node_name] = "chefvault"
24
- Chef::Config[:chef_server_url] = server.url
25
- # Exit handlers
26
- at_exit { FileUtils.rm_rf(tmp) }
27
- at_exit { server.stop if server.running? }
28
- server
29
- end
30
-
31
- RSpec.describe ChefVault do
32
- let(:vault) { ChefVault.new("foo") }
33
-
34
- describe "#new" do
35
- context "with only a vault parameter specified" do
36
-
37
- it "assigns 'foo' to the vault accessor" do
38
- expect(vault.vault).to eq "foo"
39
- end
40
- end
41
- end
42
-
43
- context "with a vault and config file parameter specified" do
44
- before do
45
- allow(IO).to receive(:read).with("knife.rb").and_return("node_name 'myserver'")
46
- end
47
-
48
- let(:vault) { ChefVault.new("foo", "knife.rb") }
49
-
50
- it "assigns 'foo' to the vault accessor" do
51
- expect(vault.vault).to eq "foo"
52
- end
53
-
54
- it "loads the Chef config values" do
55
- expect(ChefVault).to receive(:load_config).with("knife.rb")
56
- vault
57
- end
58
- end
59
-
60
- describe "#version" do
61
- it "the version method equals VERSION" do
62
- expect(vault.version).to eq(ChefVault::VERSION)
63
- end
64
- end
65
- end
data/spec/spec_helper.rb DELETED
@@ -1,91 +0,0 @@
1
- require "simplecov" if ENV["COVERAGE"]
2
- require_relative "../lib/chef-vault"
3
-
4
- # This file was generated by the `rspec --init` command. Conventionally, all
5
- # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
6
- # The generated `.rspec` file contains `--require spec_helper` which will cause this
7
- # file to always be loaded, without a need to explicitly require it in any files.
8
- #
9
- # Given that it is always loaded, you are encouraged to keep this file as
10
- # light-weight as possible. Requiring heavyweight dependencies from this file
11
- # will add to the boot time of your test suite on EVERY test run, even for an
12
- # individual file that may not need all of that loaded. Instead, consider making
13
- # a separate helper file that requires the additional dependencies and performs
14
- # the additional setup, and require it from the spec files that actually need it.
15
- #
16
- # The `.rspec` file also contains a few flags that are not defaults but that
17
- # users commonly want.
18
- #
19
- # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
20
- RSpec.configure do |config|
21
- # rspec-expectations config goes here. You can use an alternate
22
- # assertion/expectation library such as wrong or the stdlib/minitest
23
- # assertions if you prefer.
24
- config.expect_with :rspec do |expectations|
25
- # This option will default to `true` in RSpec 4. It makes the `description`
26
- # and `failure_message` of custom matchers include text for helper methods
27
- # defined using `chain`, e.g.:
28
- # be_bigger_than(2).and_smaller_than(4).description
29
- # # => "be bigger than 2 and smaller than 4"
30
- # ...rather than:
31
- # # => "be bigger than 2"
32
- expectations.include_chain_clauses_in_custom_matcher_descriptions = true
33
- end
34
-
35
- # rspec-mocks config goes here. You can use an alternate test double
36
- # library (such as bogus or mocha) by changing the `mock_with` option here.
37
- config.mock_with :rspec do |mocks|
38
- # Prevents you from mocking or stubbing a method that does not exist on
39
- # a real object. This is generally recommended, and will default to
40
- # `true` in RSpec 4.
41
- mocks.verify_partial_doubles = true
42
- mocks.allow_message_expectations_on_nil = true
43
- end
44
-
45
- # The settings below are suggested to provide a good initial experience
46
- # with RSpec, but feel free to customize to your heart's content.
47
- # These two settings work together to allow you to limit a spec run
48
- # to individual examples or groups you care about by tagging them with
49
- # `:focus` metadata. When nothing is tagged with `:focus`, all examples
50
- # get run.
51
- config.filter_run :focus
52
- config.run_all_when_everything_filtered = true
53
-
54
- # Limits the available syntax to the non-monkey patched syntax that is recommended.
55
- # For more details, see:
56
- # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
57
- # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
58
- # - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching
59
- config.disable_monkey_patching!
60
-
61
- # This setting enables warnings. It's recommended, but in some cases may
62
- # be too noisy due to issues in dependencies.
63
- # config.warnings = true
64
-
65
- # Many RSpec users commonly either run the entire suite or an individual
66
- # file, and it's useful to allow more verbose output when running an
67
- # individual spec file.
68
- if config.files_to_run.one?
69
- # Use the documentation formatter for detailed output,
70
- # unless a formatter has already been configured
71
- # (e.g. via a command-line flag).
72
- config.default_formatter = "doc"
73
- end
74
-
75
- # Print the 10 slowest examples and example groups at the
76
- # end of the spec run, to help surface which specs are running
77
- # particularly slow.
78
- config.profile_examples = 10
79
-
80
- # Run specs in random order to surface order dependencies. If you find an
81
- # order dependency and want to debug it, you can fix the order by providing
82
- # the seed, which is printed after each run.
83
- # --seed 1234
84
- config.order = :random
85
-
86
- # Seed global randomization in this process using the `--seed` CLI option.
87
- # Setting this allows you to use `--seed` to deterministically reproduce
88
- # test failures related to randomization by passing the same `--seed` value
89
- # as the one that triggered the failure.
90
- Kernel.srand config.seed
91
- end
@@ -1,30 +0,0 @@
1
- #
2
- # Copyright:: Copyright (c) 2016 Chef Software Inc.
3
- # License:: Apache License, Version 2.0
4
- #
5
- # Licensed under the Apache License, Version 2.0 (the "License");
6
- # you may not use this file except in compliance with the License.
7
- # You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing, software
12
- # distributed under the License is distributed on an "AS IS" BASIS,
13
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- # See the License for the specific language governing permissions and
15
- # limitations under the License.
16
- #
17
-
18
- require "chef-vault/version"
19
-
20
- begin
21
- require "github_changelog_generator/task"
22
-
23
- GitHubChangelogGenerator::RakeTask.new :changelog do |config|
24
- config.future_release = "v#{ChefVault::VERSION}"
25
- config.max_issues = 0
26
- config.add_issues_wo_labels = false
27
- end
28
- rescue LoadError
29
- puts "github_changelog_generator is not available. gem install github_changelog_generator to generate changelogs"
30
- end