如何使用定界符分割Ansible中的值

时间:2019-03-15 16:35:17

标签: python filter split ansible jinja2

我正在Ansible中设置一个事实,并且该变量具有连字符值,例如“ dos-e1-south-209334567829102380 ”。我想拆分,所以我只会得到“ dos-e1-south”

这是戏

- set_fact:
    config: "{{ asg.results|json_query('[*].launch_configuration_name') }}"

- debug:
    var: config

2 个答案:

答案 0 :(得分:1)

一种选择是使用 split()。下面的游戏

vars:
  var1: dos-e1-south-209334567829102380
tasks:
  - set_fact:
      var2: "{{ var1.split('-') }}"
  - debug:
      msg: "{{ var2.0 }}-{{ var2.1 }}-{{ var2.2 }}"

给予

"msg": "dos-e1-south"

答案 1 :(得分:1)

另一个选择是ansibles正则表达式过滤器,您可以在这里找到:https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#regular-expression-filters

vars:
  var: dos-e1-south-209334567829102380
tasks:
  - debug:
      msg: '{{ var | regex_replace("^(.*)-[^-]+$", "\\1") }}'

具有相同的结果:

"msg": "dos-e1-south"

正则表达式的解释:

^(.*)

从第一个反向引用中的字符串开头保留所有内容

-[^-]+$

找到最后一个“-”,后跟非“-”字符,直到字符串结尾。

\\1

使用第一个后​​向引用替换字符串。