Programowe użycie Bicep za pomocą kodu JSON-RPC

Uwaga / Notatka

Polecenie jsonrpc zostało po raz pierwszy wprowadzone w Bicep w wersji 0.29.45. Parametry i format wyniku są stabilne i zgodne z poprzednimi wersjami. Nowe pola mogą zostać dodane do wyników w przyszłych wersjach, ale istniejące pola nie zostaną usunięte ani zmienione. Klienci powinni ignorować nieznane pola, aby zachować zgodność z nowszymi wersjami interfejsu wiersza polecenia Bicep.

Polecenie jsonrpc uruchamia interfejs wiersza polecenia Bicep z interfejsem JSON-RPC. Za pomocą tego interfejsu można programowo wchodzić w interakcje ze strukturą danych wyjściowych. Należy również unikać opóźnień zimnego startu podczas kompilowania wielu plików. Ta konfiguracja obsługuje kompilowanie bibliotek do interakcji z Bicep programowo.

Format przewodu

Format przewodu jest zgodny ze specyfikacjąJSON-RPC 2.0. Każdy komunikat jest rozdzielany nagłówkami, używając następującej struktury, gdzie \r i \n reprezentują znaki powrotu karetki i wiersza:

Content-Length: <length>\r\n\r\n<message>\r\n\r\n
  • <length> to długość <message> ciągu, w tym ciąg końcowy \r\n\r\n.
  • <message> to nieprzetworzona wiadomość JSON.

Aby na przykład wywołać metodę bicep/version :

Content-Length: 72\r\n\r\n{"jsonrpc": "2.0", "id": 0, "method": "bicep/version", "params": {}}\r\n\r\n

Odpowiedni wynik wygląda następująco:

Content-Length: 64\r\n\r\n{"jsonrpc": "2.0", "id": 0, "result": {"version": "0.38.5"}}\r\n\r\n

Uwaga / Notatka

Serwer JSON-RPC jest bezpieczny wątkowo, ale ponieważ żądania są multipleksowane przez jeden kanał, obowiązkiem klienta jest zapewnienie serializacji żądań. Oznacza to, że każde żądanie musi być wysyłane w całości przed wysłaniem drugiego żądania, a dla każdego żądania należy wysłać unikatowe id żądanie. Klient nie musi czekać na odpowiedź przed wysłaniem nowego żądania.

Methods

Poniższe metody są dostępne za pośrednictwem interfejsu JSON-RPC.

bicep/wersja

Zwraca wersję interfejsu wiersza polecenia Bicep.

Params

Ta metoda nie przyjmuje parametrów.

Wynik

Majątek Typ Opis
version ciąg Ciąg wersji semantycznej interfejsu wiersza polecenia Bicep (np. "0.38.5").

Przykład

Params:

{}

Wynik:

{
  "version": "0.24.211"
}

bicep/compile

Kompiluje określony .bicep plik i zwraca skompilowany kod JSON szablonu usługi ARM.

Params

Majątek Typ Opis
path ciąg Ścieżka pliku do .bicep pliku do skompilowania.

Wynik

Majątek Typ Opis
success typ logiczny (boolowski) Czy kompilacja została ukończona bez błędów.
diagnostics DiagnosticDefinition[] Diagnostyka utworzona podczas kompilacji.
contents ciąg | Null Skompilowany kod JSON szablonu usługi ARM lub null kompilacja nie powiodła się.

Przykład

Params:

{
  "path": "/path/to/main.bicep"
}

Wynik:

{
  "success": true,
  "diagnostics": [],
  "contents": "{\"$schema\": \"https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#\", ...}"
}

bicep/compileParams

Kompiluje określony .bicepparam plik. Zwraca skompilowane parametry JSON i skojarzony szablon.

Params

Majątek Typ Opis
path ciąg Ścieżka pliku do .bicepparam pliku do skompilowania.
parameterOverrides obiekt Słownik nazw parametrów do wartości JSON, które zastępują wartości domyślne określone w pliku parametrów.

Wynik

Majątek Typ Opis
success typ logiczny (boolowski) Czy kompilacja została ukończona bez błędów.
diagnostics DiagnosticDefinition[] Diagnostyka utworzona podczas kompilacji.
parameters ciąg | Null Skompilowany kod JSON parametrów usługi ARM lub null kompilacja nie powiodła się.
template ciąg | Null Skompilowany kod JSON szablonu usługi ARM, do których odwołuje się plik parametrów, lub null jeśli nie można go rozpoznać.
templateSpecId ciąg | Null Identyfikator zasobu Azure specyfikacji szablonu, jeśli plik parametrów odwołuje się do jednego; w przeciwnym razie null.

