如何访问以在另一台服务器上回答一个提示?我的主人:
[dbs]
db1
db2
db3
我有一个角色,我的角色tasks/main.yml
是:
- pause:
prompt: "Do you want to install mysql (yes/no)?"
register: my_pause
- include_tasks: mysql.yml
when: my_pause.user_input | bool
当我执行这个角色时,只有第一台服务器跳过MySQL.yml
并到另一台服务器执行MySQL.yml
。
我想如果用户输入 no 作为回答提示, MySQL.yml
不会对任何服务器执行。但是当我输入 no 时会再次安装!!
[root@anisble ansible]# ansible-playbook playbooks/test.yml
PLAY [dbs]
**************************************************************
TASK [Gathering Facts]
*******************
ok: [db1]
ok: [db3]
ok: [db2]
TASK [ssh : pause] ********************************************************************************
[ssh : pause]
Do you want to install mysql (yes/no)?:
no
ok: [db1]
TASK [ssh : include_tasks] ********************************************************************************
skipping: [db1]
included: /etc/ansible/roles/ssh/tasks/mysql.yml for db2, db3
TASK [ssh : install mysql] ********************************************************************************
ok: [db3]
ok: [db2]
PLAY RECAP ********************************************************************************
db1 : ok=2 changed=0 unreachable=0 failed=0
db2 : ok=3 changed=0 unreachable=0 failed=0
db3
编辑-1
我使用第一个您的解决方案,但是当我输入 no 时,它将再次安装!
task/main.yml
:
---
- pause:
prompt: "Do you want to install mysql (yes/no)?"
register: install_mysql
delegate_to: localhost
- include_tasks: mysql.yml
when: hostvars['localhost']['install_mysql']['user_input'] == 'yes'
输出是:
[root@anisble ansible]# ansible-playbook playbooks/test.yml
PLAY [dbs] ********************************************************************************
TASK [Gathering Facts] ********************************************************************************
ok: [db2]
ok: [db1]
ok: [db3]
TASK [ssh : pause] ********************************************************************************
[ssh : pause]
Do you want to install mysql (yes/no)?:
no
ok: [db1 -> localhost]
TASK [ssh : include_tasks] ********************************************************************************
included: /etc/ansible/roles/ssh/tasks/mysql.yml for db1, db2, db3
TASK [ssh : install mysql] ********************************************************************************
changed: [db1]
changed: [db3]
changed: [db2]
PLAY RECAP ********************************************************************************
db1 : ok=4 changed=1 unreachable=0 failed=0
db2 : ok=3 changed=1 unreachable=0 failed=0
db3 : ok=3 changed=1 unreachable=0 failed=0
编辑-2
这种方法有效。
- name: confirm
pause:
prompt: "Do you want to install mysql (yes/no)?"
register: install_mysql
- include_tasks: mysql.yml
when: hostvars[groups['dbs'][0]]['install_mysql']['user_input'] == "yes"
在本地主机上运行暂停
您可以
pause
在特定主机上运行任务,例如localhost
并从 hostvars 数组hostvars['localhost']
(从此处窃取)获取答案。您必须在该主机上使用专用播放才能访问 hostvars 数组中的答案。如果您在主机组上运行一次(例如在您的原始请求中),您必须猜测哪个主机将首先被处理并使用
hostvars['firstprocessedhost']
(有时hostvars['db1']
)。当您使用时
delegate_to: localhost
,任务仍在运行,db1
并且答案存储在hostvars['db1']
.您不应该依赖主机的顺序,并且暂停模块旨在暂停剧本而不提示用户数据。
vars_prompt
如果可能的话,你应该使用
vars_prompt
你的游戏部分: