gae*_*123 17 ansible ansible-playbook
我已经提炼了一个有三个剧本的剧本.目标是在一次播放中从提示中收集数据库密码,然后在其他两次播放中使用相同的密码.
---
- name: database password
hosts:
- webservers
- dbservers
vars_prompt:
- name: "db_password"
prompt: "Enter Database Password for databse user root"
default: "root"
- hosts: dbservers
tasks:
- command: echo {{db_password | mandatory }}
- hosts: webservers
tasks:
- command: echo {{db_password | mandatory }}
Run Code Online (Sandbox Code Playgroud)
它失败,如下所示.
Enter Database Password for databse user root [root]:
PLAY [database password] ******************************************************
GATHERING FACTS ***************************************************************
ok: [vc-dev-1]
PLAY [dbservers] **************************************************************
GATHERING FACTS ***************************************************************
ok: [vc-dev-1]
TASK: [command echo {{db_password | mandatory}}] ***************************
fatal: [vc-dev-1] => One or more undefined variables: 'db_password' is undefined
FATAL: all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @.../playbook2.retry
vc-dev-1 : ok=3 changed=0 unreachable=1 failed=0
Run Code Online (Sandbox Code Playgroud)
gae*_*123 26
我找到了以下解决方法,使用set_fact将用户输入的变量分配给具有playbook范围的变量.似乎var_prompt变量不像事实和其他变量,它的范围在播放中受到限制,提示它们不是整个剧本.我不确定这是一个功能还是一个bug.
---
- name: database password
hosts:
- webservers
- dbservers
vars_prompt:
- name: "db_password"
prompt: "Enter Database Password for databse user root"
default: "root"
tasks:
- set_fact:
db_root_password: "{{db_password}}"
- hosts: dbservers
tasks:
- command: echo {{db_root_password | mandatory }}
- hosts: webservers
tasks:
- command: echo {{db_root_password | mandatory }}
Run Code Online (Sandbox Code Playgroud)
use*_*143 12
即兴创作gae123的答案,如果您的主机是动态添加的,则无法在现有服务器组上获取和设置事实,在这种情况下可以使用localhost进行设置和获取.
---
- name: database password
hosts: localhost
vars_prompt:
- name: "db_password"
prompt: "Enter Database Password for databse user root"
default: "root"
tasks:
- set_fact:
db_root_password: "{{db_password}}"
- hosts: dbservers
vars:
- db_root_password: "{{ hostvars['localhost']['db_root_password'] }}"
tasks:
- command: echo {{db_root_password | mandatory }}
- hosts: webservers
vars:
- db_root_password: "{{ hostvars['localhost']['db_root_password'] }}"
tasks:
- command: echo {{db_root_password | mandatory }}
Run Code Online (Sandbox Code Playgroud)