vagrant-berkshelf 4.0.0 → 4.0.1

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: 3f21f3e8d10fc7c1d2205c55b0ae8bca1221777a
4
- data.tar.gz: fcd4acefc3f607775f97873bc04206b9bf2fcb08
3
+ metadata.gz: c61e87ce0b69fd6674f2b48dce071d01c1496656
4
+ data.tar.gz: a6785183831c2affa91f1072f605c883f64c2aac
5
5
  SHA512:
6
- metadata.gz: b4308dafc20d438f3c2a1524ed5076258c4b93e7f2291ca63c696fd116ec9aa7d81630c8a19bcda17d1a48fac25c87bcfa28caf6e343bfc66379a803dea72d61
7
- data.tar.gz: fe57bc6dc166bf013d2eff69316d3ac0490ae79b6fafc3666052bc5cdadc07b434c0a91b13df7f7dbaf6c70a36bc1f697394b1488a0309258577eac4b7187a3e
6
+ metadata.gz: 96a14944bb147f7efa91ef76297f6e755fe1787e67c4baa4a5159f6a2f5b22ae437f3ba34471ce4c0d224f8967cb939d244f6f03e3d32064aa6fe9d59869d3c7
7
+ data.tar.gz: 8838114aef207fe47db28da4650141baa9f6451be9c5d1717a87315e3506aef001fc1b714dcb8dae5b52eb636b3e244d1d597f831a8517cdf4691fbf9d856d5a
data/CHANGELOG.md CHANGED
@@ -1,3 +1,20 @@
1
+ # 4.0.1
2
+
3
+ * Bug Fixes
4
+ * Improved ability to find a Berksfile within a project
5
+
6
+ # 4.0.0
7
+
8
+ * Enhancements
9
+ * Add support for chef-client local mode
10
+
11
+ * Bug Fixes
12
+ * Chef Client provider configuration attributes are now properly read from a Berkshelf configuration file
13
+ * Shared folder is no longer deleted and recreated on each provision
14
+ * `berksfile_path` config option now defaults to CWD of Vagrantfile
15
+ * Non-colored terminal output will be used when not available
16
+ * VM's Berkshelf share will be cleaned up after destroying a VM
17
+
1
18
  # 3.0.1
2
19
 
3
20
  * Bug Fixes
@@ -17,6 +17,7 @@ module VagrantPlugins
17
17
  # Provision the VM, calling setup, install, and upload.
18
18
  def self.provision
19
19
  Vagrant::Action::Builder.new.tap do |b|
20
+ b.use Action::Save
20
21
  b.use Action::Install
21
22
  b.use Action::Upload
22
23
  end
@@ -19,23 +19,12 @@ module VagrantPlugins
19
19
  env[:berkshelf].shelf = shelf
20
20
  end
21
21
 
22
- if !provision_enabled?(env)
23
- @logger.info "Provisioning disabled, skipping"
24
- return @app.call(env)
25
- end
26
-
27
22
  if !env[:berkshelf].shelf
28
23
  shelf = mkshelf(env)
29
24
  env[:machine].ui.detail "The Berkshelf shelf is at #{shelf.inspect}"
30
25
 
31
26
  @logger.debug "Persisting datafile share to memory"
32
27
  env[:berkshelf].shelf = shelf
33
-
34
- @logger.debug "Saving datafile to disk"
35
- FileUtils.mkdir_p(datafile_path(env).dirname)
36
- datafile_path(env).open("w+") do |f|
37
- f.write(env[:berkshelf].shelf)
38
- end
39
28
  end
40
29
 
41
30
  @app.call(env)