Przykład

Params:

{
  "path": "/path/to/main.bicepparam",
  "parameterOverrides": {}
}

Wynik:

{
  "success": true,
  "diagnostics": [],
  "parameters": "{\"$schema\": \"https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#\", ...}",
  "template": "{\"$schema\": \"https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#\", ...}",
  "templateSpecId": null
}

bicep/getMetadata

Zwraca metadane dotyczące określonego .bicep pliku, w tym parametry, dane wyjściowe, eksporty i dekoratory metadanych.

Params

Majątek Typ Opis
path ciąg Ścieżka pliku do .bicep pliku do analizy.

Wynik

Majątek Typ Opis
metadata MetadataDefinition[] Wpisy metadanych na poziomie pliku zadeklarowane za pomocą słowa kluczowego metadata .
parameters SymbolDefinition[] Definicje parametrów zadeklarowane w pliku Bicep.
outputs SymbolDefinition[] Definicje danych wyjściowych zadeklarowane w pliku Bicep.
exports ExportDefinition[] Wyeksportowane symbole zadeklarowane za pomocą dekoratora @export() .

Przykład

Params:

{
  "path": "/path/to/main.bicep"
}

Wynik:

{
  "metadata": [
    { "name": "description", "value": "My deployment" }
  ],
  "parameters": [
    {
      "range": { "start": { "line": 0, "char": 0 }, "end": { "line": 0, "char": 20 } },
      "name": "location",
      "type": { "range": null, "name": "string" },
      "description": "The Azure region for deployment"
    }
  ],
  "outputs": [
    {
      "range": { "start": { "line": 5, "char": 0 }, "end": { "line": 5, "char": 30 } },
      "name": "endpoint",
      "type": { "range": null, "name": "string" },
      "description": null
    }
  ],
  "exports": []
}

bicep/getDeploymentGraph

Zwraca wykres wdrożenia dla określonego .bicep pliku opisujący zasoby i ich zależności.

Params

Majątek Typ Opis
path ciąg Ścieżka pliku do .bicep pliku do analizy.

Wynik

Majątek Typ Opis
nodes Węzeł[] Węzły zasobów na grafie wdrażania.
edges Edge[] Krawędzie zależności między węzłami zasobów.

Przykład

Params:

{
  "path": "/path/to/main.bicep"
}

Wynik:

{
  "nodes": [
    {
      "range": { "start": { "line": 2, "char": 0 }, "end": { "line": 8, "char": 1 } },
      "name": "storageAccount",
      "type": "Microsoft.Storage/storageAccounts",
      "isExisting": false,
      "relativePath": null
    }
  ],
  "edges": [
    { "source": "roleAssignment", "target": "storageAccount" }
  ]
}

bicep/getFileReferences

Pobiera pełną listę ścieżek plików, do których odwołuje się kompilacja. Przydatne do określenia zestawu plików do obserwowanego pod kątem zmian.

Params

Majątek Typ Opis
path ciąg Ścieżka pliku do .bicep pliku do analizy.

Wynik

Majątek Typ Opis
filePaths string[] Ścieżki bezwzględne wszystkich plików, do których odwołuje się podczas kompilacji, w tym sam plik wejściowy, wszystkie moduły i pliki konfiguracji.

Przykład

Params:

{
  "path": "/path/to/main.bicep"
}

Wynik:

{
  "filePaths": [
    "/path/to/main.bicep",
    "/path/to/modules/storage.bicep",
    "/path/to/bicepconfig.json"
  ]
}

bicep/getSnapshot

Uwaga / Notatka

Ta metoda wymaga interfejsu wiersza polecenia Bicep w wersji 0.36.1 lub nowszej.

Tworzy migawkę wdrożenia dla danego .bicepparam pliku. Migawka zawiera wszystkie informacje potrzebne do wdrożenia w jednym samodzielnym dokumencie JSON.

Params

