Quantcast
Viewing all articles
Browse latest Browse all 521

yq traverse complex values and convert to json file

I have a complex yaml and want to extract information from it using bash script.

The yaml is like:

content:  images:    sha256:4c8b96d4fffdfae29258d94a22ae4ad1fe36139d47288b8960d9958d1e63a9d0:      annotations:        kbld.carvel.dev/id: index.docker.io/dkalinin/k8s-simple-app        kbld.carvel.dev/origins: |          - resolved:              tag: latest              url: index.docker.io/dkalinin/k8s-simple-app      image: image1      imageType: Image      layers:      - digest: sha256:8ece9ac45f2b7228b2ed95e9f407b4f0dc2ac74f93c62ff1156f24c53042ba54      origin: index.docker.io/dkalinin/k8s-simple-app@sha256:4c8b96d4fffdfae29258d94a22ae4ad1fe36139d47288b8960d9958d1e63a9d0    sha256:4c8b96d4fffdfae29258d94a22ae4ad1fe36139d47288b8960d9958d1e63a9d1:      annotations:        kbld.carvel.dev/id: index.docker.io/dkalinin/k8s-simple-app        kbld.carvel.dev/origins: |          - resolved:              tag: latest              url: index.docker.io/dkalinin/k8s-simple-app      image: image2      imageType: Image      layers:      - digest: sha256:8ece9ac45f2b7228b2ed95e9f407b4f0dc2ac74f93c62ff1156f24c53042ba54      - digest: sha256:8ece9ac45f2b7228b2ed95e9f407b4f0dc2ac74f93c62ff1156f24c53042ba5h      - digest: sha256:8ece9ac45f2b7228b2ed95e9f407b4f0dc2ac74f93c62ff1156f24c53042ba6u      origin: index.docker.io/dkalinin/k8s-simple-app@sha256:4c8b96d4fffdfae29258d94a22ae4ad1fe36139d47288b8960d9958d1e63a9d0    sha256:4c8b96d4fffdfae29258d94a22ae4ad1fe36139d47288b8960d9958d1e63a9d2:      annotations:        kbld.carvel.dev/id: index.docker.io/dkalinin/k8s-simple-app        kbld.carvel.dev/origins: |          - resolved:              tag: latest              url: index.docker.io/dkalinin/k8s-simple-app      image: image3      imageType: Image      layers:      - digest: sha256:8ece9ac45f2b7228b2ed95e9f407b4f0dc2ac74f93c62ff1156f24c53042ba54      origin: index.docker.io/dkalinin/k8s-simple-app@sha256:4c8b96d4fffdfae29258d94a22ae4ad1fe36139d47288b8960d9958d1e63a9d0

The expected result is:

{"image1": ["8ece9ac45f2b7228b2ed95e9f407b4f0dc2ac74f93c62ff1156f24c53042ba54"], "image2":   ["8ece9ac45f2b7228b2ed95e9f407b4f0dc2ac74f93c62ff1156f24c53042ba54", "8ece9ac45f2b7228b2ed95e9f407b4f0dc2ac74f93c62ff1156f24c53042ba5h", "8ece9ac45f2b7228b2ed95e9f407b4f0dc2ac74f93c62ff1156f24c53042ba6u"], "image3":   ["8ece9ac45f2b7228b2ed95e9f407b4f0dc2ac74f93c62ff1156f24c53042ba54"]}

The key image1, image2, image3 are the .content.images.image value.

The value is the sha256 part of all digests in the Layers as a string list.

What I tried is to first get all keys using images=$(yq -r '.content.images | keys' file)Then traverse the values using each key. But failed to traverse the values since the value is a complex one. Is there any simpler way to achieve this?

I'm using Go yq


Viewing all articles
Browse latest Browse all 521

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>