我的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