Ansible中如何将计算变量赋值给另一yml文件定义的字典属性
问题原因
你编写的my_dict.variable3: "{{ new_variable3 }}"写法会被配置工具识别为一个完整的独立变量名,而变量名不允许包含.字符,因此触发命名规则报错,这种写法不能直接用于给嵌套字典的子键赋值。
正确实现方式
根据使用场景不同,有两种常用解决方案:
方案1:直接写嵌套YAML结构
如果是在变量文件中直接覆盖取值,按照字典本身的层级结构书写即可:
my_dict: variable3: "{{ new_variable3 }}"
注意:如果你的配置工具默认开启了字典合并规则,该写法只会更新
variable3的取值,保留my_dict下原有variable1、variable2的取值;如果未开启合并,会直接覆盖整个my_dict,丢失其他子键。
方案2:使用combine过滤器(适用于Ansible等配置工具的运行时修改)
如果是在playbook运行过程中动态修改,且需要确保不丢失原有字典的其他字段,使用combine过滤器实现局部更新:
- name: 更新my_dict的variable3取值 set_fact: my_dict: "{{ my_dict | combine({'variable3': new_variable3}) }}"
该写法会将新的variable3值合并到原有my_dict中,其他子键的取值完全保留。
内容的提问来源于stack exchange,提问作者hago
相关产品推荐
相关产品推荐

