可靠的扩展var列表,而不是覆盖

问题描述 投票:0回答:1
default/main.yml

中的默认属性列表

hdfs_namenode_properties: - { name: "dfs.permissions.superusergroup", value: "hadoop" } - { name: "dfs.namenode.name.dir", value: "/media/persistent0" }

但是,当我在我的
hdfs_namenode_properties

中定义自己的

site.yml
时,默认值就被覆盖了。
- name: set up cluster master
  hosts: masters
  vars:
    hdfs_namenode: "True"
    hdfs_namenode_properties:
      - { name: 'dfs.permissions.enabled', value: 'false' }
  roles:
    - azavea.hdfs

模板,在属性列表上迭代的模板是

<?xml version="1.0" encoding="UTF-8"?> <configuration> {% for property in hdfs_namenode_properties -%} <property> <name>{{ property.name }}</name> <value>{{ property.value }}</value> </property> {% endfor -%} </configuration>

有一种方法可以合并这两个列表吗? 

或以不同的方式提出它,我如何访问默认值,以便我可以做类似的事情。

hdfs_namenode_properties: "{{ <<default_namenode_properties>> + { name: 'dfs.permissions.enabled', value: 'false' } }}"

VAR替代是默认的Ansible行为。您可以通过在ansible.cfg文件中更改
ansible jinja2
1个回答
2
投票
来更改此行为。

Source:

可言文档
A Anhother您可以这样做的方法是使用

default

jinja2滤波器,因此您不会通过执行类似的操作来定义role/yourrole/defaults中的默认值,而是直接在模板中定义默认值(模板文件只是一个示例,我不确定HDFS Namenode conf的结构化):

# file: yourrole/templates/template.j2 [hdfs_namenode] name: {{ hdfs_namenode_properties.name | default("dfs.permissions.superusergroup") }}

尽管如此,即使是一个空的dict(
hdfs_namenode_properties

	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.