Ansible如何从正斜杠分隔的字符串中提取指定值
你当前代码的问题在于:tail -n 1 取的是name字段按/分割后的最后一段内容,也就是操作ID 6109567339060002816,和你需要的数据集ID位置不符。
正确实现方案
以下几种方案都可以实现需求,你可以根据实际场景选择:
方法1:固定索引取值
如果name字段的路径结构固定为projects/<项目ID>/locations/<区域>/datasets/<数据集ID>/operations/<操作ID>,直接取分割后下标为5的元素即可:
- name: 获取dataset id debug: msg : "{{ datasetInfo.json.name.split('/')[5] }}"
方法2:动态定位取值(兼容性更强)
如果担心后续路径层级发生变化,可以先定位到datasets字段的位置,再取下一位的取值,不受前后层级数量变化影响:
- name: 获取dataset id debug: msg : "{{ datasetInfo.json.name.split('/')[datasetInfo.json.name.split('/').index('datasets') + 1] }}"
方法3:正则匹配提取
也可以通过正则表达式直接匹配datasets后的数字ID:
- name: 获取dataset id debug: msg : "{{ datasetInfo.json.name | regex_search('datasets/(\\d+)/', '\\1') | first }}"
内容的提问来源于stack exchange,提问作者quicksilver
相关产品推荐
相关产品推荐

