如何使用分隔符在 Ansible 中分割值

she*_*rri 4 python split filter jinja2 ansible

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

这里是戏

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

- debug:
    var: config
Run Code Online (Sandbox Code Playgroud)

Vla*_*tka 14

一种选择是使用split(). 下面的任务

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


    "msg": "dos-e1-south"
Run Code Online (Sandbox Code Playgroud)

要连接项目,也可以使用join(). 下面的任务给出了相同的结果

      - debug:
          msg: "{{ var2[0:3] | join('-') }}"
Run Code Online (Sandbox Code Playgroud)


Oli*_*ida 7

另一个选项是 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") }}'
Run Code Online (Sandbox Code Playgroud)

有相同的结果:

"msg": "dos-e1-south"
Run Code Online (Sandbox Code Playgroud)

正则表达式说明:

^(.*)
Run Code Online (Sandbox Code Playgroud)

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

-[^-]+$
Run Code Online (Sandbox Code Playgroud)

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

\\1
Run Code Online (Sandbox Code Playgroud)

用第一个反向引用替换字符串。