在字符后使用的 YAML 正则表达式

我有一个 ansible playbook,它以变量的形式引用了一些网络地址、cidr 地址以及数据中心名称和集群名称:

netName: "100-10.10.100.0/24"
networkCidr: "10.10.100.0/24"

有没有办法(正则表达式)在 100- 之前和可能在 /24 之后创建一个变量并删除?

datacenterName: "DC1"
clusterName: "DC1-TEST-GENERAL"

有没有办法只为 DC1 创建一个变量,然后用 ClusterNamedatacenterName-TEST-GENERAL 填充 datacenterName-Environment-General?也许创建一个 environment 变量并在几个不同的位置引用它?

我试图在我的 vars.yml 中减少变量,如果我可以向 yml 添加一些正则表达式,我可以消除一些。

编辑:

感谢您的回复,编辑了我的初始帖子并添加了更多内容,使其看起来比评论更清晰。

我想要得到的基本上就是这个。这是 vmWare 构建代码的网络部分:

- name: "{{ netName }}"
   ip: "{{ hostLookup.ipv4addrs[0].ipv4addr }}"
   netmask: "{{ netMask }}"
   gateway: "{{ gateWay }}"

我有一个使用 nios 和主机查找从 Infoblox 获取 IP 地址的任务。那不是问题。

这是我的变量。

netName: "100-10.10.100.0/24"
networkCidr: "10.10.100.0/24"
netMask: "255.255.254.0"

我真的只想为 netName 输入 1 个变量,然后从该变量中提取 networkCidrnetMask。我想有办法拉出 CIDR 并转换为子网掩码吗?

cherrryving 回答:在字符后使用的 YAML 正则表达式

您的两个问题都可以在不使用 RegEx 的情况下解决。

您可以使用大括号(即 {{ variable }})引用其他变量。

在您的示例中,您要查找的内容类似于:

networkCidr: "10.10.100.0/24"
netName: "100-{{ networkCidr }}"
datacenterName: "DC1"
clusterName: "{{ datacenterName }}-TEST-GENERAL"

如果您愿意,可以通过为 IP 和子网设置单独的变量来进一步拆分 CIDR,具体取决于您的需求。

这种方法优于在您的任务中使用正则表达式,因为它提高了整个剧本的可读性,而不是使用像 positive lookahead 这样的复杂正则表达式。

本文链接:https://www.f2er.com/7429.html

大家都在问