Funkce souborů pro Bicep

Tento článek popisuje funkce Bicep pro načítání obsahu z externích souborů.

loadDirectoryFileInfo

loadDirectoryFileInfo(directoryPath, [searchPattern])

Načte základní informace o souborech adresáře jako objekt Bicep. Funkce načítá soubory během kompilace, ne za běhu.

Obor názvů: sys.

Parametry

Parameter Povinné Typ Description
directoryPath Ano řetězec Cesta je relativní vzhledem k souboru Bicep, který tuto funkci vyvolává. Můžete použít proměnné, pokud jsou to konstanty v době kompilace, ale parametry použít ne.
searchPattern Ne řetězec Vzor hledání, který se má použít při načítání souborů. Tento vzorec může zahrnovat divoké karty.

Návratová hodnota

Pole objektů, z nichž každý představuje soubor v adresáři. Každý objekt obsahuje následující vlastnosti:

Vlastnictví Typ Description
Basename řetězec Název souboru.
přípona řetězec Přípona souboru.
relativepath (Relativní cesta) řetězec Relativní cesta k aktuální šabloně.

Examples

Následující příklad načte informace o souboru pro všechny soubory Bicep v ./modules/ adresáři.

var dirFileInfo = loadDirectoryFileInfo('./modules/', '*.bicep')

output dirFileInfoOutput object[] = dirFileInfo

Složka obsahuje pouze jeden soubor s názvem appService.bicep. Výstup je:

[{"relativePath":"modules/appService.bicep","baseName":"appService.bicep","extension":".bicep"}]

loadFileAsBase64

loadFileAsBase64(filePath)

Načte soubor jako řetězec base64.

Obor názvů: sys.

Parametry

Parameter Povinné Typ Description
Cesta k souboru Ano řetězec Cesta k souboru, který se má načíst. Cesta je relativní vzhledem k nasazeného souboru Bicep. Nemůže obsahovat proměnné.

Poznámky

Tuto funkci použijte, když chcete binární obsah zahrnout do nasazení. Místo ručního kódování souboru do řetězce base64 a přidávání do Bicep souboru načtěte soubor pomocí této funkce. Soubor se načte při kompilaci souboru Bicep do šablony JSON. Nemůžeš použít proměnné v cestě k souboru, protože kompilátor je při kompilaci do šablony nevyřeší. Během nasazování obsahuje šablona JSON obsah souboru jako pevně zakódovaný řetězec.

Tato funkce vyžaduje rozhraní příkazového řádku Bicep verze 0.4.X nebo vyšší.

Maximální povolená velikost souboru je 96 KB.

Návratová hodnota

Soubor jako řetězec base64.

Examples

Následující příklad načítá PowerShell skript jako base64 string a používá jej s rozšířením Custom Script Extension for a virtual machine (VM).

param vmName string
param location string

resource vmExtension 'Microsoft.Compute/virtualMachines/extensions@2024-07-01' = {
  name: '${vmName}/CustomScriptExtension'
  location: location
  properties: {
    publisher: 'Microsoft.Compute'
    type: 'CustomScriptExtension'
    typeHandlerVersion: '1.10'
    autoUpgradeMinorVersion: true
    forceUpdateTag: 'true'
    protectedSettings: {
      commandToExecute: 'powershell.exe -ExecutionPolicy Unrestricted -Command "iex ""& { $([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(\'${loadFileAsBase64('vm-provisioning.ps1')}\'))) } -ParamX foo -ParamY bar"""'
    }
  }
}

Note

Tento příklad nepoužívá parametr PowerShell -EncodedCommand . -EncodedCommand očekává příkaz kódovaný UTF-16LE. Tento příklad místo toho předá do PowerShellu řetězec base64 a explicitně jej dekóduje jako UTF-8 před vyvoláním skriptu.

Skriptový soubor se načte během kompilace Bicep a vloží se do generované JSON šablony jako řetězec kódovaný v base64. Když nasazení běží, PowerShell řetězec dekóduje a spustí skript na VM. Tento přístup je užitečný při přímém vkládání obsahu skriptu do commandToExecute, protože se vyhýbá mnoha problémům s citacemi, úniky a novými řádky, které mohou nastat u víceřádkového skriptu.

Můžete také zakódovat inline víceřádkový řetězec a base64() předat pojmenované parametry dekódovanému skriptu. Pro více informací viz víceřádkový stringový literál.

var scriptContent = '''
param(
  [string] $Name
)

Write-Host "Hello $Name!"
'''

