首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并云托管策略的yml文件

合并云托管策略的yml文件
EN

Stack Overflow用户
提问于 2022-07-13 14:08:46
回答 2查看 52关注 0票数 0

我正在使用Cloudcustodian作为云遵从工具。

为了使用最佳实践,我希望在部署所述策略时将策略分离,并将它们合并到一个管道中。

假设我有两个策略文件:shutdown.ymllogs.yml。只提供示例内容,而不是实际的云托管策略。

shutdown.yml:

代码语言:javascript
复制
policies:

  - name: start-ec2-office-hours
    resource: ec2

logs.yml:

代码语言:javascript
复制
policies:

  - name: logs-retention-period
    resource: log-group

我怎么才能把那些文件合并到最后

代码语言:javascript
复制
policies:

  - name: start-ec2-cologne-office-hours
    resource: ec2

  - name: logs-retention-period
    resource: log-group

我当然试过

代码语言:javascript
复制
cat *.yml > test.yml

但是我的结果是policies被复制了,这是一个问题。

是否有任何方法可以使用yq或其他(轻型)工具来执行此操作?

编辑-它似乎回答从尼安大部分做的技巧。

我实际拥有的是.yml.j2文件,如

logs.yml.j2

代码语言:javascript
复制
policies

  - name: cloudwatch-set-log-group-retention
    resource: log-group
    actions:
      - type: retention
        days: {{ CWLogGroupRetentionPeriod.dev }}
        days: 7

shutdown.yml.j2

代码语言:javascript
复制
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

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2022-07-13 14:37:24

使用mikefarah/yq,即yq的Go实现,任务非常直接。它有操作符来合并来自多个文件、合并所有文件和使用追加数组选项的对象。

代码语言:javascript
复制
yq ea '. as $item ireduce({}; . *+ $item)' shutdown.yml logs.yml

在4.25.3版上进行测试

票数 1
EN

Stack Overflow用户

发布于 2022-07-13 17:01:28

为了记录在案,下面是使用另一个yq工具kislyuk/yq的替代方法

代码语言:javascript
复制
yq -y '.policies += input.policies' shutdown.yml logs.yml
代码语言:javascript
复制
policies:
  - name: start-ec2-office-hours
    resource: ec2
  - name: logs-retention-period
    resource: log-group

在版本yq 3.0.2上进行测试

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72967730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档