剧本中的文本处理

Text processing in a playbook

我正在编写一个 ansible 剧本来开始我们的配置过程,我正在接受用户输入的一些变量,包括主机名和 ip。一旦我有了 ip,我就可以计算出我需要提供给 Cobbler 的网关,但我似乎无法弄清楚如何在 ansible 剧本的限制内将 ip 变成网关。看起来这应该是可能的,但我只是没有看到它。

实际上,到目前为止我想出的唯一解决方案是使用模板创建一个本地文件(这似乎允许比过滤器更复杂的模板)然后使用 local_action 来执行它文件。但是有没有更好的方法呢?

如果您需要做的只是将 192.168.123.234 更改为 192.168.1.1,那么以下内容将起作用:

vars:
  ip: '192.168.123.234'

tasks:
- local_action: shell echo {{ ip }} | sed -e 's/\.[0-9]*.[0-9]*.$/.1.1/'
  register: result

- local_action: debug msg={{ result.stdout }}

它有点丑,但它完成了工作。