20

3 つのプレイを含むプレイブックを抽出しました。目標は、1 回のプレイでプロンプトからデータベース パスワードを収集し、他の 2 回のプレイで同じパスワードを使用することです。

---

- 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 }}

以下のように失敗します。

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   
4

3 に答える 3

30

set_fact を使用して、ユーザーが入力した変数を Playbook スコープの変数に割り当てる次の回避策を見つけました。var_prompt 変数はファクトやその他の変数とは異なり、その範囲はプレイブック全体ではなく、プロンプトを表示するプレイに制限されているようです。これが機能なのかバグなのかはわかりません。

---

- 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 }}
于 2014-06-27T06:04:22.407 に答える
14

ホストが動的に追加された場合、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 }}
于 2016-03-08T08:15:45.740 に答える