jq: error: null (null) has no keys for any template without a parameters object

Abierto Apto para principiantes
#956 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
1/5
Tiempo estimado
Menos de una hora
Aptitud para principiantes
90/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
powershell
Área
ci-cd

Línea de trabajo

Comienza en src/functions/Invoke-AzOpsPush.ps1 alrededor de la línea 396 e inspecciona la instrucción jq aplicada a .parameters. Reprodúcela con una plantilla de ARM o Bicep sin parámetros y, a continuación, verifica que validation o push ya no registre el error null-keys, sin dejar de gestionar las plantillas con parámetros.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Describe the bug

Given a parameterless resource template, when attempting to push or validate the template using the AzOps pipelines, the jq statement throws an error statement in the pipeline log.
jq: error (at <stdin>:76): null (null) has no keys

This is not super critical, as the Powershell ConvertFrom-Json -AsHashtable seems to handle the error case just fine, however the error log could be interpreted as an actual fault.

Scripts in question:

Steps to reproduce

  1. A parameterless main.bicep:
var location = 'westeurope'

resource example 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: 'st${uniqueString(resourceGroup().id)}'
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}
  1. Build it and show Bicep omits parameters entirely rather than emitting {}:
$ bicep build main.bicep --outfile main.json
$ jq 'has("parameters")' main.json
false
$ jq '.parameters | with_entries(select(.value.defaultValue == null))' main.json
jq: error: null (null) has no keys

Note:
The is not a bicep specific error, and is even reproducible with the following bare-bones ARM template:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": []
}

Proposed Solution:

Add a safeguard to the jq statement, which defaults to an empty object in case .parameters does not exist:

Old: .parameters | with_entries(select(.value.defaultValue == null))
New: .parameters // {} | with_entries(select(.value.defaultValue == null))

Lenguaje dominante
PowerShell
Estrellas
420
Forks
174
Merge medio
16 d 18 h
PR fusionados (30 d)
1

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de Azure/AzOps

Todos los issues de Azure/AzOps

Issues similares

Más issues de DevOps

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.