diff --git a/plugins/provisioners/shell/config.rb b/plugins/provisioners/shell/config.rb index 931fadd14..c0b0b7cf2 100644 --- a/plugins/provisioners/shell/config.rb +++ b/plugins/provisioners/shell/config.rb @@ -66,7 +66,13 @@ module VagrantPlugins # string or as an array. def args_valid? return true if !args - args.is_a?(String) || args.is_a?(Array) + return true if args.is_a?(String) or args.is_a?(Fixnum) + if args.is_a?(Array) + args.each do |a| + return false if not a.kind_of?(String) and not a.kind_of?(Fixnum) + end + return true + end end def remote? diff --git a/plugins/provisioners/shell/provisioner.rb b/plugins/provisioners/shell/provisioner.rb index e258286bf..04ee3c8ef 100644 --- a/plugins/provisioners/shell/provisioner.rb +++ b/plugins/provisioners/shell/provisioner.rb @@ -8,10 +8,10 @@ module VagrantPlugins class Provisioner < Vagrant.plugin("2", :provisioner) def provision args = "" - if config.args.is_a?(String) - args = " #{config.args}" + if config.args.is_a?(String) or config.args.is_a?(Fixnum) + args = " #{config.args.to_s}" elsif config.args.is_a?(Array) - args = config.args.map { |a| quote_and_escape(a) } + args = config.args.map { |a| quote_and_escape(a.to_s) } args = " #{args.join(" ")}" end diff --git a/test/unit/plugins/provisioners/shell/config_test.rb b/test/unit/plugins/provisioners/shell/config_test.rb index 2716afb43..8b05f452b 100644 --- a/test/unit/plugins/provisioners/shell/config_test.rb +++ b/test/unit/plugins/provisioners/shell/config_test.rb @@ -30,6 +30,16 @@ describe "VagrantPlugins::Shell::Config" do result["shell provisioner"].should == [] end + it "passes with fixnum args" do + subject.path = file_that_exists + subject.args = 1 + subject.finalize! + + result = subject.validate(machine) + + result["shell provisioner"].should == [] + end + it "passes with array args" do subject.path = file_that_exists subject.args = ["an", "array"] @@ -53,5 +63,27 @@ describe "VagrantPlugins::Shell::Config" do I18n.t("vagrant.provisioners.shell.args_bad_type") ] end + + it "handles scalar array args" do + subject.path = file_that_exists + subject.args = ["string", 1, 2] + subject.finalize! + + result = subject.validate(machine) + + result["shell provisioner"].should == [] + end + + it "returns an error if args is an array with non-scalar types" do + subject.path = file_that_exists + subject.args = [[1]] + subject.finalize! + + result = subject.validate(machine) + + result["shell provisioner"].should == [ + I18n.t("vagrant.provisioners.shell.args_bad_type") + ] + end end end