Majątek Typ Opis
path ciąg Ścieżka pliku do .bicepparam pliku.
metadata SnapshotMetadata Metadane wdrożenia zapewniające kontekst Azure. Wszystkie pola są opcjonalne.
externalInputs ExternalInputValue[] | Null Zewnętrzne wartości wejściowe do wstrzykiwania do migawki. Przekaż, null jeśli nie jest to konieczne.

Wynik

Majątek Typ Opis
snapshot ciąg Samodzielna migawka wdrożenia jako ciąg JSON.

Przykład

Params:

{
  "path": "/path/to/main.bicepparam",
  "metadata": {
    "tenantId": "00000000-0000-0000-0000-000000000000",
    "subscriptionId": "00000000-0000-0000-0000-000000000000",
    "resourceGroup": "myResourceGroup",
    "location": "eastus",
    "deploymentName": "myDeployment"
  },
  "externalInputs": []
}

Wynik:

{
  "snapshot": "{...}"
}

bicep/format

Uwaga / Notatka

Ta metoda wymaga interfejsu wiersza polecenia Bicep w wersji 0.37.1 lub nowszej.

Formatuje określony .bicep plik.

Params

Majątek Typ Opis
path ciąg Ścieżka pliku do .bicep pliku do formatu.

Wynik

Majątek Typ Opis
contents ciąg Sformatowany kod źródłowy Bicep.

Przykład

Params:

{
  "path": "/path/to/file.bicep"
}

Wynik:

{
  "contents": "..."
}

Types

Następujące typy są używane w danych wejściowych i wyjściowych metody.

Stanowisko

Reprezentuje pozycję opartą na zerze w pliku źródłowym Bicep.

Majątek Typ Opis
line liczba całkowita Numer wiersza na podstawie zera.
char liczba całkowita Przesunięcie znaku na podstawie zera w wierszu.

Zakres

Reprezentuje zakres w pliku źródłowym Bicep.

Majątek Typ Opis
start położenie Pozycja początkowa zakresu (włącznie).
end położenie Pozycja końcowa zakresu (wyłączna).

DiagnostykaDefinition

Reprezentuje komunikat diagnostyczny generowany podczas kompilacji lub analizy.

Majątek Typ Opis
source ciąg Źródło diagnostyki (np. "bicep" dla diagnostyki kompilatora lub nazwa reguły linter).
range Range Zakres lokalizacji źródłowej, w którym ma zastosowanie diagnostyka.
level ciąg Poziom ważności: "Error", lub "Warning""Info".
code ciąg Kod diagnostyczny identyfikujący typ diagnostyki (np. "BCP001").
message ciąg Czytelny dla człowieka komunikat diagnostyczny.

MetadataDefinition

Reprezentuje wpis metadanych na poziomie pliku zadeklarowany za pomocą słowa kluczowego metadata .

Majątek Typ Opis
name ciąg Nazwa klucza metadanych (np. "description").
value ciąg Wartość metadanych.

SymbolDefinition

Reprezentuje parametr lub symbol wyjściowy w pliku Bicep.

Majątek Typ Opis
range Range Lokalizacja źródłowa deklaracji symbolu.
name ciąg Nazwa parametru lub danych wyjściowych.
type TypeDefinition | Null Typ symbolu lub null , jeśli nie można go rozwiązać.
description ciąg | Null Opis z dekoratora @description() lub null , jeśli nie został określony.

Definicja typu

Reprezentuje odwołanie do typu dla parametru lub danych wyjściowych.

Majątek Typ Opis
range Zakres | Null Lokalizacja źródłowa odwołania do typu lub null dla typów wbudowanych.
name ciąg Nazwa typu (np. "string", "int", "object"lub nazwa typu zdefiniowanego przez użytkownika).

ExportDefinition (Definicje eksportu)

Reprezentuje wyeksportowany symbol zadeklarowany za pomocą dekoratora @export() .

Majątek Typ Opis
range Range Lokalizacja źródłowa deklaracji eksportu.
name ciąg Nazwa wyeksportowanego symbolu.
kind ciąg Rodzaj eksportu: "Type", lub "Variable""Function".
description ciąg | Null Opis z dekoratora @description() lub null , jeśli nie został określony.

Node

Reprezentuje węzeł zasobu na grafie wdrożenia.

