【问题标题】:YAML regex to use after a character在字符后使用的 YAML 正则表达式
【发布时间】:2021-07-30 21:01:52
【问题描述】:

我有一个 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 创建一个变量,然后用datacenterName-TEST-GENERALdatacenterName-Environment-General 填充ClusterName?也许创建一个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 并转换为子网掩码吗?

【问题讨论】:

    标签: ansible yaml


    【解决方案1】:

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

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

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

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

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

    与在您的任务中使用 RegEx 相比,此方法首选,因为它提高了整个剧本的可读性,而不是使用像 positive lookahead 这样的复杂 RegEx。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-09
    • 2015-08-22
    • 1970-01-01
    • 2021-02-03
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    相关资源
    最近更新 更多