From 1213d67f8be956dc10d23174cbae389cfba67d94 Mon Sep 17 00:00:00 2001 From: Andrey Ermakov Date: Sun, 13 Dec 2015 00:37:24 +0300 Subject: [PATCH 1/3] Pass more supported arguments to Ansible --- lib/vagrant-guest_ansible/config.rb | 5 ++++- lib/vagrant-guest_ansible/guest_script.sh | 12 +++++------ lib/vagrant-guest_ansible/provisioner.rb | 26 +++++++++++++++++------ 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/lib/vagrant-guest_ansible/config.rb b/lib/vagrant-guest_ansible/config.rb index 8e353c2..18c024c 100644 --- a/lib/vagrant-guest_ansible/config.rb +++ b/lib/vagrant-guest_ansible/config.rb @@ -15,6 +15,7 @@ class Config < Vagrant.plugin("2", :config) attr_accessor :skip_tags attr_accessor :start_at_task attr_accessor :groups + attr_accessor :vault_password_file attr_accessor :host_key_checking # Joker attribute, used to pass unsupported arguments to ansible anyway @@ -34,6 +35,7 @@ def initialize @start_at_task = UNSET_VALUE @raw_arguments = UNSET_VALUE @groups = UNSET_VALUE + @vault_password_file = UNSET_VALUE @host_key_checking = "true" end @@ -66,6 +68,7 @@ def finalize! @skip_tags = nil if @skip_tags == UNSET_VALUE @start_at_task = nil if @start_at_task == UNSET_VALUE @raw_arguments = nil if @raw_arguments == UNSET_VALUE + @vault_password_file = nil if @vault_password_file == UNSET_VALUE @groups = {} if @groups == UNSET_VALUE @host_key_checking = nil if @host_key_checking == UNSET_VALUE end @@ -124,4 +127,4 @@ def validate(machine) end end end -end \ No newline at end of file +end diff --git a/lib/vagrant-guest_ansible/guest_script.sh b/lib/vagrant-guest_ansible/guest_script.sh index 2e2a914..8a1ed6a 100644 --- a/lib/vagrant-guest_ansible/guest_script.sh +++ b/lib/vagrant-guest_ansible/guest_script.sh @@ -2,7 +2,10 @@ ANSIBLE_PLAYBOOK=$1 ANSIBLE_HOSTS=$2 -ANSIBLE_EXTRA_VARS="$3" + +# Strip arguments we're not going to pass to Ansible +shift 2; + TEMP_HOSTS="/tmp/ansible_hosts" if [ ! -f /vagrant/$ANSIBLE_PLAYBOOK ]; then @@ -38,10 +41,6 @@ if ! command -v ansible >/dev/null; then sudo pip install ansible fi -if [ ! -z "$ANSIBLE_EXTRA_VARS" -a "$ANSIBLE_EXTRA_VARS" != " " ]; then - ANSIBLE_EXTRA_VARS=" --extra-vars $ANSIBLE_EXTRA_VARS" -fi - # stream output export PYTHONUNBUFFERED=1 # show ANSI-colored output @@ -49,5 +48,6 @@ export ANSIBLE_FORCE_COLOR=true cp /vagrant/${ANSIBLE_HOSTS} ${TEMP_HOSTS} && chmod -x ${TEMP_HOSTS} echo "Running Ansible as $USER:" -ansible-playbook /vagrant/${ANSIBLE_PLAYBOOK} --inventory-file=${TEMP_HOSTS} --connection=local $ANSIBLE_EXTRA_VARS + +ansible-playbook --inventory-file=${TEMP_HOSTS} --connection=local "$@" /vagrant/$ANSIBLE_PLAYBOOK rm ${TEMP_HOSTS} diff --git a/lib/vagrant-guest_ansible/provisioner.rb b/lib/vagrant-guest_ansible/provisioner.rb index e1ea34a..d6f9a02 100644 --- a/lib/vagrant-guest_ansible/provisioner.rb +++ b/lib/vagrant-guest_ansible/provisioner.rb @@ -7,11 +7,15 @@ def initialize(machine, config) end def provision - args = [ config.playbook, File.basename(self.setup_inventory_file), - format_extra_vars(config.extra_vars) + config.extra_vars && "--extra-vars=#{format_extra_vars(config.extra_vars)}" || "", + config.vault_password_file && "--vault-password-file=#{config.vault_password_file}" || "", + config.tags && "--tags=#{format_tags(config.tags)}" || "", + config.skip_tags && "--skip-tags=#{format_tags(config.skip_tags)}" || "", + config.verbose && "-#{config.verbose}" || "", + config.start_at_task && "--start-at-task=#{config.start_at_task}" || "" ].join(' ') command = "chmod +x #{config.upload_path} && #{config.upload_path} #{args}" @@ -52,11 +56,19 @@ def provision protected # converts the extra_vars to a properly formatted string - def format_extra_vars(extra_vars) - if extra_vars.kind_of?(String) - extra_vars.strip - elsif extra_vars.kind_of?(Hash) - "\"#{extra_vars.to_json.gsub('"', '\"')}\"" + def format_extra_vars(arg) + if arg.kind_of?(String) + arg.strip + elsif arg.kind_of?(Hash) + "\"#{arg.to_json.gsub('"', '\"')}\"" + end + end + + def format_tags(arg) + if arg.kind_of?(String) + arg.strip + elsif arg.kind_of?(Array) + "\"#{arg.join(',')}\"" end end From 65bd2b3967f6a1cfbb1bc933513737216e51fc6d Mon Sep 17 00:00:00 2001 From: Andrey Ermakov Date: Tue, 26 Jan 2016 17:41:23 +0300 Subject: [PATCH 2/3] Fixed small issues under Windows --- .gitignore | 4 +--- lib/vagrant-guest_ansible/provisioner.rb | 4 ++-- pkg/vagrant-guest_ansible-0.0.3.gem | Bin 0 -> 10240 bytes 3 files changed, 3 insertions(+), 5 deletions(-) create mode 100644 pkg/vagrant-guest_ansible-0.0.3.gem diff --git a/.gitignore b/.gitignore index e6d4066..d5c0b0c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -*.gem *.rbc .bundle .config @@ -9,10 +8,9 @@ _yardoc coverage doc/ lib/bundler/man -pkg rdoc spec/reports test/tmp test/version_tmp tmp -pkg + diff --git a/lib/vagrant-guest_ansible/provisioner.rb b/lib/vagrant-guest_ansible/provisioner.rb index d6f9a02..8a2a709 100644 --- a/lib/vagrant-guest_ansible/provisioner.rb +++ b/lib/vagrant-guest_ansible/provisioner.rb @@ -9,7 +9,7 @@ def initialize(machine, config) def provision args = [ config.playbook, - File.basename(self.setup_inventory_file), + self.setup_inventory_file, config.extra_vars && "--extra-vars=#{format_extra_vars(config.extra_vars)}" || "", config.vault_password_file && "--vault-password-file=#{config.vault_password_file}" || "", config.tags && "--tags=#{format_tags(config.tags)}" || "", @@ -158,7 +158,7 @@ def setup_inventory_file end end - return generated_inventory_file.to_s + return File.basename(generated_inventory_file.to_s) end end diff --git a/pkg/vagrant-guest_ansible-0.0.3.gem b/pkg/vagrant-guest_ansible-0.0.3.gem new file mode 100644 index 0000000000000000000000000000000000000000..07b086c648f99f4f428bf17ce53ef1254314235d GIT binary patch literal 10240 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 literal 0 HcmV?d00001 From eb0ebfbbd394c3c77c0c7d87835df84587144b4e Mon Sep 17 00:00:00 2001 From: Andrey Ermakov Date: Mon, 1 Feb 2016 18:13:59 +0300 Subject: [PATCH 3/3] Fixed easy_install URL --- lib/vagrant-guest_ansible/guest_script.sh | 2 +- pkg/vagrant-guest_ansible-0.0.3.gem | Bin 10240 -> 18432 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vagrant-guest_ansible/guest_script.sh b/lib/vagrant-guest_ansible/guest_script.sh index 8a1ed6a..a4fb9fc 100644 --- a/lib/vagrant-guest_ansible/guest_script.sh +++ b/lib/vagrant-guest_ansible/guest_script.sh @@ -31,7 +31,7 @@ if ! command -v ansible >/dev/null; then exit 1 fi echo "Installing pip via easy_install." - wget http://peak.telecommunity.com/dist/ez_setup.py + wget https://bootstrap.pypa.io/ez_setup.py sudo python ez_setup.py && rm -f ez_setup.py sudo easy_install pip # Make sure setuptools are installed crrectly. diff --git a/pkg/vagrant-guest_ansible-0.0.3.gem b/pkg/vagrant-guest_ansible-0.0.3.gem index 07b086c648f99f4f428bf17ce53ef1254314235d..999ae7f1aa2ecd4def74fb80d50e91f8e347b020 100644 GIT binary patch delta 15247 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 B+^hfq