在我的剧本中,我为一组机器(应用程序)创建了一个变量。即用户 db_password 的密码。目前,它仅在组应用程序内。
我尝试在剧本的后期使用 hostvars 为属于不同组的另一组主机调用该变量。我尝试了很多方法,但似乎都不起作用。下面是主要剧本以及调用的 2 个角色的 main.yml。
我的问题是,当我尝试在数据库服务器上调试它时,它不会显示 db_password 的变量。我认为我对 hostvars 概念的理解是正确的,但我愿意接受新的想法。我知道我也可以将 set_fact db_password 的输出写入文件,然后将其移动到数据库服务器并从中读取,但我试图将其保留在这一剧本中。任何想法和帮助都值得赞赏
- hosts: 127.0.0.1
connection: local
gather_facts: true
- hosts: apps
roles:
- { role: test_app}
- hosts: db
roles:
- { role: test_db }
test_app 的 main.yml
- name: "Setup TPMS {{ app_server_hostname }} | GENERATE password"
set_fact: db_password={{lookup('password', '/dev/null
chars=ascii_letters,digits,hexdigits length=10')}}
- name: user create
user:
name: testing
update_password: always
password: "{{ db_password}}"
state: present
test_db 的 main.yml
- name: show var
debug: "{{ hostvars[groups['apps'][0]]['db_password'] }}"
我看到的当前错误我期望密码返回而不是 hello world
TASK [test_db : show var]
ok: [server104] => {
"msg": "Hello world!"
答案1
缩进错误。正确的缩进如下
- hosts: apps
roles:
- { role: test_app}
- hosts: db
roles:
- { role: test_db }
。
- name: "Setup TPMS {{ app_server_hostname }} | GENERATE password"
set_fact:
db_password: ...
chars: ...
。
- name: user create
user:
name: testing
update_password: always
password: "{{ db_password}}"
state: present