我正在使用Cloudcustodian作为云遵从工具。
为了使用最佳实践,我希望在部署所述策略时将策略分离,并将它们合并到一个管道中。
假设我有两个策略文件:shutdown.yml和logs.yml。只提供示例内容,而不是实际的云托管策略。
shutdown.yml:
policies:
- name: start-ec2-office-hours
resource: ec2logs.yml:
policies:
- name: logs-retention-period
resource: log-group我怎么才能把那些文件合并到最后
policies:
- name: start-ec2-cologne-office-hours
resource: ec2
- name: logs-retention-period
resource: log-group我当然试过
cat *.yml > test.yml但是我的结果是policies被复制了,这是一个问题。
是否有任何方法可以使用yq或其他(轻型)工具来执行此操作?
编辑-它似乎回答从尼安大部分做的技巧。
我实际拥有的是.yml.j2文件,如
logs.yml.j2
policies
- name: cloudwatch-set-log-group-retention
resource: log-group
actions:
- type: retention
days: {{ CWLogGroupRetentionPeriod.dev }}
days: 7shutdown.yml.j2
policies:
- name: start-ec2office-hours
resource: ec2
filters:
- type: onhour
weekends: {{ OfficeHours.weekends }}
tag: Schedule
default_tz: cet
onhour: {{ OfficeHours.hour_start }}这给了我一些奇怪的days: {? {CWLogGroupRetentionPeriod.dev: ''} : ''}
$> yq ea '. as $item ireduce({}; . *+ $item)' *.yml.j2
policies:
- name: cloudwatch-set-log-group-retention
resource: log-group
actions:
- type: retention
days: {? {CWLogGroupRetentionPeriod.dev: ''} : ''}
days: 7
- name: start-ec2-office-hours
resource: ec2
filters:
- type: onhour
weekends: {? {OfficeHours.weekends: ''} : ''}
tag: Schedule发布于 2022-07-13 14:37:24
使用mikefarah/yq,即yq的Go实现,任务非常直接。它有操作符来合并来自多个文件、合并所有文件和使用追加数组选项的对象。
yq ea '. as $item ireduce({}; . *+ $item)' shutdown.yml logs.yml在4.25.3版上进行测试
发布于 2022-07-13 17:01:28
为了记录在案,下面是使用另一个yq工具kislyuk/yq的替代方法
yq -y '.policies += input.policies' shutdown.yml logs.ymlpolicies:
- name: start-ec2-office-hours
resource: ec2
- name: logs-retention-period
resource: log-group在版本yq 3.0.2上进行测试
https://stackoverflow.com/questions/72967730
复制相似问题