我使用以下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文件或者通常是剧本中的配置然后将变量传递到另一个剧本中的最佳方式?
答案 0 :(得分:1)
您的debug
模块没有说" 该清单是空的",它说密钥manifest.key
不存在,因为它没有。
您注册了一个名为manifest
的事实:
register: manifest
您尝试引用上述manifest
名为key
的密钥和另一个名为value
的密钥(!):
msg: "[{{ manifest.key }}]: {{ manifest.value }}"
请阅读Looping over Hashes章并确认(不使用loop control)您使用item
引用迭代变量。
请注意,对于name: manifest
和register: manifest
,您已将vars文件读入manifest.ansible_facts.manifest
。