summaryrefslogtreecommitdiff
path: root/test/integration/targets/vault
diff options
context:
space:
mode:
authorAdrian Likins <alikins@redhat.com>2017-11-15 14:01:32 -0500
committerGitHub <noreply@github.com>2017-11-15 14:01:32 -0500
commit86dc3c09ac875f2ab34a3299c47ab5a6617de301 (patch)
treebe9bebc5d05748ae545e6e322f9ed9bd138de947 /test/integration/targets/vault
parentf93b98661a73338d592eff82294e6a38d13f840e (diff)
downloadansible-86dc3c09ac875f2ab34a3299c47ab5a6617de301.tar.gz
Fix vault --ask-vault-pass with no tty (#31493)
* Fix vault --ask-vault-pass with no tty 2.4.0 added a check for isatty() that would skip setting up interactive vault password prompts if not running on a tty. But... getpass.getpass() will fallback to reading from stdin if it gets that far without a tty. Since 2.4.0 skipped the interactive prompts / getpass.getpass() in that case, it would never get a chance to fall back to stdin. So if 'echo $VAULT_PASSWORD| ansible-playbook --ask-vault-pass site.yml' was ran without a tty (ie, from a jenkins job or via the vagrant ansible provisioner) the 2.4 behavior was different than 2.3. 2.4 would never read the password from stdin, resulting in a vault password error like: ERROR! Attempting to decrypt but no vault secrets found Fix is just to always call the interactive password prompts based on getpass.getpass() on --ask-vault-pass or --vault-id @prompt and let getpass sort it out. * up test_prompt_no_tty to expect prompt with no tty We do call the PromptSecret class if there is no tty, but we are back to expecting it to read from stdin in that case. * Fix logic for when to auto-prompt vault pass If --ask-vault-pass is used, then pretty much always prompt. If it is not used, then prompt if there are no other vault ids provided and 'auto_prompt==True'. Fixes vagrant bug https://github.com/hashicorp/vagrant/issues/9033 Fixes #30993
Diffstat (limited to 'test/integration/targets/vault')
-rwxr-xr-xtest/integration/targets/vault/runme.sh39
1 files changed, 39 insertions, 0 deletions
diff --git a/test/integration/targets/vault/runme.sh b/test/integration/targets/vault/runme.sh
index 0895f4ffe5..5bdf5bb46e 100755
--- a/test/integration/targets/vault/runme.sh
+++ b/test/integration/targets/vault/runme.sh
@@ -34,6 +34,45 @@ WRONG_RC=$?
echo "rc was $WRONG_RC (1 is expected)"
[ $WRONG_RC -eq 1 ]
+# Use linux setsid to test without a tty. No setsid if osx/bsd though...
+if [ -x "$(command -v setsid)" ]; then
+ # tests related to https://github.com/ansible/ansible/issues/30993
+ CMD='ansible-playbook -vvvvv --ask-vault-pass test_vault.yml'
+ setsid sh -c "echo test-vault-password|${CMD}" < /dev/null > log 2>&1 && :
+ WRONG_RC=$?
+ cat log
+ echo "rc was $WRONG_RC (0 is expected)"
+ [ $WRONG_RC -eq 0 ]
+
+ setsid sh -c 'tty; ansible-vault --ask-vault-pass -vvvvv view test_vault.yml' < /dev/null > log 2>&1 && :
+ WRONG_RC=$?
+ echo "rc was $WRONG_RC (1 is expected)"
+ [ $WRONG_RC -eq 1 ]
+ cat log
+
+ setsid sh -c 'tty; echo passbhkjhword|ansible-playbook -vvvvv --ask-vault-pass test_vault.yml' < /dev/null > log 2>&1 && :
+ WRONG_RC=$?
+ echo "rc was $WRONG_RC (1 is expected)"
+ [ $WRONG_RC -eq 1 ]
+ cat log
+
+ setsid sh -c 'tty; echo test-vault-password |ansible-playbook -vvvvv --ask-vault-pass test_vault.yml' < /dev/null > log 2>&1
+ echo $?
+ cat log
+
+ setsid sh -c 'tty; echo test-vault-password|ansible-playbook -vvvvv --ask-vault-pass test_vault.yml' < /dev/null > log 2>&1
+ echo $?
+ cat log
+
+ setsid sh -c 'tty; echo test-vault-password |ansible-playbook -vvvvv --ask-vault-pass test_vault.yml' < /dev/null > log 2>&1
+ echo $?
+ cat log
+
+ setsid sh -c 'tty; echo test-vault-password|ansible-vault --ask-vault-pass -vvvvv view vaulted.inventory' < /dev/null > log 2>&1
+ echo $?
+ cat log
+fi
+
# old format
ansible-vault view "$@" --vault-password-file vault-password-ansible format_1_0_AES.yml