我已经下载了我的gcloud配置作为json(与gcloud配置配置列表——format=json)。然后我从返回的集合中挑选了一个配置,并更新了我想要的json中的所有功能/标志,并保存为文件。现在我想用这个更新的JSON文件创建一个新的配置,我该怎么做呢?提前感谢!
请彻底测试;改进欢迎
要求:jq
- filter by (configuration)
name=="foo"
- 将
.properties
对象转换为数组{"key":.., "value":[...]}
- 映射到
{"section":...,"properties"...}
将值转换为数组并过滤null
- 映射结果
{"section":...,"properties":{"key":...,"value":...}
- 转换成
gcloud config set {section}/${properties[key]} ${properties[value]}
- 将数组作为字符串列表返回
注意应该有一种方法可以用单个
map
来做到这一点:捕获section
值,然后为每个属性键:值对(其中value !=null
)发出gcloud config set
命令
FILTER='.[]
|select(.name=="foo")
|.properties|to_entries
|map(
{
"section": .key,
"properties":.value|to_entries|.[]|select(.value!=null)
}
)
|map(
"gcloud config set "+.section+"/"+.properties["key"]+" "+.properties["value"]
)
|.[]'
# Or cat /path/to/your/saved.json
gcloud config configurations list --format=json
| jq -r "${FILTER}"
示例:https://jqplay.org/s/ZO_6urQma8
您可以将输出管道放入脚本中,并在运行之前检查脚本。
我假设您在一个类unix机器上,并且您的配置存储在~/.config/gcloud/configurations
中。
我还假设您通过运行类似于以下的代码创建了原始JSON输出,然后在适当的位置编辑文件:
gcloud config configurations activate SOME_CONFIG
gcloud config list --format=json > newconfig.json
首先,创建想要填充的新配置:
gcloud config configurations create newconfig
您可以通过运行
确认该文件已创建:ls ~/.config/gcloud/configurations/config_newconfig
接下来,使用这个隐藏命令将JSON文件转换为配置格式,并覆盖配置文件:
gcloud meta list-from-json newconfig.json --format=config > ~/.config/gcloud/configurations/config_newconfig
您可以通过运行
来确认事情是否如预期的那样。gcloud config configurations activate newconfig
gcloud config list