如何使用变量作为索引遍历Ansible中的list列表
结论
原生YAML本身是静态序列化格式,不直接支持用变量作为索引动态取列表值。但如果是在支持模板解析的上层工具/运行环境中使用YAML,完全可以实现你要的动态索引、循环遍历效果。
常见场景的实现方式
- Ansible Playbook场景
用Jinja2模板语法的方括号包裹索引变量即可取值,循环遍历也可以直接针对列表操作:# 直接遍历列表输出所有值 - name: 打印列表所有元素 debug: msg: "{{ item }}" loop: "{{ your_list }}" # 用自定义变量作为索引取值 - name: 按变量索引取对应值 debug: msg: "{{ your_list[my_index_var] }}" vars: my_index_var: 1 # 这个变量可以是任意动态生成的整数 - Helm/K8s YAML模板场景
用Go模板的index方法实现变量索引取值,循环用range关键字:{{ range $idx, $value := .Values.your_list }} # 索引{{ $idx }}对应值为{{ $value }} - name: demo-{{ $idx }} image: alpine {{ end }} # 单独用变量索引取值写法 {{ $my_index := 2 }} 对应值为:{{ index .Values.your_list $my_index }} - 其他支持模板渲染的场景
只要是用Jinja2、Nunjucks、EJS等模板引擎渲染YAML,统一都支持列表变量[索引变量]的写法实现动态取值,和高级编程语言的用法基本一致。
内容的提问来源于stack exchange,提问作者kkpareek
相关产品推荐
相关产品推荐

