From d237bc0657c4b1198c7af10e6ec0d5c63f6f8524 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Fri, 9 Aug 2013 11:51:36 -0700 Subject: [PATCH] provisioners/ansible: properly quote vars with spaces [GH-1984] --- CHANGELOG.md | 3 ++- plugins/provisioners/ansible/provisioner.rb | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 956dfbba2..ca956633c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ IMPROVEMENTS: - commands/status: cosmetic improvement to better align names and statuses [GH-2016] - guests/suse: Supports private/public networks. [GH-1689] - - plugins/ansible: Ansible `inventory_path` can be a directory now. [GH-2035] + - provisioners/ansible: Ansible `inventory_path` can be a directory now. [GH-2035] BUG FIXES: @@ -23,6 +23,7 @@ BUG FIXES: [GH-2026] - hosts/fedora: properly detect later CentOS versions. [GH-2008] - provisioners/ansible: No longer report failure on every run. [GH-2007] + - provisioners/ansible: Properly handle extra vars with spaces. [GH-1984] ## 1.2.7 (July 28, 2013) diff --git a/plugins/provisioners/ansible/provisioner.rb b/plugins/provisioners/ansible/provisioner.rb index 66e61ff7e..ee9e72e7d 100644 --- a/plugins/provisioners/ansible/provisioner.rb +++ b/plugins/provisioners/ansible/provisioner.rb @@ -5,10 +5,23 @@ module VagrantPlugins ssh = @machine.ssh_info options = %W[--private-key=#{ssh[:private_key_path]} --user=#{ssh[:username]}] - options << "--extra-vars=" + config.extra_vars.map{|k,v| "#{k}=#{v}"}.join(' ') if config.extra_vars options << "--inventory-file=#{config.inventory_path}" if config.inventory_path options << "--ask-sudo-pass" if config.ask_sudo_pass + if config.extra_vars + extra_vars = config.extra_vars.map do |k,v| + v = v.gsub('"', '\\"') + if v.include?(' ') + v = v.gsub("'", "\\'") + v = "'#{v}'" + end + + "#{k}=#{v}" + end + + options << "--extra-vars=\"#{extra_vars.join(" ")}\"" + end + if config.limit if not config.limit.kind_of?(Array) config.limit = [config.limit]