在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中,我试图使用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