Majątek Typ Opis
range Range Lokalizacja źródłowa deklaracji zasobu.
name ciąg Symboliczna nazwa zasobu w pliku Bicep.
type ciąg W pełni kwalifikowany typ zasobu Azure (np. "Microsoft.Storage/storageAccounts").
isExisting typ logiczny (boolowski) Czy zasób jest odwołaniem existing , a nie nowym wdrożeniem.
relativePath ciąg | Null Ścieżka względna, jeśli zasób jest zdefiniowany w module; w przeciwnym razie null.

Edge

Reprezentuje skierowaną krawędź zależności między dwoma węzłami zasobów na grafie wdrożenia.

Majątek Typ Opis
source ciąg Symboliczna nazwa zasobu zależnego.
target ciąg Symboliczna nazwa zasobu, od których zależy.

SnapshotMetadata

Udostępnia Azure kontekst wdrażania na potrzeby generowania migawek. Wszystkie pola są opcjonalne.

Majątek Typ Opis
tenantId ciąg | Null Identyfikator dzierżawy Azure Active Directory.
subscriptionId ciąg | Null Identyfikator subskrypcji Azure.
resourceGroup ciąg | Null Nazwa docelowej grupy zasobów.
location ciąg | Null Region Azure wdrożenia.
deploymentName ciąg | Null Nazwa wdrożenia.

ExternalInputValue

Reprezentuje zewnętrzną wartość wejściową do wstrzykiwania do migawki.

Majątek Typ Opis
kind ciąg Rodzaj danych wejściowych zewnętrznych (np. typ dostawcy danych wejściowych).
config dowolny | Null Opcjonalna konfiguracja JSON dla danych wejściowych zewnętrznych lub null w razie potrzeby.
value any Wartość JSON dla danych wejściowych zewnętrznych.

Użycie

Z nazwanym transportem rur

Użyj argumentu --pipe, aby przekazać nazwany potok interfejsu wiersza polecenia Bicep do nawiązania połączenia. Należy pamiętać, że proces wywołujący musi już zainicjować potok jako serwer, a Bicep interfejs wiersza polecenia połączy się jako klient.

bicep jsonrpc --pipe <named_pipe>

<named_pipe> to istniejący nazwany potok do łączenia klienta JSON-RPC z.

Przykład

Aby nawiązać połączenie z nazwanym potokiem w systemie macOS lub Linux:

bicep jsonrpc --pipe /tmp/bicep-81375a8084b474fa2eaedda1702a7aa40e2eaa24b3.sock

Aby nawiązać połączenie z nazwanym potokiem na Windows:

bicep jsonrpc --pipe \\.\pipe\\bicep-81375a8084b474fa2eaedda1702a7aa40e2eaa24b3.sock

Z transportem gniazda TCP

Użyj argumentu --socket, aby przekazać port TCP dla interfejsu wiersza polecenia Bicep do nawiązania połączenia. Należy pamiętać, że proces wywołujący musi już nasłuchiwać połączeń na porcie.

bicep jsonrpc --socket <tcp_socket>

<tcp_socket> to numer gniazda, z którym łączy się klient JSON-RPC.

Przykład

Aby nawiązać połączenie z gniazdem TCP:

bicep jsonrpc --socket 12345

Z transportem stdin/stdout

Użyj następującej składni, aby uruchomić serwer JSON-RPC z danymi żądania odebranymi za pośrednictwem narzędzia stdin i danymi odpowiedzi wysyłanymi za pośrednictwem stdout.

bicep jsonrpc --stdio

biblioteka klienta .NET

Azure.Bicep. RpcClient pakiet NuGet udostępnia bibliotekę klienta .NET dla interfejsu Bicep JSON-RPC. Może automatycznie pobrać określoną wersję interfejsu wiersza polecenia Bicep i zarządzać jej cyklem życia, aby nie trzeba było go instalować oddzielnie.

Przykład

Poniższy przykład pobiera Bicep wersję interfejsu wiersza polecenia 0.39.26, kompiluje plik Bicep i drukuje wynikowy szablon usługi ARM:

using Bicep.RpcClient;

var factory = new BicepClientFactory();
using var bicep = await factory.Initialize(new() {
    BicepVersion = "0.39.26"
});

var version = await bicep.GetVersion();
Console.WriteLine($"Bicep version: {version}");

var tempFile = Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid()}.bicep");
File.WriteAllText(tempFile, """
    param foo string
    output foo string = foo
    """);

var result = await bicep.Compile(new(tempFile));
Console.Write(result.Contents);