【发布时间】:2018-08-13 12:40:43
【问题描述】:
我在剧本中经常使用默认变量,我希望在剧本定义之前定义一个带有默认变量的字典,如下例所示:
# Playbook defaults
vars: &default_vars
servicename: "{{ job.params.servicename }}"
core_site: "{{cluster.config['core-site']}}"
hdfs_site: "{{cluster.config['hdfs-site']}}"
yarn_site: "{{cluster.config['yarn-site']}}"
mapred_site: "{{cluster.config['mapred-site']}}"
# ....
# Playbook
- name: Install and Configure Namenode
hosts: HDFS.Namenode
gather_facts: no
vars:
<<: *default_vars
componentname: Namenode
roles:
- role: roles/hadoop
但似乎根据 YAML 语法,我无法在顶层同时定义 dict 和 list 。 如何在 Ansible Playbook 之前定义默认 vars 锚点?
【问题讨论】:
-
什么“顶级列表”?在您的代码中看不到任何内容,也无法想象您的意思,
vars始终是字典。 -
@techraf,我的意思是,如果我将 YAML 作为列表启动(就像任何其他剧本一样),那么它就是顶层的列表。如果我将 YAML 作为字典启动,那么它就是字典。我不能在同一个 yaml 文件中混合 dict 和 list 定义。我在这里尝试过 - yaml-online-parser.appspot.com,但后来我得到了类似“预期
,但发现'-'”的东西,这很明显,因为列表不能跟随 dict。