@@ -0,0 +1,27 @@
1
+ require_relative 'base'
2
+
3
+ module VagrantPlugins
4
+ module Berkshelf
5
+ module Action
6
+ class Save < Base
7
+ def call(env)
8
+ if !berkshelf_enabled?(env)
9
+ @logger.info "Berkshelf disabled, skipping"
10
+ return @app.call(env)
11
+ end
12
+
13
+ if env[:berkshelf].shelf
14
+ @logger.debug "Saving datafile to disk"
15
+ FileUtils.mkdir_p(datafile_path(env).dirname)
16
+ datafile_path(env).open("w+") do |f|
17
+ f.write(env[:berkshelf].shelf)
18
+ end
19
+ end
20
+
21
+ @app.call(env)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+
@@ -10,11 +10,6 @@ module VagrantPlugins
10
10
  return @app.call(env)
11
11
  end
12
12
 
13
- if !provision_enabled?(env)
14
- @logger.info "Provisioning disabled, skipping"
15
- return @app.call(env)
16
- end
17
-
18
13
  if !chef_solo?(env) && !chef_zero?(env)
19
14
  @logger.info "Provisioner does not need a share"
20
15
  return @app.call(env)
@@ -4,6 +4,8 @@ require 'vagrant/util/hash_with_indifferent_access'
4
4
  module VagrantPlugins
5
5
  module Berkshelf
6
6
  class Config < Vagrant.plugin("2", :config)
7
+ MAYBE = Object.new.freeze
8
+
7
9
  # The path to the Berksfile to use.
8
10
  # @return [String]
9
11
  attr_accessor :berksfile_path
@@ -38,19 +40,7 @@ module VagrantPlugins
38
40
 
39
41
  def finalize!
40
42
  @berksfile_path = nil if @berksfile_path == UNSET_VALUE
41
-
42
- if @enabled == UNSET_VALUE
43
- if @berksfile_path
44
- # Automatically enable if a Berksfile path was given
45
- @enabled = true
46
- elsif File.exist?("Berksfile")
47
- # Automatically enable when a Berksfile is persent
48
- @berksfile_path = "Berksfile"
49
- @enabled = true
50
- end
51
- end
52
-
53
- @enabled = false if @enabled == UNSET_VALUE
43
+ @enabled = MAYBE if @enabled == UNSET_VALUE
54
44
 
55
45
  @__finalized = true
56
46
  end
@@ -58,12 +48,38 @@ module VagrantPlugins
58
48
  def validate(machine)
59
49
  errors = _detected_errors
60
50
 
61
- if @enabled
62
- if @berksfile_path.to_s.strip.empty?
63
- errors << "berksfile_path must be set"
64
- else
65
- unless Pathname.new(@berksfile_path).absolute?
66
- @berksfile_path = File.expand_path(@berksfile_path, machine.env.root_path)
51
+ if @enabled || @enabled == MAYBE
52
+ # If no Berksfile path was given, check if one is in the working
53
+ # directory
54
+ if !@berksfile_path
55
+ path = File.expand_path("Berksfile", machine.env.root_path)
56
+
57
+ if File.exist?(path)
58
+ @enabled = true
59
+ @berksfile_path = path
60
+ else
61
+ # Disable the plugin unless it was specifically set to "true". If
62
+ # the user set the value, we want to return an error, but if the
63
+ # user did not explicitly enable the plugin, we should just
64
+ # disable it automatically.
65
+ @enabled = false unless @enabled == true
66
+ end
67
+ end
68
+
69
+ if @enabled
70
+ # Berksfile_path validations
71
+ if missing?(@berksfile_path)
72
+ errors << "berksfile_path must be set"
73
+ else
74
+ # Expand the path unless it is absolute
75
+ if !Pathname.new(@berksfile_path).absolute?
76
+ @berksfile_path = File.expand_path(@berksfile_path, machine.env.root_path)
77
+ end
78
+
79
+ # Ensure the path exists
80
+ if !File.exist?(@berksfile_path)
81
+ errors << "Berksfile at '#{@berksfile_path}' does not exist"
82
+ end
67
83
  end
68
84
  end
69
85
  end
@@ -82,6 +98,10 @@ module VagrantPlugins
82
98
  args: @args,
