# Extract all container images from Kubernetes manifestsyq'.spec.template.spec.containers[].image'deployment.yaml
# Get all service names and portsyq'.items[] | select(.kind == "Service") | .metadata.name + ":" + (.spec.ports[0].port | tostring)'services.yaml
# Create summary reportyq'.items[] | {"name": .metadata.name, "kind": .kind, "namespace": .metadata.namespace}'resources.yaml-o=json
Caso de Uso 4: Actualizaciones Masivas en Múltiples Archivos¶
# Add label to all resourcesfind.-name"*.yaml"-execyq-i'.metadata.labels.environment = "production"'{}\;# Update image tag in all deploymentsyq-i'(.spec.template.spec.containers[].image | select(. == "*:latest")) |= sub(":latest", ":v1.2.3")'k8s/**/*.yaml
# Add annotation to specific resourcesyq-i'select(.kind == "Service") | .metadata.annotations."prometheus.io/scrape" = "true"'*.yaml
Siempre probar sin -iprimero: Ejecutar comandos sin la bandera de modificación en el lugar para previsualizar cambios antes de modificar archivos
yq'.spec.replicas = 5'deployment.yaml# Preview firstyq-i'.spec.replicas = 5'deployment.yaml# Then apply
Usar control de versiones: Confirmar archivos antes de modificaciones masivas para poder revertir fácilmente si es necesario
Entrecomillar expresiones: Usar comillas simples para expresiones para evitar la interpretación del shellbash
yq '.items[] | select(.name == "test")' file.yaml # Correct- Validar YAML después de modificaciones: Asegúrate de que tus cambios produzcan un YAML válido
yq'.'modified.yaml>/dev/null&&echo"Valid YAML"||echo"Invalid YAML"```-**Usar`select()`paraactualizacionescondicionales**:Másprecisoqueactualizartodo
```bash
yq'(select(.kind == "Deployment") | .spec.replicas) = 3'file.yaml
```-**Preservarcomentarios**:yqpreservacomentariospordefecto,perotencuidadocontransformacionescomplejas
`eval-all`-**Usar```bash
yqea'. as $item ireduce ({}; . * $item)'*.yaml
```paraoperacionesmulti-archivo**:Máseficientequeprocesararchivosporseparado
```bash
exportSECRET_KEY="..."yq'.apiKey = env(SECRET_KEY)'config.yaml
```-**Aprovecharvariablesdeentorno**:Mantenerdatossensiblesfueradelosscripts
`-r`-**Usarsalidarawparascripting**:Usar```bash
IMAGE=$(yq-r'.spec.template.spec.containers[0].image'deployment.yaml)```flagalhacerpipeaotroscomandos
`-e`-**Verificarcódigosdesalidaparavalidación**:Usar```bash
yq-e'.spec.replicas > 0'deployment.yaml&&echo"Valid"||echo"Invalid"```flagparafallarenresultadosnulos/falsos
|Problema|Solución||-------|----------||**Error:"bad file descriptor"**|Use`-i`flagcorrectlyorredirectoutput:`yq'.'file.yaml>temp&&mvtempfile.yaml`||**Changesnotpersisted**|Add`-i`flagforin-placeediting:`yq-i'.field = "value"'file.yaml`||**"null"appearsinoutput**|Fielddoesn't exist or is null. Use alternative operator: `yq '.field//"default"' file.yaml` || **Comments are removed** | Use `... comments=""` to explicitly remove, or check if using operations that don'tpreservecomments||**Arraymergereplacesinsteadofconcatenates**|Use`*+`insteadof`*`formerge:`yqea'select(fi==0) *+ select(fi==1)'f1.yamlf2.yaml`||**"Error: bad expression"**|Verificarlasintaxisdelaexpresión,asegurarquelascomillasesténcorrectas,verificarquelosoperadoresseancorrectos||**Outputhasextraquotes**|Use`-r`flagforrawoutput:`yq-r'.name'file.yaml`||**Cannotprocessmultiplefiles**|Use`ea`(eval-all)command:`yqea'.'file1.yamlfile2.yaml`||**Wrongversionofyq**|Verifyyouhavemikefarah/yq(notkislyuk/yq):`yq--version`shouldshowgithub.com/mikefarah/yq||**Permissiondeniedon`-i`**|Ensurewritepermissions:`chmodu+wfile.yaml`orrunwithappropriateprivileges||**Encodingissueswithspecialcharacters**|EnsureUTF-8encoding:`yq--encoding=utf-8'.'file.yaml`||**Largefilescausememoryissues**|Processinchunksorusestreaming:`yq-N'.items[]'large-file.yaml`||**Pathnotfounderrors**|Verifypathexists:`yq'has("path.to.field")'file.yaml`beforeaccessing||**Mergeconflictswithcomplexstructures**|Useexplicitmergestrategies:`*d`fordeepmergewithdeletion,`*+`forarrayconcatenation|## Resolución de problemas```bash
# Read valueyq'.path.to.field'file.yaml
# Update valueyq-i'.path.to.field = "new-value"'file.yaml
# Delete fieldyq-i'del(.path.to.field)'file.yaml
# Filter arrayyq'.items[] | select(.name == "target")'file.yaml
# Merge filesyqea'select(fi==0) * select(fi==1)'base.yamloverride.yaml
# Convert formatyq-o=json'.'file.yaml
# Use environment variableyq'.field = env(VAR_NAME)'file.yaml
# Multiple operationsyq-i'.field1 = "value1" | .field2 = "value2"'file.yaml