我一直在使用 yq v3 使用以下命令合并 yaml 文件。
yq m <yaml_file> <yaml_file2> <yaml_file3>
该命令按此处概述的方式工作
例如,假设我有以下 3 个 yaml 文件。
培训实验室account.yml
account:
alias: training-lab-account
orgEmail: training-lab-account@example.com
snsSubscriptions:
- training-lab-coe-aws@example.com
network:
vpcs:
- cidr: 10.253.0.0/16
snsSubscriptions:
- training-lab-coe-aws@example.com
帐户.yml
---
account:
snsSubscriptions:
- ONE_REQUIRED@example.com
orgEmail: REQUIRED
orgAccountProvisioningEnabled: true
groups:
- name: SmileAdmins
policies:
- AdministratorAccess
- name: SmileReadOnly
policies:
- ReadOnlyAccess
网络.yml
---
network:
snsSubscriptions:
- ONE_REQUIRED@example.com
vpcs:
- vpcName: Main
amiPipeline: false
accountVendingMachine: false
flowlogs: true
transitGw: false
maxAzs: 3
endpoints:
gateway:
- name: s3
- name: dynamodb
interface:
- name: ssm
当我执行时yq m training-lab-account.yml account.yml network.yml
,我得到以下输出。
account:
alias: training-lab-account
orgEmail: training-lab-account@example.com
snsSubscriptions:
- training-lab-coe-aws@example.com
orgAccountProvisioningEnabled: true
groups:
- name: SmileAdmins
policies:
- AdministratorAccess
- name: SmileReadOnly
policies:
- ReadOnlyAccess
network:
vpcs:
- cidr: 10.253.0.0/16
vpcName: Main
amiPipeline: false
accountVendingMachine: false
flowlogs: true
transitGw: false
maxAzs: 3
endpoints:
gateway:
- name: s3
- name: dynamodb
interface:
- name: ssm
snsSubscriptions:
- training-lab-coe-aws@example.com
基本上,account.yml 和 network.yml 被合并到 training-lab-account.yml 中,而不会覆盖 training-lab-account.yml 中的内容。
yq v4 不再支持“m”标志合并。其实我觉得yq@4是一个全新的软件,和yq@3完全不同。
长话短说,我正在尝试eval-all
按照此处概述的方式合并:yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' f1.yml f2.yml
不幸的是,这从 f2.yml 覆盖了 f1.yml 中的内容——这不是合并在 yq@3 中的行为方式。
由于 yq@3 已弃用,我需要升级到 yq@4。对于如何在 yq@4 中复制 yq@3 的合并功能,我将不胜感激。