【问题标题】:How can I pass Ansible playbook variables from a master playbook to a linked playbook?如何将 Ansible 剧本变量从主剧本传递到链接剧本?
【发布时间】:2018-09-21 16:32:29
【问题描述】:

我正在尝试找出如何将“主”剧本中定义的 Ansible 剧本变量传递到我已经在我的主剧本中引用的其他剧本中。

例如,对于下面的“主”剧本,我想将 sethostnamesetipaddress 的值传递给 playbook[1-3].yml 引用在我的任务部分。这类似于在其他编程语言中调用函数。

---
- hosts: all
  become: yes

  vars_prompt:
   - name: "sethostname"
     prompt: "What will be the machine's hostname?"
     private: no

   - name: "setipaddress"
     prompt: "What will be the machine's IP address?"
     private: no

  tasks:
    - include: playbook1.yml
    - include: playbook2.yml
    - include: playbook3.yml

【问题讨论】:

  • ①您发布的代码中没有包含剧本。您包括任务。 ②您定义的变量可用于您以这种方式包含的任务。

标签: ansible


【解决方案1】:

从 Ansible 2.4 开始,您现在可以导入 playbook,这意味着它们将在解析 playbook 时进行预处理,并按照您导入它们的顺序运行。查看文档以获取有关导入的完整信息,并在此处包含 http://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_includes.html

您可以像传递给其他 include_* 任务一样将变量传递给它们。

  tasks:
    - import_playbook: playbook1.yml
      vars:
        sethostname: "{{ sethostname }}"
        setipaddress "{{ setipaddress }}"

【讨论】:

【解决方案2】:

Kellie 的回答并不完全准确,剧本可能不会仅在剧本的最顶层导入任务级别。所以这行得通:

- import_playbook: playbook1.yml
  vars:
    sethostname: "{{ sethostname }}"
    setipaddress "{{ setipaddress }}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 2020-05-08
    • 1970-01-01
    相关资源
    最近更新 更多