Dictionary 重写字典中的一个变量

Dictionary 重写字典中的一个变量,dictionary,ansible,Dictionary,Ansible,前言:我意识到这个问题非常相似,但它并不相同,没有一个答案回答了我的具体问题,也没有一个答案适用于我的用例 我正在尝试安装Dataverse,它提供了一个ansible角色()。我在多个其他角色中使用它 角色/dataverse ansible/defaults/main.yml中有如下变量: dataverse:

前言:我意识到这个问题非常相似,但它并不相同,没有一个答案回答了我的具体问题,也没有一个答案适用于我的用例

我正在尝试安装Dataverse,它提供了一个ansible角色()。我在多个其他角色中使用它

角色/dataverse ansible/defaults/main.yml
中有如下变量:

dataverse:                                                                                                                              
  adminpass: admin1                                                                                                                     
  allow_signups: true                                                                                                                   
  glassfish:
    user: payara
    logformat: ulf
    siteurl:
从上面,我只想重新定义
dataverse.glassfish.siteurl
。因此,我尝试在我的
组中插入变量/all

 dataverse.glassfish.siteurl: "my_site_address"
但是,这使得
dataverse.glassfish.siteurl
为空

从上面的问题中,我发现我可以在我的
组\u vars/all

dataverse:                                                                                                                              
  glassfish:                                                                                                                            
    siteurl: "my_site_address"       
在我的
ansible.cfg
中声明
hash\u behavior=merge
,它是有效的,但这种做法似乎不受欢迎

我的问题是:覆盖这些变量的首选方法是什么。如果可能的话,我不想更改上游角色代码,因此请不要说重新定义
角色/dataverse ansible/defaults/main.yml
以使
siteurl:{{user\u defined\u site\u url}}}

-set\u-fact:
dataverse:>-
{%-set{=dataverse.glassfish.update({
“站点url”:用户定义的站点url})-%}
{{dataverse}}

其中,
set=
部分是因为ansible显然禁用了动词,因此赋值为nothing是在jinja2模板中产生副作用的动作的唯一方法。。。如果这是首选的方式,我可能会选择不赞成的hash_behavior=merge…欢迎您这样做;出于您的考虑,这样的全局更改会影响与VAR的所有交互,而这会影响一个任务