在本地读取文件并在Ansible中使用远程vars

时间:2018-01-29 23:26:23

标签: ansible

我使用以下playbook在本地读取了一个YAML文件:

- name: Ensure the deploy_manifest var is defined and read deploy manifest
  hosts: localhost
  connection: local
  gather_facts: False
  tasks:
    - assert:
        that: deploy_manifest is defined
        msg: |
          Error: Must provide providers config path. Fix: Add '-e deploy_manifest=/path/to/manifest' to the ansible-playbook command

    - name: Read deploy manifest
      include_vars:
        file: "{{ deploy_manifest }}"
        name: manifest
      register: manifest

    - debug:
        msg: "[{{ manifest.key }}]: {{ manifest.value }}"
      with_dict: "{{ manifest.ansible_facts }}"

然后在我运行的同一个剧本YAML文件中:

- name: Deploy Backend services
  hosts: backend
  remote_user: ubuntu
  gather_facts: False
  vars:
    env: "{{ env }}"
    services: "{{ manifest.ansible_facts }}"
  tasks:
    - include_role:
        name: services_backend
      when: backend | default(true) | bool

然而,由于debug失败,它无效。它说清单是空的。

哪个是读取YAML文件或者通常是剧本中的配置然后将变量传递到另一个剧本中的最佳方式?

1 个答案:

答案 0 :(得分:1)

您的debug模块没有说" 该清单是空的",它说密钥manifest.key不存在,因为它没有。

  1. 您注册了一个名为manifest的事实:

    register: manifest
    
  2. 您尝试引用上述manifest名为key的密钥和另一个名为value的密钥(!):

    msg: "[{{ manifest.key }}]: {{ manifest.value }}"
    
    • 请阅读Looping over Hashes章并确认(不使用loop control)您使用item 引用迭代变量

    • 请注意,对于name: manifestregister: manifest,您已将vars文件读入manifest.ansible_facts.manifest