azure.confidentialledger.Ledger
Manages a Confidential Ledger.
Example Usage
using System.Collections.Generic;
using Pulumi;
using Azure = Pulumi.Azure;
return await Deployment.RunAsync(() =>
{
var current = Azure.Core.GetClientConfig.Invoke();
var example = new Azure.Core.ResourceGroup("example", new()
{
Location = "West Europe",
});
var ledger = new Azure.ConfidentialLedger.Ledger("ledger", new()
{
ResourceGroupName = example.Name,
Location = example.Location,
LedgerType = "Private",
AzureadBasedServicePrincipals = new[]
{
new Azure.ConfidentialLedger.Inputs.LedgerAzureadBasedServicePrincipalArgs
{
PrincipalId = current.Apply(getClientConfigResult => getClientConfigResult.ObjectId),
TenantId = current.Apply(getClientConfigResult => getClientConfigResult.TenantId),
LedgerRoleName = "Administrator",
},
},
});
});
package main
import (
"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/confidentialledger"
"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/core"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
current, err := core.GetClientConfig(ctx, nil, nil)
if err != nil {
return err
}
example, err := core.NewResourceGroup(ctx, "example", &core.ResourceGroupArgs{
Location: pulumi.String("West Europe"),
})
if err != nil {
return err
}
_, err = confidentialledger.NewLedger(ctx, "ledger", &confidentialledger.LedgerArgs{
ResourceGroupName: example.Name,
Location: example.Location,
LedgerType: pulumi.String("Private"),
AzureadBasedServicePrincipals: confidentialledger.LedgerAzureadBasedServicePrincipalArray{
&confidentialledger.LedgerAzureadBasedServicePrincipalArgs{
PrincipalId: *pulumi.String(current.ObjectId),
TenantId: *pulumi.String(current.TenantId),
LedgerRoleName: pulumi.String("Administrator"),
},
},
})
if err != nil {
return err
}
return nil
})
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azure.core.CoreFunctions;
import com.pulumi.azure.core.ResourceGroup;
import com.pulumi.azure.core.ResourceGroupArgs;
import com.pulumi.azure.confidentialledger.Ledger;
import com.pulumi.azure.confidentialledger.LedgerArgs;
import com.pulumi.azure.confidentialledger.inputs.LedgerAzureadBasedServicePrincipalArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var current = CoreFunctions.getClientConfig();
var example = new ResourceGroup("example", ResourceGroupArgs.builder()
.location("West Europe")
.build());
var ledger = new Ledger("ledger", LedgerArgs.builder()
.resourceGroupName(example.name())
.location(example.location())
.ledgerType("Private")
.azureadBasedServicePrincipals(LedgerAzureadBasedServicePrincipalArgs.builder()
.principalId(current.applyValue(getClientConfigResult -> getClientConfigResult.objectId()))
.tenantId(current.applyValue(getClientConfigResult -> getClientConfigResult.tenantId()))
.ledgerRoleName("Administrator")
.build())
.build());
}
}
import pulumi
import pulumi_azure as azure
current = azure.core.get_client_config()
example = azure.core.ResourceGroup("example", location="West Europe")
ledger = azure.confidentialledger.Ledger("ledger",
resource_group_name=example.name,
location=example.location,
ledger_type="Private",
azuread_based_service_principals=[azure.confidentialledger.LedgerAzureadBasedServicePrincipalArgs(
principal_id=current.object_id,
tenant_id=current.tenant_id,
ledger_role_name="Administrator",
)])
import * as pulumi from "@pulumi/pulumi";
import * as azure from "@pulumi/azure";
const current = azure.core.getClientConfig({});
const example = new azure.core.ResourceGroup("example", {location: "West Europe"});
const ledger = new azure.confidentialledger.Ledger("ledger", {
resourceGroupName: example.name,
location: example.location,
ledgerType: "Private",
azureadBasedServicePrincipals: [{
principalId: current.then(current => current.objectId),
tenantId: current.then(current => current.tenantId),
ledgerRoleName: "Administrator",
}],
});
resources:
example:
type: azure:core:ResourceGroup
properties:
location: West Europe
ledger:
type: azure:confidentialledger:Ledger
properties:
resourceGroupName: ${example.name}
location: ${example.location}
ledgerType: Private
azureadBasedServicePrincipals:
- principalId: ${current.objectId}
tenantId: ${current.tenantId}
ledgerRoleName: Administrator
variables:
current:
fn::invoke:
Function: azure:core:getClientConfig
Arguments: {}
Create Ledger Resource
new Ledger(name: string, args: LedgerArgs, opts?: CustomResourceOptions);
@overload
def Ledger(resource_name: str,
opts: Optional[ResourceOptions] = None,
azuread_based_service_principals: Optional[Sequence[LedgerAzureadBasedServicePrincipalArgs]] = None,
certificate_based_security_principals: Optional[Sequence[LedgerCertificateBasedSecurityPrincipalArgs]] = None,
ledger_type: Optional[str] = None,
location: Optional[str] = None,
name: Optional[str] = None,
resource_group_name: Optional[str] = None,
tags: Optional[Mapping[str, str]] = None)
@overload
def Ledger(resource_name: str,
args: LedgerArgs,
opts: Optional[ResourceOptions] = None)
func NewLedger(ctx *Context, name string, args LedgerArgs, opts ...ResourceOption) (*Ledger, error)
public Ledger(string name, LedgerArgs args, CustomResourceOptions? opts = null)
public Ledger(String name, LedgerArgs args)
public Ledger(String name, LedgerArgs args, CustomResourceOptions options)
type: azure:confidentialledger:Ledger
properties: # The arguments to resource properties.
options: # Bag of options to control resource's behavior.
- name string
- The unique name of the resource.
- args LedgerArgs
- The arguments to resource properties.
- opts CustomResourceOptions
- Bag of options to control resource's behavior.
- resource_name str
- The unique name of the resource.
- args LedgerArgs
- The arguments to resource properties.
- opts ResourceOptions
- Bag of options to control resource's behavior.
- ctx Context
- Context object for the current deployment.
- name string
- The unique name of the resource.
- args LedgerArgs
- The arguments to resource properties.
- opts ResourceOption
- Bag of options to control resource's behavior.
- name string
- The unique name of the resource.
- args LedgerArgs
- The arguments to resource properties.
- opts CustomResourceOptions
- Bag of options to control resource's behavior.
- name String
- The unique name of the resource.
- args LedgerArgs
- The arguments to resource properties.
- options CustomResourceOptions
- Bag of options to control resource's behavior.
Ledger Resource Properties
To learn more about resource properties and how to use them, see Inputs and Outputs in the Architecture and Concepts docs.
Inputs
The Ledger resource accepts the following input properties:
- Azuread
Based List<LedgerService Principals Azuread Based Service Principal Args> A list of
azuread_based_service_principal
blocks as defined below.- Ledger
Type string Specifies the type of Confidential Ledger. Possible values are
Private
andPublic
. Changing this forces a new resource to be created.- Resource
Group stringName The name of the Resource Group where the Confidential Ledger exists. Changing this forces a new resource to be created.
- Certificate
Based List<LedgerSecurity Principals Certificate Based Security Principal Args> A list of
certificate_based_security_principal
blocks as defined below.- Location string
Specifies the supported Azure location where the Confidential Ledger exists. Changing this forces a new resource to be created.
- Name string
Specifies the name of the Confidential Ledger. Changing this forces a new resource to be created.
- Dictionary<string, string>
A mapping of tags to assign to the Confidential Ledger.
- Azuread
Based []LedgerService Principals Azuread Based Service Principal Args A list of
azuread_based_service_principal
blocks as defined below.- Ledger
Type string Specifies the type of Confidential Ledger. Possible values are
Private
andPublic
. Changing this forces a new resource to be created.- Resource
Group stringName The name of the Resource Group where the Confidential Ledger exists. Changing this forces a new resource to be created.
- Certificate
Based []LedgerSecurity Principals Certificate Based Security Principal Args A list of
certificate_based_security_principal
blocks as defined below.- Location string
Specifies the supported Azure location where the Confidential Ledger exists. Changing this forces a new resource to be created.
- Name string
Specifies the name of the Confidential Ledger. Changing this forces a new resource to be created.
- map[string]string
A mapping of tags to assign to the Confidential Ledger.
- azuread
Based List<LedgerService Principals Azuread Based Service Principal Args> A list of
azuread_based_service_principal
blocks as defined below.- ledger
Type String Specifies the type of Confidential Ledger. Possible values are
Private
andPublic
. Changing this forces a new resource to be created.- resource
Group StringName The name of the Resource Group where the Confidential Ledger exists. Changing this forces a new resource to be created.
- certificate
Based List<LedgerSecurity Principals Certificate Based Security Principal Args> A list of
certificate_based_security_principal
blocks as defined below.- location String
Specifies the supported Azure location where the Confidential Ledger exists. Changing this forces a new resource to be created.
- name String
Specifies the name of the Confidential Ledger. Changing this forces a new resource to be created.
- Map<String,String>
A mapping of tags to assign to the Confidential Ledger.
- azuread
Based LedgerService Principals Azuread Based Service Principal Args[] A list of
azuread_based_service_principal
blocks as defined below.- ledger
Type string Specifies the type of Confidential Ledger. Possible values are
Private
andPublic
. Changing this forces a new resource to be created.- resource
Group stringName The name of the Resource Group where the Confidential Ledger exists. Changing this forces a new resource to be created.
- certificate
Based LedgerSecurity Principals Certificate Based Security Principal Args[] A list of
certificate_based_security_principal
blocks as defined below.- location string
Specifies the supported Azure location where the Confidential Ledger exists. Changing this forces a new resource to be created.
- name string
Specifies the name of the Confidential Ledger. Changing this forces a new resource to be created.
- {[key: string]: string}
A mapping of tags to assign to the Confidential Ledger.
- azuread_
based_ Sequence[Ledgerservice_ principals Azuread Based Service Principal Args] A list of
azuread_based_service_principal
blocks as defined below.- ledger_
type str Specifies the type of Confidential Ledger. Possible values are
Private
andPublic
. Changing this forces a new resource to be created.- resource_
group_ strname The name of the Resource Group where the Confidential Ledger exists. Changing this forces a new resource to be created.
- certificate_
based_ Sequence[Ledgersecurity_ principals Certificate Based Security Principal Args] A list of
certificate_based_security_principal
blocks as defined below.- location str
Specifies the supported Azure location where the Confidential Ledger exists. Changing this forces a new resource to be created.
- name str
Specifies the name of the Confidential Ledger. Changing this forces a new resource to be created.
- Mapping[str, str]
A mapping of tags to assign to the Confidential Ledger.
- azuread
Based List<Property Map>Service Principals A list of
azuread_based_service_principal
blocks as defined below.- ledger
Type String Specifies the type of Confidential Ledger. Possible values are
Private
andPublic
. Changing this forces a new resource to be created.- resource
Group StringName The name of the Resource Group where the Confidential Ledger exists. Changing this forces a new resource to be created.
- certificate
Based List<Property Map>Security Principals A list of
certificate_based_security_principal
blocks as defined below.- location String
Specifies the supported Azure location where the Confidential Ledger exists. Changing this forces a new resource to be created.
- name String
Specifies the name of the Confidential Ledger. Changing this forces a new resource to be created.
- Map<String>
A mapping of tags to assign to the Confidential Ledger.
Outputs
All input properties are implicitly available as output properties. Additionally, the Ledger resource produces the following output properties:
- Id string
The provider-assigned unique ID for this managed resource.
- Identity
Service stringEndpoint The Identity Service Endpoint for this Confidential Ledger.
- Ledger
Endpoint string The Endpoint for this Confidential Ledger.
- Id string
The provider-assigned unique ID for this managed resource.
- Identity
Service stringEndpoint The Identity Service Endpoint for this Confidential Ledger.
- Ledger
Endpoint string The Endpoint for this Confidential Ledger.
- id String
The provider-assigned unique ID for this managed resource.
- identity
Service StringEndpoint The Identity Service Endpoint for this Confidential Ledger.
- ledger
Endpoint String The Endpoint for this Confidential Ledger.
- id string
The provider-assigned unique ID for this managed resource.
- identity
Service stringEndpoint The Identity Service Endpoint for this Confidential Ledger.
- ledger
Endpoint string The Endpoint for this Confidential Ledger.
- id str
The provider-assigned unique ID for this managed resource.
- identity_
service_ strendpoint The Identity Service Endpoint for this Confidential Ledger.
- ledger_
endpoint str The Endpoint for this Confidential Ledger.
- id String
The provider-assigned unique ID for this managed resource.
- identity
Service StringEndpoint The Identity Service Endpoint for this Confidential Ledger.
- ledger
Endpoint String The Endpoint for this Confidential Ledger.
Look up Existing Ledger Resource
Get an existing Ledger resource’s state with the given name, ID, and optional extra properties used to qualify the lookup.
public static get(name: string, id: Input<ID>, state?: LedgerState, opts?: CustomResourceOptions): Ledger
@staticmethod
def get(resource_name: str,
id: str,
opts: Optional[ResourceOptions] = None,
azuread_based_service_principals: Optional[Sequence[LedgerAzureadBasedServicePrincipalArgs]] = None,
certificate_based_security_principals: Optional[Sequence[LedgerCertificateBasedSecurityPrincipalArgs]] = None,
identity_service_endpoint: Optional[str] = None,
ledger_endpoint: Optional[str] = None,
ledger_type: Optional[str] = None,
location: Optional[str] = None,
name: Optional[str] = None,
resource_group_name: Optional[str] = None,
tags: Optional[Mapping[str, str]] = None) -> Ledger
func GetLedger(ctx *Context, name string, id IDInput, state *LedgerState, opts ...ResourceOption) (*Ledger, error)
public static Ledger Get(string name, Input<string> id, LedgerState? state, CustomResourceOptions? opts = null)
public static Ledger get(String name, Output<String> id, LedgerState state, CustomResourceOptions options)
Resource lookup is not supported in YAML
- name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- state
- Any extra arguments used during the lookup.
- opts
- A bag of options that control this resource's behavior.
- resource_name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- state
- Any extra arguments used during the lookup.
- opts
- A bag of options that control this resource's behavior.
- name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- state
- Any extra arguments used during the lookup.
- opts
- A bag of options that control this resource's behavior.
- name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- state
- Any extra arguments used during the lookup.
- opts
- A bag of options that control this resource's behavior.
- Azuread
Based List<LedgerService Principals Azuread Based Service Principal Args> A list of
azuread_based_service_principal
blocks as defined below.- Certificate
Based List<LedgerSecurity Principals Certificate Based Security Principal Args> A list of
certificate_based_security_principal
blocks as defined below.- Identity
Service stringEndpoint The Identity Service Endpoint for this Confidential Ledger.
- Ledger
Endpoint string The Endpoint for this Confidential Ledger.
- Ledger
Type string Specifies the type of Confidential Ledger. Possible values are
Private
andPublic
. Changing this forces a new resource to be created.- Location string
Specifies the supported Azure location where the Confidential Ledger exists. Changing this forces a new resource to be created.
- Name string
Specifies the name of the Confidential Ledger. Changing this forces a new resource to be created.
- Resource
Group stringName The name of the Resource Group where the Confidential Ledger exists. Changing this forces a new resource to be created.
- Dictionary<string, string>
A mapping of tags to assign to the Confidential Ledger.
- Azuread
Based []LedgerService Principals Azuread Based Service Principal Args A list of
azuread_based_service_principal
blocks as defined below.- Certificate
Based []LedgerSecurity Principals Certificate Based Security Principal Args A list of
certificate_based_security_principal
blocks as defined below.- Identity
Service stringEndpoint The Identity Service Endpoint for this Confidential Ledger.
- Ledger
Endpoint string The Endpoint for this Confidential Ledger.
- Ledger
Type string Specifies the type of Confidential Ledger. Possible values are
Private
andPublic
. Changing this forces a new resource to be created.- Location string
Specifies the supported Azure location where the Confidential Ledger exists. Changing this forces a new resource to be created.
- Name string
Specifies the name of the Confidential Ledger. Changing this forces a new resource to be created.
- Resource
Group stringName The name of the Resource Group where the Confidential Ledger exists. Changing this forces a new resource to be created.
- map[string]string
A mapping of tags to assign to the Confidential Ledger.
- azuread
Based List<LedgerService Principals Azuread Based Service Principal Args> A list of
azuread_based_service_principal
blocks as defined below.- certificate
Based List<LedgerSecurity Principals Certificate Based Security Principal Args> A list of
certificate_based_security_principal
blocks as defined below.- identity
Service StringEndpoint The Identity Service Endpoint for this Confidential Ledger.
- ledger
Endpoint String The Endpoint for this Confidential Ledger.
- ledger
Type String Specifies the type of Confidential Ledger. Possible values are
Private
andPublic
. Changing this forces a new resource to be created.- location String
Specifies the supported Azure location where the Confidential Ledger exists. Changing this forces a new resource to be created.
- name String
Specifies the name of the Confidential Ledger. Changing this forces a new resource to be created.
- resource
Group StringName The name of the Resource Group where the Confidential Ledger exists. Changing this forces a new resource to be created.
- Map<String,String>
A mapping of tags to assign to the Confidential Ledger.
- azuread
Based LedgerService Principals Azuread Based Service Principal Args[] A list of
azuread_based_service_principal
blocks as defined below.- certificate
Based LedgerSecurity Principals Certificate Based Security Principal Args[] A list of
certificate_based_security_principal
blocks as defined below.- identity
Service stringEndpoint The Identity Service Endpoint for this Confidential Ledger.
- ledger
Endpoint string The Endpoint for this Confidential Ledger.
- ledger
Type string Specifies the type of Confidential Ledger. Possible values are
Private
andPublic
. Changing this forces a new resource to be created.- location string
Specifies the supported Azure location where the Confidential Ledger exists. Changing this forces a new resource to be created.
- name string
Specifies the name of the Confidential Ledger. Changing this forces a new resource to be created.
- resource
Group stringName The name of the Resource Group where the Confidential Ledger exists. Changing this forces a new resource to be created.
- {[key: string]: string}
A mapping of tags to assign to the Confidential Ledger.
- azuread_
based_ Sequence[Ledgerservice_ principals Azuread Based Service Principal Args] A list of
azuread_based_service_principal
blocks as defined below.- certificate_
based_ Sequence[Ledgersecurity_ principals Certificate Based Security Principal Args] A list of
certificate_based_security_principal
blocks as defined below.- identity_
service_ strendpoint The Identity Service Endpoint for this Confidential Ledger.
- ledger_
endpoint str The Endpoint for this Confidential Ledger.
- ledger_
type str Specifies the type of Confidential Ledger. Possible values are
Private
andPublic
. Changing this forces a new resource to be created.- location str
Specifies the supported Azure location where the Confidential Ledger exists. Changing this forces a new resource to be created.
- name str
Specifies the name of the Confidential Ledger. Changing this forces a new resource to be created.
- resource_
group_ strname The name of the Resource Group where the Confidential Ledger exists. Changing this forces a new resource to be created.
- Mapping[str, str]
A mapping of tags to assign to the Confidential Ledger.
- azuread
Based List<Property Map>Service Principals A list of
azuread_based_service_principal
blocks as defined below.- certificate
Based List<Property Map>Security Principals A list of
certificate_based_security_principal
blocks as defined below.- identity
Service StringEndpoint The Identity Service Endpoint for this Confidential Ledger.
- ledger
Endpoint String The Endpoint for this Confidential Ledger.
- ledger
Type String Specifies the type of Confidential Ledger. Possible values are
Private
andPublic
. Changing this forces a new resource to be created.- location String
Specifies the supported Azure location where the Confidential Ledger exists. Changing this forces a new resource to be created.
- name String
Specifies the name of the Confidential Ledger. Changing this forces a new resource to be created.
- resource
Group StringName The name of the Resource Group where the Confidential Ledger exists. Changing this forces a new resource to be created.
- Map<String>
A mapping of tags to assign to the Confidential Ledger.
Supporting Types
LedgerAzureadBasedServicePrincipal
- Ledger
Role stringName Specifies the Ledger Role to grant this AzureAD Service Principal. Possible values are
Administrator
,Contributor
andReader
.- Principal
Id string Specifies the Principal ID of the AzureAD Service Principal.
- Tenant
Id string Specifies the Tenant ID for this AzureAD Service Principal.
- Ledger
Role stringName Specifies the Ledger Role to grant this AzureAD Service Principal. Possible values are
Administrator
,Contributor
andReader
.- Principal
Id string Specifies the Principal ID of the AzureAD Service Principal.
- Tenant
Id string Specifies the Tenant ID for this AzureAD Service Principal.
- ledger
Role StringName Specifies the Ledger Role to grant this AzureAD Service Principal. Possible values are
Administrator
,Contributor
andReader
.- principal
Id String Specifies the Principal ID of the AzureAD Service Principal.
- tenant
Id String Specifies the Tenant ID for this AzureAD Service Principal.
- ledger
Role stringName Specifies the Ledger Role to grant this AzureAD Service Principal. Possible values are
Administrator
,Contributor
andReader
.- principal
Id string Specifies the Principal ID of the AzureAD Service Principal.
- tenant
Id string Specifies the Tenant ID for this AzureAD Service Principal.
- ledger_
role_ strname Specifies the Ledger Role to grant this AzureAD Service Principal. Possible values are
Administrator
,Contributor
andReader
.- principal_
id str Specifies the Principal ID of the AzureAD Service Principal.
- tenant_
id str Specifies the Tenant ID for this AzureAD Service Principal.
- ledger
Role StringName Specifies the Ledger Role to grant this AzureAD Service Principal. Possible values are
Administrator
,Contributor
andReader
.- principal
Id String Specifies the Principal ID of the AzureAD Service Principal.
- tenant
Id String Specifies the Tenant ID for this AzureAD Service Principal.
LedgerCertificateBasedSecurityPrincipal
- Ledger
Role stringName Specifies the Ledger Role to grant this Certificate Security Principal. Possible values are
Administrator
,Contributor
andReader
.- Pem
Public stringKey The public key, in PEM format, of the certificate used by this identity to authenticate with the Confidential Ledger.
- Ledger
Role stringName Specifies the Ledger Role to grant this Certificate Security Principal. Possible values are
Administrator
,Contributor
andReader
.- Pem
Public stringKey The public key, in PEM format, of the certificate used by this identity to authenticate with the Confidential Ledger.
- ledger
Role StringName Specifies the Ledger Role to grant this Certificate Security Principal. Possible values are
Administrator
,Contributor
andReader
.- pem
Public StringKey The public key, in PEM format, of the certificate used by this identity to authenticate with the Confidential Ledger.
- ledger
Role stringName Specifies the Ledger Role to grant this Certificate Security Principal. Possible values are
Administrator
,Contributor
andReader
.- pem
Public stringKey The public key, in PEM format, of the certificate used by this identity to authenticate with the Confidential Ledger.
- ledger_
role_ strname Specifies the Ledger Role to grant this Certificate Security Principal. Possible values are
Administrator
,Contributor
andReader
.- pem_
public_ strkey The public key, in PEM format, of the certificate used by this identity to authenticate with the Confidential Ledger.
- ledger
Role StringName Specifies the Ledger Role to grant this Certificate Security Principal. Possible values are
Administrator
,Contributor
andReader
.- pem
Public StringKey The public key, in PEM format, of the certificate used by this identity to authenticate with the Confidential Ledger.
Import
Confidential Ledgers can be imported using the resource id
, e.g.
$ pulumi import azure:confidentialledger/ledger:Ledger example /subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/example-group/providers/Microsoft.ConfidentialLedger/ledgers/example-ledger
Package Details
- Repository
- Azure Classic pulumi/pulumi-azure
- License
- Apache-2.0
- Notes
This Pulumi package is based on the
azurerm
Terraform Provider.