根据不同的值更改键值
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
我有以下 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