Quantcast
Channel: Active questions tagged jq - Stack Overflow
Viewing all articles
Browse latest Browse all 527

transforming pvclaims into configmaps using jq

$
0
0

Here is my input:

{"apiVersion": "apps/v1","kind": "Deployment","spec": {"template": {"spec": {"containers": [          {"volumeMounts": [              {"mountPath": "/var/www/html","name": "shared"              },              {"mountPath": "/var/www/html/LocalSettings.d/LocalSettings.override.php","name": "movies-wikibase-claim1"              },              {"mountPath": "/var/www/html/img/wikibase_logo.png","name": "movies-wikibase-claim2"              }            ]          }        ],"volumes": [          {"name": "shared","persistentVolumeClaim": {"claimName": "shared"            }          },          {"name": "movies-wikibase-claim1","persistentVolumeClaim": {"claimName": "movies-wikibase-claim1"            }          },          {"name": "movies-wikibase-claim2","persistentVolumeClaim": {"claimName": "movies-wikibase-claim2"            }          }        ]      }    }  }}

I'd like to transform any mountpath ending with an extension into a mountPath pointing to a corresponding 'configMaps' object that itself replaces the pre-existing associated 'persistentVolumeClaim'.

With this result:

    {    ..."volumeMounts": [                  {"mountPath": "/var/www/html","name": "shared"                  },                  {"mountPath": "/var/www/html/LocalSettings.d/LocalSettings.override.php","name": "movies-wikibase-localsettings-override-php","subPath": "LocalSettings.override.php"                  },                  {"mountPath": "/var/www/html/img/wikibase_logo.png","name": "movies-wikibase-wikibase-logo-png","subPath": "wikibase_logo.png"                  }                ]              }            ],"volumes": [              {"name": "shared","persistentVolumeClaim": {"claimName": "shared"                }              },              {"configMap": {"defaultMode": 420,"name": "movies-wikibase-localsettings-override-php"                },"name": "movies-wikibase-localsettings-override-php"              }              {"configMap": {"defaultMode": 420,"name": "movies-wikibase-wikibase-logo-png"                },"name": "movies-wikibase-wikibase-logo-png"              }

I've begun some stuff, but I didn't manage to achieve it:

cat movies-wikibase-deployment.json|    jq -r '((.spec.template.spec.containers[].volumeMounts[]?|select(.mountPath|test("(\\.[^.]+)$")))|={mountPath: .mountPath, name: ((.name|split("-claim")|.[0]) +"-" + (.mountPath|split("/")|last|gsub("_";"-")|gsub("\\.";"-")|ascii_downcase)), subPath: (.mountPath|split("/")|last)})|(((.spec.template.spec.containers[].volumeMounts[]?|select(.mountPath|test("(\\.[^.]+)$")).name) ) as $toto|.spec.template.spec.volumes+=[{configMap: {defaultMode: 420, name: $toto}, name: $toto}])'

EDIT: In stead of one long line of code, you could have written a slightly more readable version like:

jq -r '(         (.spec.template.spec.containers[].volumeMounts[]?|          select(.mountPath|test("(\\.[^.]+)$")))|=          {mountPath: .mountPath, name: ((.name|split("-claim")|.[0]) +"-" + (.mountPath|split("/")|last|gsub("_";"-")|gsub("\\.";"-")|ascii_downcase)), subPath: (.mountPath|split("/")|last)}       )|        (         ((.spec.template.spec.containers[].volumeMounts[]?|select(.mountPath|test("(\\.[^.]+)$")).name) ) as $toto|         .spec.template.spec.volumes+=[{configMap: {defaultMode: 420, name: $toto}, name: $toto}])'  movies-wikibase-deployment.json

Viewing all articles
Browse latest Browse all 527

Trending Articles



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