83
99
  }
84
100
  end
101
+
102
+ def missing?(obj)
103
+ obj.to_s.strip.empty?
104
+ end
85
105
  end
86
106
  end
87
107
  end
@@ -4,6 +4,7 @@ require_relative 'action/check'
4
4
  require_relative 'action/clean'
5
5
  require_relative 'action/install'
6
6
  require_relative 'action/load'
7
+ require_relative 'action/save'
7
8
  require_relative 'action/share'
8
9
  require_relative 'action/upload'
9
10
  require_relative 'env'
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module Berkshelf
3
- VERSION = "4.0.0"
3
+ VERSION = "4.0.1"
4
4
  end
5
5
  end
@@ -10,53 +10,12 @@ describe VagrantPlugins::Berkshelf::Config do
10
10
  subject.finalize!
11
11
  expect(subject.berksfile_path).to be(nil)
12
12
  end
13
-
14
- it "sets the value if it exists" do
15
- allow(File).to receive(:exist?)
16
- .with("Berksfile")
17
- .and_return(true)
18
- subject.finalize!
19
- expect(subject.berksfile_path).to eq("Berksfile")
20
- end
21
13
  end
22
14
 
23
15
  describe "#enabled" do
24
- it "is true when there is a Berksfile present" do
25
- allow(File).to receive(:exist?)
26
- .with("Berksfile")
27
- .and_return(true)
16
+ it "defaults to MAYBE" do
28
17
  subject.finalize!
29
- expect(subject.enabled).to be(true)
30
- end
31
-
32
- it "is false when there is a Berksfile present but it is disabled" do
33
- allow(File).to receive(:exist?)
34
- .with("Berksfile")
35
- .and_return(true)
36
- subject.enabled = false
37
- subject.finalize!
38
- expect(subject.enabled).to be(false)
39
- end
40
-
41
- it "is true when a berksfile_path is given" do
42
- subject.berksfile_path = "Berksfile"
43
- subject.finalize!
44
- expect(subject.enabled).to be(true)
45
- end
46
-
47
- it "is false when the berksfile_path is given but it is disabled" do
48
- subject.berksfile_path = "Berksfile"
49
- subject.enabled = false
50
- subject.finalize!
51
- expect(subject.enabled).to be(false)
52
- end
53
-
54
- it "defaults to false" do
55
- allow(File).to receive(:exist?)
56
- .with("Berksfile")
57
- .and_return(false)
58
- subject.finalize!
59
- expect(subject.enabled).to be(false)
18
+ expect(subject.enabled).to be(VagrantPlugins::Berkshelf::Config::MAYBE)
60
19
  end
61
20
  end
62
21
 
@@ -88,7 +47,7 @@ describe VagrantPlugins::Berkshelf::Config do
88
47
  before do
89
48
  allow(machine).to receive(:env)
90
49
  .and_return(double("env",
91
- root_path: "",
50
+ root_path: File.expand_path("..", __FILE__),
92
51
  ))
93
52
 
94
53
  subject.berksfile_path = "Berksfile"
@@ -98,21 +57,101 @@ describe VagrantPlugins::Berkshelf::Config do
98
57
  subject.args = []
99
58
  end
100
59
 
101
- let(:result) { subject.validate(machine) }
60
+ let(:result) do
61
+ subject.finalize!
62
+ subject.validate(machine)
63
+ end
64
+
102
65
  let(:errors) { result["Berkshelf"] }
103
66
 
104
- context "when the berksfile_path is nil" do
105
- it "returns an error if enabled" do
106
- subject.berksfile_path = ""
107
- subject.finalize!
108
- expect(errors).to include("berksfile_path must be set")
67
+ context "when enabled is false" do
68
+ before { subject.enabled = false }
69
+
70
+ it "returns no errors" do
71
+ expect(errors).to be_empty
109
72
  end
110
73
 
