I would like to be able to prompt for my super secure password variable if it is not already in the environment variables. (I'm thinking that I might not want to put the definition into .bash_profile or one of the other spots.)
This is not working. It always prompts me.
vars: THISUSER: "{{ lookup('env','LOGNAME') }}" SSHPWD: "{{ lookup('env','MY_PWD') }}" vars_prompt: - name: "release_version" prompt: "Product release version" default: "1.0" when: SSHPWD == null
NOTE: I'm on a Mac, but I'd like for any solutions to be platform-independent.
According to the replies from the devs and a quick test I've done with the latest version, the vars_prompt
is run before "GATHERING FACTS". This means that the env var SSHPWD
is always null
at the time of your check with when
.
Unfortunately it seems there is no way of allowing the vars_prompt
statement at task level.
Michael DeHaan's reasoning for this is that allowing prompts at the task-level would open up the doors to roles asking a lot of questions. This would make using Ansible Galaxy roles which do this difficult:
There's been a decided emphasis in automation in Ansible and asking questions at task level is not something we really want to do.
However, you can still ask vars_prompt questions at play level and use those variables throughout tasks. You just can't ask questions in roles.
And really, that's what I would like to enforce -- if a lot of Galaxy roles start asking questions, I can see that being annoying :)
I might be late to the party but a quick way to avoid vars_prompt
is to disable the interactive mode
by doing that simple trick:
echo -n | ansible-playbook -e MyVar=blih site.yaml
This add no control over which vars_prompt to avoid but coupled with default: "my_default"
it can be used in a script.
Full example here:
--- - hosts: localhost vars_prompt: - prompt: Enter blah value - default: "{{ my_blah }}" - name: blah
echo -n | ansible-playbook -e my_blah=blih site.yaml
EDIT:
I've found that using the pause
module and the prompt
argument was doing what I wanted:
--- - pause: prompt: "Sudo password for localhost " when: ( env == 'local' ) and ( inventory_hostname == "localhost" ) and ( hostvars["localhost"]["ansible_become_password"] is not defined ) register: sudo_password no_log: true tags: - always
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With