我有一个类似下面的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或任何解析器/工具来做到这一点?非常感谢您的帮助。
答案 0 :(得分:1)
使用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=$1 '/log_group_name:/ { split(lognam,arry,",");for (i in arry) { printf "\t- log_group_name: \"%s\"\n",arry[i] } } !/log_group_name:/ { print $0 }' elastic
我们传入一个变量,例如“我的应用程序1,我的应用程序2”。然后,脚本依次将变量作为变量lognam传递给awk。对于所有与模式不匹配“ log_group_name:”的字符串,只需打印该行,否则,将变量lognam拆分为一个以“,”分隔的名为arry的数组,然后遍历该数组,并打印以制表符和“-”为前缀的数组的内容log_group_name:“