111
- it "does not returns an error if disabled" do
74
+ it "remains disabled even if a Berksfile is present" do
75
+ allow(File).to receive(:exist?).and_return(true)
76
+ expect(errors).to be_empty
77
+ expect(subject.enabled).to be(false)
78
+ end
79
+
80
+ it "remains disabled even if a berksfile_path is given" do
81
+ subject.berksfile_path = "Custom.Berksfile"
82
+ expect(errors).to be_empty
83
+ expect(subject.enabled).to be(false)
84
+ end
85
+ end
86
+
87
+ context "when no berksfile_path is given" do
88
+ before { subject.berksfile_path = nil }
89
+
90
+ context "when a Berksfile is present" do
91
+ before { allow(File).to receive(:exist?).and_return(true) }
92
+
93
+ it "sets the berksfile_path" do
94
+ expect(errors).to be_empty
95
+ expect(subject.berksfile_path).to eq(File.expand_path("../Berksfile", __FILE__))
96
+ end
97
+ end
98
+
99
+ context "when a Berksfile is not present" do
100
+ before { allow(File).to receive(:exist?).and_return(false) }
101
+
102
+ context "when the plugin is enabled" do
103
+ it "returns an error" do
104
+ subject.enabled = true
105
+ expect(errors).to include("berksfile_path must be set")
106
+ end
107
+ end
108
+
109
+ context "when the plugin is in MAYBE state" do
110
+ it "disables the plugin" do
111
+ subject.enabled = VagrantPlugins::Berkshelf::Config::MAYBE
112
+ expect(errors).to be_empty
113
+ expect(subject.enabled).to be(false)
114
+ end
115
+ end
116
+ end
117
+ end
118
+
119
+ context "when a berksfile_path is given" do
120
+ before { subject.berksfile_path = "Custom.Berksfile" }
121
+
122
+ let(:expanded_path) { File.expand_path("../Custom.Berksfile", __FILE__) }
123
+
124
+ context "when another Berksfile is present" do
125
+ before { allow(File).to receive(:exist?).and_return(true) }
126
+
127
+ it "does not change the berksfile_path" do
128
+ expect(errors).to be_empty
129
+ expect(subject.berksfile_path).to eq(expanded_path)
130
+ end
131
+
132
+ it "expands the path relative to the machine root" do
133
+ subject.finalize!
134
+ subject.validate(machine)
135
+ expect(subject.berksfile_path).to eq(expanded_path)
136
+ end
137
+ end
138
+
139
+ context "when the given berksfile_path does not exist" do
140
+ before { allow(File).to receive(:exist?).and_return(false) }
141
+
142
+ it "returns an error" do
143
+ expect(errors).to include("Berksfile at '#{expanded_path}' does not exist")
144
+ end
145
+ end
146
+ end
147
+
148
+ context "when the berksfile_path is nil and no Berksfile exists" do
149
+ before { allow(File).to receive(:exist?).and_return(false) }
150
+
151
+ it "returns an error if enabled" do
112
152
  subject.berksfile_path = ""
113
- subject.enabled = false
114
153
  subject.finalize!
115
- expect(errors).to eq([])
154
+ expect(errors).to include("berksfile_path must be set")
116
155
  end
117
156
  end
118
157
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-berkshelf
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jamie Winsor
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-11-13 00:00:00.000000000 Z
13
+ date: 2014-12-02 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: spork
@@ -78,6 +78,7 @@ files:
78
78
  - lib/vagrant-berkshelf/action/clean.rb
79
79
  - lib/vagrant-berkshelf/action/install.rb
80
80
  - lib/vagrant-berkshelf/action/load.rb
81
+ - lib/vagrant-berkshelf/action/save.rb
81
82
  - lib/vagrant-berkshelf/action/share.rb
82
83
  - lib/vagrant-berkshelf/action/upload.rb
83
84
  - lib/vagrant-berkshelf/config.rb