覆盖字典中的一个变量



序言:我意识到这个问题是Ansible。 覆盖单个字典键非常相似,但它并不相同,那里的答案都没有回答我的特定问题或适用于我的用例。

我正在尝试安装Dataverse,它提供了一个可识别的角色(https://github.com/IQSS/dataverse-ansible(。我正在将它与多个其他角色一起使用。

roles/dataverse-ansible/defaults/main.yml中有变量,例如:

dataverse:                                                                                                                              
adminpass: admin1                                                                                                                     
allow_signups: true                                                                                                                   
glassfish:
user: payara
logformat: ulf
siteurl:

综上所述,我只想重新定义dataverse.glassfish.siteurl.所以我试图插入我的group_vars/all

dataverse.glassfish.siteurl: "my_site_address"

但是,这dataverse.glassfish.siteurl空的。

从上面的问题中,我发现我可以在我的group_vars/all中陈述以下内容

dataverse:                                                                                                                              
glassfish:                                                                                                                            
siteurl: "my_site_address"       

并在我的ansible.cfg中陈述hash_behaviour=merge,它有效,但这种做法似乎不受欢迎。

我的问题是:覆盖这些变量的首选方法是什么。如果可能的话,我不想更改上游角色代码,所以请不要说重新定义roles/dataverse-ansible/defaults/main.yml在其中包含siteurl: {{user_defined_site_url}}

- set_fact:
dataverse: >-
{%- set _ = dataverse.glassfish.update({
"siteurl": user_defined_site_url}) -%}
{{ dataverse }}

其中set _ =部分是因为 Ansible 显然禁用了do动词,因此分配给任何内容是在 jinja2 模板中具有副作用的操作的唯一方法

最新更新