根据不同的值更改键值

Change a key values based on a different value

我有以下 YAML 文件:

affinityCookieTtlSec: 0
backends:
- balancingMode: UTILIZATION
  capacityScaler: 0.0
  group: https://www.googleapis.com/compute/v1/projects/production/regions/us/instanceGroups/prod-instance-service-green
  maxRatePerInstance: 900.0
  maxUtilization: 0.8
- balancingMode: UTILIZATION
  capacityScaler: 1.0
  group: https://www.googleapis.com/compute/v1/projects/production/regions/us/instanceGroups/prod-instance-service-blue
  maxRatePerInstance: 900.0
  maxUtilization: 0.8

使用yq,我想根据group值更改capacityScaler值,例如: 如果 group 等于 https://www.googleapis.com/compute/v1/projects/production/regions/us/instanceGroups/prod-instance-service-green,请将同一列表中的 capacityScaler 更改为 0.5。 所以输出应该是:

affinityCookieTtlSec: 0
backends:
- balancingMode: UTILIZATION
  capacityScaler: 0.5
  group: https://www.googleapis.com/compute/v1/projects/production/regions/us/instanceGroups/prod-instance-service-green
  maxRatePerInstance: 900.0
  maxUtilization: 0.8
- balancingMode: UTILIZATION
  capacityScaler: 1.0
  group: https://www.googleapis.com/compute/v1/projects/production/regions/us/instanceGroups/prod-instance-service-blue
  maxRatePerInstance: 900.0
  maxUtilization: 0.8

到目前为止,我想我可以按 yq e '.backends[0]yq e '.backends[1] 列出列表,但我无法按 group select 正确的列表值。

根据您在问题中显示的语法,我假设您使用的是 mikefarah/yq

它的 DSL 与 jq 几乎相似,因此您可以使用 select 运算符选择正确的记录并使用 |= 更新所需的值

yq e '(.backends[] | select(.group == "https://www.googleapis.com/compute/v1/projects/production/regions/us/instanceGroups/prod-instance-service-green").capacityScaler) |= 0.5' yaml