解析传递给 YML 的变量

Parsing variables that are passed to YML

我有一个类似于下面的 yml 文件

functionbeat.provider.aws.functions:
    - name: cloudwatch
      enabled: true
      type: cloudwatch_logs
      description: "lambda function for cloudwatch logs"
      triggers:
        - log_group_name: "my-application-1"

我希望能够在此处扩展 log_group_name 密钥。 这个想法是 log_group_name 键通过变量作为列表传递,例如

logGroups = my-application-1,my-application-2,my-application-3,my-application-4

我希望在 yml

中将其转换为
functionbeat.provider.aws.functions:
    - name: cloudwatch
      enabled: true
      type: cloudwatch_logs
      description: "lambda function for cloudwatch logs"
      triggers:
        - log_group_name: "my-application-1"
        - log_group_name: "my-application-2"
        - log_group_name: "my-application-3"
        - log_group_name: "my-application-4"

是否可以使用 shellscript 或任何 parser/tool 来做到这一点?非常感谢任何帮助。

将 bash 与 awk 一起使用:

首先将原始yaml模板放在一个名为elastic的文件中:

functionbeat.provider.aws.functions:
   - name: cloudwatch
      enabled: true
      type: cloudwatch_logs
      description: "lambda function for cloudwatch logs"
      triggers:
        - log_group_name: "my-application-1"    

然后使用以下脚本:

#!/bin/bash
awk -v lognam= '/log_group_name:/ { split(lognam,arry,",");for (i in arry) { printf "\t- log_group_name: \"%s\"\n",arry[i] } } !/log_group_name:/ { print [=11=] }' elastic

我们传入一个变量,例如“我的应用程序 1,我的应用程序 2”。然后脚本将变量作为变量 lognam 传递给 awk。对于所有不是模式匹配“log_group_name:”的字符串,只打印该行,否则,将变量 lognam 拆分为一个名为 arry 的数组,以“,”分隔,然后遍历该数组打印前缀为选项卡和“- log_group_name:“