在稍后的游戏中调用 Ansible hostvars 组变量

在稍后的游戏中调用 Ansible hostvars 组变量

在我的剧本中,我为一组机器(应用程序)创建了一个变量。即用户 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

相关内容