将vars从var_prompt传递到导入的剧本

时间:2018-11-06 20:03:06

标签: ansible

我有一个“主”可写剧本,其中我使用“ import_playbook”调用了多个剧本。此时,从清单文件中检索“子”剧本中所需的所有变量,并且该变量正在起作用。

#master_playbook.yml
- import_playbook: playbook1.yaml
- import_playbook: playbook2.yaml

我想做的是代替在清单文件中列出“子”剧本中所需的密码,而是希望“主”剧本提示用户输入所需的密码,然后传递这些密码到“孩子”剧本。 “子”剧本仍会从清单文件中检索所需的其余变量(非密码)。

我可以使用vars_prompt来工作并能够输入密码,但是我遇到的问题是能够将这些变量从“主”剧本传递到“子”剧本。 “ import_playbook”操作。

试图完成与以下操作等效的操作,但这不起作用。

#master_playbook.yml
-vars_prompt:
  - name: "password1"
    prompt: "Enter password1"
  - name: "password2"
    prompt: "Enter password2"
- import_playbook: playbook1.yaml
  vars:
    password1: "{{ password1 }}"
    password2: "{{ password2 }}"
- import_playbook: playbook2.yaml
  vars:
    password1: "{{ password1 }}"
    password2: "{{ password2 }}"

1 个答案:

答案 0 :(得分:0)

我创建了以下剧本

---
- hosts: localhost
  roles:
    - parent
  tasks:
- name: Importing child01 playbook
  import_playbook: child01.yml
...

然后我运行以下命令:

 ansible-playbook -e "pass1=blah" ./import.yml

父角色和child01剧本都只有一条调试语句,显示pass1的值。我得到的输出如下:

PLAY [localhost] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [parent : Parent task 1] **************************************************
ok: [localhost] => {
    "pass1": "blah"
}

PLAY [localhost] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [child01 : Child 1 first task] ********************************************
ok: [localhost] => {
    "pass1": "blah"
}

PLAY RECAP *********************************************************************
localhost                  : ok=4    changed=0    unreachable=0    failed=0

因此,不能包括使用vars_prompt或vars,但可以在命令行中传递。也许这可以为您工作?