如何在Saltstack的Jinja2模板sls文件中插入Python元组列表
解决方案
正确写法
1. 硬编码场景
直接使用YAML的Python元组类型标签即可,注意类型标签后不需要加冒号:
amount_choices: - !!python/tuple [1, '1€'] - !!python/tuple [5, '5€']
2. 动态生成场景
如果需要用Jinja2逻辑动态构造元组列表,先定义变量再通过to_yaml过滤器输出,保证类型正确:
{% set amount_choices = [(1, '1€'), (5, '5€')] %} # 可在这中间加Jinja2逻辑动态修改amount_choices amount_choices: {{ amount_choices | to_yaml }}
之前写法的错误原因
- 第一种写法
amount_choices: [(1, '1€'), (5, '5€')]:YAML默认会将括号内结构解析为嵌套列表,不会自动识别为元组,Django读取到的结构不符合choices字段要求。 - 第二种写法的问题是
!!python/tuple后多了冒号,导致YAML将类型标签识别为字典键,整体结构解析错误。 - 第三种写法仅定义了Jinja2变量,没有将变量值赋值给
amount_choices字段,因此最终读取到的值为空。
验证方法
可以在Salt节点本地执行以下命令渲染SLS文件,确认输出结构是否符合预期:salt-call sls.render_template path/to/your/init.sls
内容的提问来源于stack exchange,提问作者Benjamin_Mourgues
相关产品推荐
相关产品推荐