var scriptArgs = {
  Name: 'MyValue'
}

// Builds a string of the form '-ArgA ValA -ArgB ValB'
var argumentString = join(map(items(scriptArgs), i => '-${i.key} ${i.value}'), ' ')

var commandToExecute = 'powershell.exe -ExecutionPolicy Unrestricted -Command "iex \\"& { $([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(\'${base64(scriptContent)}\'))) } ${argumentString}\\""'

Note

Tento příklad funguje, protože hodnota argumentu (MyValue) neobsahuje žádné speciální znaky. Jednoduchý join/map stavitel neuniká ani neuvádí hodnoty. Selže, pokud jakákoli hodnota obsahuje mezery (které musí být zabaleny do uvozovek), nebo jednoduché uvozovky, dvojité uvozovky či jiné znaky, které jsou specifické pro PowerShellův příkazový parser argumentů (který musí být ukázán pomocí replace()).

Pro kompletní příklad, který správně zpracovává booleany, celá čísla, řetězce s plným escapingem, pole a objekty, viz Vytvořte skript pro nasazení s komplexními vstupy a výstupy.

loadJsonContent

loadJsonContent(filePath, [jsonPath], [encoding])

Načte zadaný soubor JSON jako libovolný objekt.

Obor názvů: sys.

Parametry

Parameter Povinné Typ Description
Cesta k souboru Ano řetězec Cesta k souboru, který se má načíst. Cesta je relativní vzhledem k nasazeného souboru Bicep. Nemůže obsahovat proměnné.
jsonPath Ne řetězec Výraz JSONPath k určení, že se načte pouze část souboru.
kódování Ne řetězec Kódování souboru. Výchozí hodnota je utf-8. Dostupné možnosti: iso-8859-1, us-ascii, utf-16, utf-16BE, nebo utf-8.

Poznámky

Tuto funkci použijte, když máte JSON nebo minifikovaný JSON obsah, který ukládáte do samostatného souboru. Místo duplikování JSON obsahu ve vašem Bicep souboru použijte tuto funkci k načtení obsahu. Část souboru JSON můžete načíst zadáním cesty JSON. Kompilátor Bicep načte soubor při kompilaci Bicep souboru do šablony JSON. Nemůžete zahrnout proměnné do cesty k souboru, protože kompilátor je nedokáže vyřešit při kompilaci do šablony. Během nasazování obsahuje šablona JSON obsah souboru jako pevně zakódovaný řetězec.

Ve VS Code je IntelliSense dostupný pro vlastnosti načteného objektu. Můžete například vytvořit soubor s hodnotami, které se mají sdílet v mnoha souborech Bicep. Příklad je uvedený v tomto článku.

Tato funkce vyžaduje rozhraní příkazového řádku Bicep verze 0.7.X nebo vyšší.

Maximální povolená velikost souboru je 1 048 576 znaků včetně zakončení řádků.

Návratová hodnota

Obsah souboru jako libovolný objekt.

Examples

Následující příklad vytvoří soubor JSON, který obsahuje hodnoty pro skupinu zabezpečení sítě.

{
  "description": "Allows SSH traffic",
  "protocol": "Tcp",
  "sourcePortRange": "*",
  "destinationPortRange": "22",
  "sourceAddressPrefix": "*",
  "destinationAddressPrefix": "*",
  "access": "Allow",
  "priority": 100,
  "direction": "Inbound"
}

Tento soubor načtete a převedete ho na objekt JSON. Objekt slouží k přiřazení hodnot k prostředku.

param location string = resourceGroup().location

var nsgconfig = loadJsonContent('nsg-security-rules.json')

resource newNSG 'Microsoft.Network/networkSecurityGroups@2025-01-01' = {
  name: 'example-nsg'
  location: location
  properties: {
    securityRules: [
      {
        name: 'SSH'
        properties: nsgconfig
      }
    ]
  }
}

Soubor hodnot můžete znovu použít v jiných souborech Bicep, které nasazují skupinu zabezpečení sítě.

loadYamlContent

loadYamlContent(filePath, [pathFilter], [encoding])

Načte zadaný soubor YAML jako libovolný objekt.

Obor názvů: sys.

Parametry

Parameter Povinné Typ Description
Cesta k souboru Ano řetězec Cesta k souboru, který se má načíst. Cesta je relativní vzhledem k nasazeného souboru Bicep. Nemůže obsahovat proměnné.
pathFilter Ne řetězec Filtr cesty je výraz JSONPath, který určuje, že se načte pouze část souboru.
kódování Ne řetězec Kódování souboru. Výchozí hodnota je utf-8. Dostupné možnosti: iso-8859-1, us-ascii, utf-16, utf-16BE, nebo utf-8.

