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