我的Ansible playbook部署到数据库和web服务器,我需要在它们之间使用一些共享变量。从这个question的answer几乎给了我什么,我需要:Ansible playbook在主机之间生成和共享变量
---
- hosts: all
tasks:
- set_fact: my_global_var='hello'
- hosts: db
tasks:
- debug: msg={{my_global_var}}
- hosts: web
tasks:
- debug: msg={{my_global_var}}
然而,在我的情况的变量是通过在每个运行的剧本随机生成一个密码,然后必须共享:
---
- hosts: all
tasks:
- name: Generate new password
shell: "tr -dc _[:alnum:] < /dev/urandom | head -c${1:-20}"
register: new_password
- name: Set password as fact
set_fact:
my_global_var: "{{ new_password.stdout }}"
- hosts: db
tasks:
- debug: msg={{my_global_var}}
- hosts: web
tasks:
- debug: msg={{my_global_var}}
以上示例不起作用,因为现在重新生成密码,并且all
主机中的每个主机完全不同(除非您巧妙地为您的db和web服务器使用相同的机器/主机名)。
理想情况下,我不希望有人不得不记得在命令行上使用--extra-vars
传递一个好的随机密码,它应该由剧本生成和处理。
Ansible中是否有任何建议的机制来在剧本中创建变量,并让剧本中的所有主机都可以访问?
在这种情况下,'my_global_var'只能用于单个主机(首先在播放中)。 –
你是对的,谢谢,我调整了'run_once'只在pw代中运行。 – ProfHase85