如何通过环境变量结合yq动态提取YAML中的租户信息?
使用yq根据环境变量提取YAML中对应环境的租户列表
我想用yq工具,根据环境变量动态提取YAML文件中对应环境的租户值。假设环境变量var="az-dev",需要获取az-dev对应的租户列表。试了下面两个命令都没成功,附上相关内容求解决方案。
YAML文件内容
tenantlist: az-dev: tenants: - myazdev az-stage: tenants: - myazstg1 myazstg2 aw-dev: tenants: - myawdev1 myawdev2 aw-stage: tenants: - myawstg1 myawstg2
尝试过的命令
var="az-dev" yq e '.tenantlist | select(. == env(var))' file.txt var=az-dev; yq '.tenantlist |= strenv(var) has("az-dev")' file.txt
解决方案
你之前的命令写法有误,正确的做法是直接用环境变量作为键访问tenantlist下的对应节点,再提取tenants字段:
方法1:通过env(var)读取环境变量
var="az-dev" yq e '.tenantlist[env(var)].tenants' file.txt
方法2:通过strenv(var)读取Shell变量(适合已提前定义变量的场景)
var=az-dev; yq e '.tenantlist[strenv(var)].tenants' file.txt
执行后会输出:
- myazdev
错误原因说明
- 第一个命令里的
select(. == env(var))不适用,因为.tenantlist是键值对对象而非数组,select无法匹配到目标键; - 第二个命令语法错误,
has的用法不符合规则,且|=是赋值操作,和你提取值的需求不符。
内容的提问来源于stack exchange,提问作者jagatjyoti
相关产品推荐
相关产品推荐

