我正在尝试使用Ansible将一些JSON附加到现有~/.docker/config.json
文档中。
文档1 ~/.docker/config.json
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "supercalifragilistic"
}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/18.03.0-ce (windows)"
}
}
文档2 credHelper.json
{
"credHelpers": {
"111111111111.dkr.ecr.us-east-1.amazonaws.com" : "ecr-login"
}
}
我已经花了一些时间jq
,但无法正常工作。这是jq的结果。
jq -s '.' credHelpers.json config.json
[
{
"credHelpers": {
"111111111111.dkr.ecr.us-east-1.amazonaws.com": "ecr-login"
}
},
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "supercalifragilistic"
}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/18.03.0-ce (windows)"
}
}
]
我想要的是这个
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "supercalifragilistic"
}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/18.03.0-ce (windows)"
},
"credHelpers": {
"111111111111.dkr.ecr.us-east-1.amazonaws.com": "ecr-login"
}
}
我希望我也能使这个幂等,因此合并/联接不会在每次运行剧本时都递归地发生。
答案 0 :(得分:1)
这是您要查找的代码吗?
- set_fact:
doc1: "{{ lookup('file', 'config.json') }}"
doc2: "{{ lookup('file', 'credHelper.json') }}"
- debug: msg="{{ doc1 | combine(doc2) }}"
TASK [debug] **********************************************************
ok: [localhost] => {
"msg": {
"HttpHeaders": {
"User-Agent": "Docker-Client/18.03.0-ce (windows)"
},
"auths": {
"https://index.docker.io/v1/": {
"auth": "supercalifragilistic"
}
},
"credHelpers": {
"111111111111.dkr.ecr.us-east-1.amazonaws.com": "ecr-login"
}
}
}
答案 1 :(得分:1)
只需完成图片,jq
,也可以add
两个json文件,也可以做到这一点:
jq -s 'add' credHelpers.json config.json
add
过滤器将一个数组作为输入,并产生与jq
documentation says相加的数组元素作为输出。另外,您需要使用--slurp/-s
命令行选项,该选项会将整个输入流变成一个大数组,并只运行一次过滤器。