Poznámky

Použijte tuto funkci, když máte YAML nebo minifikovaný YAML obsah, který ukládáte do samostatného souboru. Místo duplikování YAML obsahu ve vašem Bicep souboru použijte tuto funkci k načtení obsahu. Část souboru YAML můžete načíst zadáním filtru cesty. Kompilátor Bicep načte soubor při kompilaci souboru Bicep do šablony YAML. Nemůžete zahrnout proměnné do cesty k souboru, protože kompilátor je nedokáže vyřešit při kompilaci do šablony. Během nasazování obsahuje šablona YAML obsah souboru jako pevně zakódovaný řetězec.

Ve VS Code je IntelliSense dostupný pro vlastnosti načteného objektu. Můžete například vytvořit soubor s hodnotami, které se mají sdílet v mnoha souborech Bicep. Příklad je uvedený v tomto článku.

Tato funkce vyžaduje rozhraní příkazového řádku Bicep verze 0.16.X nebo vyšší.

Maximální povolená velikost souboru je 1 048 576 znaků včetně zakončení řádků.

Návratová hodnota

Obsah souboru jako libovolný objekt.

Examples

Následující příklad vytvoří soubor YAML, který obsahuje hodnoty pro skupinu zabezpečení sítě.

description: "Allows SSH traffic"
protocol: "Tcp"
sourcePortRange: "*"
destinationPortRange: "22"
sourceAddressPrefix: "*"
destinationAddressPrefix: "*"
access: "Allow"
priority: 100
direction: "Inbound"

Tento soubor načtete a převedete ho na objekt JSON. Objekt slouží k přiřazení hodnot k prostředku.

param location string = resourceGroup().location

var nsgconfig = loadYamlContent('nsg-security-rules.yaml')

resource newNSG 'Microsoft.Network/networkSecurityGroups@2025-01-01' = {
  name: 'example-nsg'
  location: location
  properties: {
    securityRules: [
      {
        name: 'SSH'
        properties: nsgconfig
      }
    ]
  }
}

Soubor hodnot můžete znovu použít v jiných souborech Bicep, které nasazují skupinu zabezpečení sítě.

loadTextContent

loadTextContent(filePath, [encoding])

Načte obsah zadaného souboru jako řetězec.

Obor názvů: sys.

Parametry

Parameter Povinné Typ Description
Cesta k souboru Ano řetězec Cesta k souboru, který se má načíst. Cesta je relativní vzhledem k nasazeného souboru Bicep. Nemůže obsahovat proměnné.
kódování Ne řetězec Kódování souboru. Výchozí hodnota je utf-8. Dostupné možnosti: iso-8859-1, us-ascii, utf-16, utf-16BE, nebo utf-8.

Poznámky

Tuto funkci použijte, pokud máte obsah uložený v samostatném souboru. Obsah můžete načíst místo duplikování v souboru Bicep. Můžete například načíst skript nasazení ze souboru. Soubor se načte při kompilaci souboru Bicep do šablony JSON. Do cesty k souboru nemůžete zahrnout žádné proměnné, protože se při kompilaci do šablony nevyřeší. Během nasazování obsahuje šablona JSON obsah souboru jako pevně zakódovaný řetězec.

Pro načtení JSON souborů použijte funkci.loadJsonContent()

Tato funkce vyžaduje rozhraní příkazového řádku Bicep verze 0.4.X nebo vyšší.

Maximální povolená velikost souboru je 131 072 znaků, včetně zakončení řádků.

Návratová hodnota

Obsah souboru jako řetězec.

Examples

Následující příklad ukazuje, jak načíst skript ze souboru a použít ho pro deployment skript.

resource exampleScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'exampleScript'
  location: resourceGroup().location
  kind: 'AzurePowerShell'
  identity: {
    type: 'UserAssigned'
    userAssignedIdentities: {
      '/subscriptions/{sub-id}/resourcegroups/{rg-name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{id-name}': {}
    }
  }
  properties: {
    azPowerShellVersion: '14.0'
    scriptContent: loadTextContent('myscript.ps1')
    retentionInterval: 'P1D'
  }
}

Další kroky

Popis oddílů v souboru Bicep najdete v tématu Vysvětlení struktury a syntaxe souborů Bicep.