如何在Ansible中将lambda函数传递给regex_replace?

问题描述 投票:0回答:1

在Ansible中,我试图使用regex_replace来更新一些数字参数(例如是添加3个所有版本号:“version = 3”应该变成“version = 6”,“version = 2”应该变成“version = 5”, ...)

在Python中,我可以将lambda函数传递给re.sub,如下所示:

re.sub("version=(\d+)", lambda m: "version=" + str(int(m.group(1))+3), "version=3 blah blah blah whatever version=4")

根据需要给出了这个:

'version=6 blah blah blah whatever version=7'

似乎无法用正确的语法说服Ansible。 我试过这个:

{{ stringvariable | regex_replace('version=(\\d+)', lambda m: 'version=' + str(int(m.group(1)) + 3) }}
ansible
1个回答
0
投票

在Ansible中,我试图使用regex_replace来更新一些数字参数(例如是添加3个所有版本号:“version = 3”应该变成“version = 6”,“version = 2”应该变成“version = 5”, ...)

如果你只有一个字符串version=2并且想要发出version=5,那么就没有什么魔法需要发生:

- debug:
    msg: >-
      version={{ (stringvar | regex_replace("^version=", "") | int) + 3 }}
  vars:
    stringvar: version=2

当你有多个时,棘手的一点是:

- debug:
    msg: >-
      {% for it in (stringvars | map("regex_replace", "^version=", "") | map("int")) %}
      version={{ it + 3 }}
      {% endfor %}
  vars:
    stringvars:
    - version=2
    - version=5
    - version=7
© www.soinside.com 2019 - 2024. All rights reserved.