Ann*_*ile 31 variables ansible
如果它不在环境变量中,我希望能够提示我的超级安全密码变量.(我想我可能不想把这个定义放到.bash_profile或其他一个地方.)
这不起作用.它总是提示我.
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
Run Code Online (Sandbox Code Playgroud)
注意:我在Mac上,但我希望任何解决方案都与平台无关.
小智 34
根据开发人员的回复和我用最新版本进行的快速测试,它vars_prompt是在 "收集事实" 之前运行的.这意味着env var SSHPWD始终null在您检查时when.
不幸的是,似乎没有办法vars_prompt在任务级别允许该语句.
Michael DeHaan的理由是,在任务级别允许提示会为角色打开大门,提出很多问题.这将使使用Ansible Galaxy角色变得困难:
Ansible的自动化已经得到了明确的重视,在任务级别提问并不是我们真正想做的事情.
但是,您仍然可以在游戏级别询问vars_prompt问题,并在整个任务中使用这些变量.你不能在角色中提问.
真的,这就是我想强制执行的 - 如果很多Galaxy角色开始提问,我可以看到这很烦人:)
teh*_*oon 28
我可能迟到了派对,但要避免的一个简单方法vars_prompt就是interactive mode通过这样一个简单的技巧来禁用它:
echo -n | ansible-playbook -e MyVar=blih site.yaml
Run Code Online (Sandbox Code Playgroud)
这无法控制哪些vars_prompt要避免但与之相结合default: "my_default"可以在脚本中使用.
完整的例子:
---
- hosts: localhost
vars_prompt:
- prompt: Enter blah value
- default: "{{ my_blah }}"
- name: blah
Run Code Online (Sandbox Code Playgroud)
echo -n | ansible-playbook -e my_blah=blih site.yaml
编辑:
我发现使用pause模块和prompt参数正在做我想要的:
---
- 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
Run Code Online (Sandbox Code Playgroud)
根据tehmoon 的回答并进行了一些修改,我这样做了:
- hosts:
- hostA
become: yes
pre_tasks:
- pause:
prompt: "Give your username"
register: prompt
no_log: yes
run_once: yes
- set_fact:
username: "{{prompt.user_input}}"
no_log: yes
run_once: yes
- pause:
prompt: "Give your password"
echo: no
register: prompt
no_log: yes
run_once: yes
- set_fact:
password: "{{prompt.user_input}}"
no_log: yes
run_once: yes
tags: [my_role_using_user_pass]
roles:
- role: my_role_using_user_pass
Run Code Online (Sandbox Code Playgroud)