Regola Linter - niente uscite hardcodate

Questa regola trova dichiarazioni di output che utilizzano valori letterali codificati rigidamente invece delle variabili esportate.

Annotazioni

Questa regola è disattivata di default. Cambia il livello inbicepconfig.json per attivarlo.

Codice regola Linter

Usare il valore seguente nel file di configurazione Bicep per personalizzare le impostazioni delle regole:

no-hardcoded-outputs

Soluzione

Quando un output restituisce una costante codificata in modo rigido — invece di un valore calcolato o a tempo di esecuzione — quella costante è meglio espressa come una variabile esportata. Le variabili esportate possono essere importate direttamente da altri file Bicep, rendendo l'intento più chiaro ed evitando implementazioni inutili solo per recuperare un valore fisso.

I seguenti tipi di valori di output attivano questa regola: letterali stringa, letterali interi, letterali booleani, nulli, array e oggetti dove ogni elemento è un valore letterale.

Gli output che fanno riferimento ai parametri, usano interpolazione di stringhe con un parametro o chiamano funzioni non attivano questa regola.

Il seguente esempio fallisce questo test perché l'output restituisce un letterale di stringa:

output apiVersion string = '2024-01-01'

Puoi risolvere sostituendo l'output con una variabile esportata:

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

Anche il seguente esempio fallisce questo test perché ogni elemento nell'array e ogni valore di proprietà nell'oggetto è un letterale:

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
  ]
}

Puoi risolvere questi problemi convertendo ogni output in una variabile esportata:

@export()
var stringValue = 'literal'

@export()
var intValue = 42

@export()
var boolValue = true

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

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

Il seguente esempio supera questo test perché gli output fanno riferimento ai parametri o usano espressioni:

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 per creare automaticamente una variabile esportata con lo stesso nome e rimuovere l'output codificato fisso. Se il nome della variabile è in conflitto con una dichiarazione esistente, la soluzione rapida aggiunge un numero al nome della variabile.

Importare costanti esportate da altri file

Una volta convertito un output codificato in una variabile esportata, altri file Bicep possono importarlo direttamente usando l'istruzioneimport. Questo evita di dover distribuire il modulo solo per leggere un valore costante.

Il seguente esempio definisce costanti in un file condiviso constants.bicep :

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

@export()
var maxRetries = 3

Un altro file Bicep può importare direttamente quelle costanti:

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
  }
}

Per ulteriori informazioni, vedi Importa tipi di dati definiti dall'utente, variabili e funzioni.

Passaggi successivi

Per ulteriori informazioni su linter, vedere Usare linter di Bicep.