Regla Linter - sin salidas codificadas fijas

Esta regla encuentra declaraciones de salida que usan valores literales codificados en línea dura en lugar de variables exportadas.

Nota:

Esta regla está desactivada por defecto. Cambia el nivel en bicepconfig.json para habilitarlo.

Código de regla de linter

Use el siguiente valor en el archivo de configuración de Bicep para personalizar la configuración de la regla:

no-hardcoded-outputs

Solution

Cuando una salida devuelve una constante codificada de forma fija — en lugar de un valor calculado o en tiempo de ejecución — esa constante se expresa mejor como una variable exportada. Las variables exportadas pueden importarse directamente por otros archivos Bicep, haciendo la intención más clara y evitando despliegues innecesarios solo para recuperar un valor fijo.

Los siguientes tipos de valores de salida activan esta regla: literales de cadena, literales enteros, literales booleanos, nulos, arrays y objetos donde cada elemento es un valor literal.

Las salidas que hacen referencia a parámetros, usan interpolación de cadenas con un parámetro o llaman a funciones no activan esta regla.

El siguiente ejemplo falla esta prueba porque la salida devuelve un literal de cadena:

output apiVersion string = '2024-01-01'

Puedes solucionarlo reemplazando la salida por una variable exportada:

@export()
var apiVersion = '2024-01-01'

El siguiente ejemplo también falla esta prueba porque cada elemento del array y cada valor de propiedad en el objeto es un literal:

param name string

output stringValue string = 'literal'
output intValue int = 42
output boolValue bool = true
output arrayValue array = [
  'one'
  2
]
output objectValue object = {
  first: 'one'
  nested: [
    false
  ]
}

Puedes solucionarlo convirtiendo cada salida en una variable exportada:

@export()
var stringValue = 'literal'

@export()
var intValue = 42

@export()
var boolValue = true

@export()
var arrayValue = [
  'one'
  2
]

@export()
var objectValue = {
  first: 'one'
  nested: [
    false
  ]
}

El siguiente ejemplo supera esta prueba porque las salidas hacen referencia a parámetros o utilizan expresiones:

param name string

output reference string = name
output interpolated string = 'literal-${name}'
output functionResult string = toLower('LITERAL')
output arrayWithExpression array = [
  'literal'
  name
]
output objectWithExpression object = {
  literal: 'literal'
  reference: name
}

Usa Quick Fix para crear automáticamente una variable exportada con el mismo nombre y eliminar la salida codificada en fija. Si el nombre de la variable entra en conflicto con una declaración existente, la solución rápida añade un número al nombre de la variable.

Importar constantes exportadas de otros archivos

Una vez que conviertes una salida codificada en una variable exportada, otros archivos Bicep pueden importarla directamente usando la import sentencia. Esto evita desplegar el módulo solo para leer un valor constante.

El siguiente ejemplo define constantes en un archivo compartido constants.bicep :

// constants.bicep
@export()
var apiVersion = '2024-01-01'

@export()
var maxRetries = 3

Otro archivo Bicep puede importar esas constantes directamente:

import { apiVersion, maxRetries } from './constants.bicep'

resource storageAccount 'Microsoft.Storage/storageAccounts@2025-01-01' = {
  name: 'mystorageaccount'
  location: resourceGroup().location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
  properties: {
    minimumTlsVersion: 'TLS1_2'
  }
  tags: {
    apiVersion: apiVersion
  }
}

Para más información, consulte Importar tipos de datos definidos por el usuario, variables y funciones.

Pasos siguientes

Para obtener más información acerca de linter, consulte Uso de linter de Bicep.