Provisioner configuration no longer cleared when box is downloaded during an `up`. [closes GH-308]

This commit is contained in:
Mitchell Hashimoto 2011-07-06 22:08:37 -07:00
parent eecddfee5b
commit bdc316f4ef
4 changed files with 13 additions and 43 deletions

View File

@ -16,6 +16,8 @@
`ssh_config` output. [GH-105]
- Chef JSON can now be set with `chef.json =` instead of the old
`merge` technique. [GH-314]
- Provisioner configuration is no longer cleared when the box
needs to be downloaded during an `up`. [GH-308]
## 0.7.6 (July 2, 2011)

View File

@ -8,31 +8,22 @@ module Vagrant
@app = app
@env = env
@env["provision.enabled"] = true if !@env.has_key?("provision.enabled")
@provisioners = []
load_provisioners if provisioning_enabled?
end
def call(env)
@app.call(env)
@provisioners.each do |instance|
enabled_provisioners.each do |instance|
@env.ui.info I18n.t("vagrant.actions.vm.provision.beginning", :provisioner => instance.class)
instance.provision!
end
end
def provisioning_enabled?
!@env["config"].vm.provisioners.empty? && @env["provision.enabled"]
end
def load_provisioners
@env["config"].vm.provisioners.each do |provisioner|
@env.ui.info I18n.t("vagrant.actions.vm.provision.enabled", :provisioner => provisioner.shortcut)
def enabled_provisioners
@env["config"].vm.provisioners.map do |provisioner|
instance = provisioner.provisioner.new(@env, provisioner.config)
instance.prepare
@provisioners << instance
instance
end
end
end

View File

@ -395,7 +395,6 @@ en:
persisting: "Persisting the VM UUID (%{uuid})..."
provision:
beginning: "Running provisioner: %{provisioner}..."
enabled: "Provisioning enabled with %{provisioner}..."
resume:
resuming: Resuming suspended VM...
share_folders:

View File

@ -15,29 +15,6 @@ class ProvisionVMActionTest < Test::Unit::TestCase
@vm.stubs(:vm).returns(@internal_vm)
end
context "initializing" do
setup do
@klass.any_instance.stubs(:load_provisioners)
end
should "load provisioner if provisioning enabled" do
@env["config"].vm.provision :chef_solo
@klass.any_instance.expects(:load_provisioners).once
@klass.new(@app, @env)
end
should "not load provisioner if disabled" do
@klass.any_instance.expects(:load_provisioners).never
@klass.new(@app, @env)
end
should "not load provisioner if disabled through env hash" do
@env["provision.enabled"] = false
@klass.any_instance.expects(:load_provisioners).never
@klass.new(@app, @env)
end
end
context "with an instance" do
setup do
# Set provisioner to nil so the provisioner isn't loaded on init
@ -53,9 +30,9 @@ class ProvisionVMActionTest < Test::Unit::TestCase
should "instantiate and prepare each provisioner" do
@env["config"].vm.provision :chef_solo
@env["config"].vm.provision :chef_solo
@instance.load_provisioners
provisioners = @instance.enabled_provisioners
assert_equal 2, @instance.provisioners.length
assert_equal 2, provisioners.length
end
should "set the config for each provisioner" do
@ -63,9 +40,9 @@ class ProvisionVMActionTest < Test::Unit::TestCase
chef.cookbooks_path = "foo"
end
@instance.load_provisioners
provisioners = @instance.enabled_provisioners
assert_equal "foo", @instance.provisioners.first.config.cookbooks_path
assert_equal "foo", provisioners.first.config.cookbooks_path
end
end
@ -73,13 +50,14 @@ class ProvisionVMActionTest < Test::Unit::TestCase
setup do
Vagrant::Provisioners::ChefSolo.any_instance.stubs(:prepare)
@env["config"].vm.provision :chef_solo
@instance.load_provisioners
end
should "provision and continue chain" do
provisioners = [mock("one"), mock("two")]
seq = sequence("seq")
@app.expects(:call).with(@env).in_sequence(seq)
@instance.provisioners.each do |prov|
@instance.stubs(:enabled_provisioners).returns(provisioners)
provisioners.each do |prov|
prov.expects(:provision!).in_sequence(seq)
end