### Install pick-instance-type using go install Source: https://terratest.gruntwork.io/docs/testing-best-practices/debugging-interleaved-test-output Install the pick-instance-type binary directly from its source repository using the `go install` command. ```bash go install github.com/gruntwork-io/terratest/cmd/pick-instance-type@latest ``` -------------------------------- ### Terraform Hello World Example Source: https://terratest.gruntwork.io/docs/getting-started/examples Tests a basic Terraform 'Hello, World!' example. It initializes and applies Terraform, then asserts that the 'hello_world' output is correct. Resources are cleaned up using `terraform destroy`. ```go package test_test import ( t"testing" "github.com/gruntwork-io/terratest/modules/terraform" "github.com/stretchr/testify/assert" ) func TestTerraformHelloWorldExample(t *testing.T) { t.Parallel() // retryable errors in terraform testing. terraformOptions := terraform.WithDefaultRetryableErrors(t, &terraform.Options{ TerraformDir: "../examples/terraform-hello-world-example", }) defer terraform.DestroyContext(t, t.Context(), terraformOptions) terraform.InitAndApplyContext(t, t.Context(), terraformOptions) output := terraform.OutputContext(t, t.Context(), terraformOptions, "hello_world") assert.Equal(t, "Hello, World!", output) } ``` -------------------------------- ### Install pre-commit Source: https://terratest.gruntwork.io/docs/community/contributing Install the pre-commit tool before running pre-commit install. ```bash pre-commit install ``` -------------------------------- ### Install terratest_log_parser using go install Source: https://terratest.gruntwork.io/docs/testing-best-practices/debugging-interleaved-test-output Install the terratest log parser binary directly from its source repository using the `go install` command. ```bash go install github.com/gruntwork-io/terratest/cmd/terratest_log_parser@latest ``` -------------------------------- ### Example Unit Test for Client Factory Source: https://terratest.gruntwork.io/docs/community/contributing This example demonstrates how to write a unit test for the `CreateClient` method in `client_factory_test.go`. It highlights the use of table-driven tests to cover different cloud environments and the importance of asserting the correct base URI. ```go 404: Not Found ``` -------------------------------- ### Manually Install terratest_log_parser Source: https://terratest.gruntwork.io/docs/testing-best-practices/debugging-interleaved-test-output Download the latest release binary for your platform and place it in your system's PATH. This example assumes a Linux 64-bit system. ```bash # This example assumes a linux 64bit machine and installs the latest release. # Use curl to download the binary curl --location --silent --fail --show-error -o terratest_log_parser https://github.com/gruntwork-io/terratest/releases/latest/download/terratest_log_parser_linux_amd64 # Make the downloaded binary executable chmod +x terratest_log_parser # Finally, we place the downloaded binary to a place in the PATH sudo mv terratest_log_parser /usr/local/bin ``` -------------------------------- ### Create Azure Virtual Machines Client (Public Cloud) Source: https://terratest.gruntwork.io/docs/community/contributing Example of creating a VirtualMachinesClient for the Azure public cloud using the Azure SDK for Go. Ensure the Azure SDK is imported. ```go import ( "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute" ) func SomeVMHelperMethod() { subscriptionID := "your subscription ID" // Create a VM client and return vmClient, err := compute.NewVirtualMachinesClient(subscriptionID) // Use client / etc } ``` -------------------------------- ### Install terratest_log_parser using gruntwork-installer Source: https://terratest.gruntwork.io/docs/testing-best-practices/debugging-interleaved-test-output Use the gruntwork-installer utility to install the terratest_log_parser binary, which automatically handles platform selection and installation steps. ```bash gruntwork-install --binary-name 'terratest_log_parser' --repo 'https://github.com/gruntwork-io/terratest' --tag 'v1.0.0' ``` -------------------------------- ### Terratest Go Test for Terraform AWS Hello World Example Source: https://terratest.gruntwork.io/docs/getting-started/quick-start Automates the deployment and testing of a Terraform AWS hello world example using Terratest. It handles Terraform initialization, application, output retrieval, HTTP verification, and cleanup. ```go //go:build aws package test_test import ( testing "testing" time "time" http_helper "github.com/gruntwork-io/terratest/modules/http-helper" "github.com/gruntwork-io/terratest/modules/terraform" ) func TestTerraformAwsHelloWorldExample(t *testing.T) { tt.Parallel() // Construct the terraform options with default retryable errors to handle the most common // retryable errors in terraform testing. terraformOptions := terraform.WithDefaultRetryableErrors(t, &terraform.Options{ // The path to where our Terraform code is located TerraformDir: "../examples/terraform-aws-hello-world-example", }) // At the end of the test, run `terraform destroy` to clean up any resources that were created. defer terraform.DestroyContext(t, t.Context(), terraformOptions) // Run `terraform init` and `terraform apply`. Fail the test if there are any errors. terraform.InitAndApplyContext(t, t.Context(), terraformOptions) // Run `terraform output` to get the IP of the instance publicIP := terraform.OutputContext(t, t.Context(), terraformOptions, "public_ip") // Make an HTTP request to the instance and make sure we get back a 200 OK with the body "Hello, World!" url := "http://" + publicIP + ":8080" http_helper.HTTPGetWithRetryContext(t, t.Context(), url, nil, 200, "Hello, World!", 30, 5*time.Second) } ``` -------------------------------- ### Run goimports Source: https://terratest.gruntwork.io/docs/community/contributing Ensure goimports is installed and run it to format Go code according to project standards. ```bash goimports -w . ``` -------------------------------- ### Packer Hello World Test Source: https://terratest.gruntwork.io/docs/getting-started/examples Go test file for the Packer Hello World example. ```go Loading... ``` -------------------------------- ### Running the Terratest Go Test Source: https://terratest.gruntwork.io/docs/getting-started/quick-start Demonstrates how to execute the Terratest Go test for the Terraform AWS hello world example. Includes flags for verbose output, specific test selection, and a custom timeout to prevent premature test termination. ```bash $ go test -v -run TestTerraformAwsHelloWorldExample -timeout 30m === RUN TestTerraformAwsHelloWorldExample Running command terraform with args [init] Initializing provider plugins... [...] Terraform has been successfully initialized! [...] Running command terraform with args [apply -auto-approve] aws_instance.example: Creating... associate_public_ip_address: "" => "" availability_zone: "" => "" ephemeral_block_device.#: "" => "" instance_type: "" => "t2.micro" key_name: "" => "" [...] Apply complete! Resources: 2 added, 0 changed, 0 destroyed. Outputs: public_ip = 52.67.41.31 [...] Making an HTTP GET call to URL http://52.67.41.31:8080 dial tcp 52.67.41.31:8080: getsockopt: connection refused. Sleeping for 5s and will try again. Making an HTTP GET call to URL http://52.67.41.31:8080 dial tcp 52.67.41.31:8080: getsockopt: connection refused. Sleeping for 5s and will try again. Making an HTTP GET call to URL http://52.67.41.31:8080 Success! [...] Running command terraform with args [destroy -force -input=false] [...] Destroy complete! Resources: 2 destroyed. --- PASS: TestTerraformAwsHelloWorldExample (149.36s) ``` -------------------------------- ### Get Azure Virtual Machine with Client Source: https://terratest.gruntwork.io/docs/community/contributing Retrieves an Azure Virtual Machine using a pre-initialized client. This is particularly useful for testing with mock or fake clients. ```go // GetVirtualMachineWithClient gets a Virtual Machine using the provided client. // This variant is useful for testing with fake clients. func GetVirtualMachineWithClient(ctx context.Context, client *armcompute.VirtualMachinesClient, resGroupName string, vmName string) (*armcompute.VirtualMachine, error) { return fetchVirtualMachine(ctx, client, resGroupName, vmName) } ``` -------------------------------- ### Instantiate Key Vault Client Factory Source: https://terratest.gruntwork.io/docs/community/contributing Gets an ARM Key Vault client factory with provided subscription ID, credential, and options. ```go // getArmKeyVaultClientFactory gets an arm keyvault client factory func getArmKeyVaultClientFactory(subscriptionID string) (*armkeyvault.ClientFactory, error) { targetSubscriptionID, err := getTargetAzureSubscription(subscriptionID) if err != nil { return nil, err } ``` -------------------------------- ### Create Azure Virtual Machines Client (Non-Public Cloud) Source: https://terratest.gruntwork.io/docs/community/contributing Example of creating a VirtualMachinesClient for non-public Azure cloud environments using the Azure SDK for Go. Specify the correct base URI for the target environment. ```go import ( "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute" ) func SomeVMHelperMethod() { subscriptionID := "your subscription ID" baseURI := "management.azure.com" // Create a VM client and return vmClient, err := compute.NewVirtualMachinesClientWithBaseURI(baseURI, subscriptionID) // Use client / etc } ``` -------------------------------- ### Find Available Instance Type in eu-west-1 Source: https://terratest.gruntwork.io/docs/testing-best-practices/picking-instance-types This example demonstrates how to use pick-instance-type to find an available instance type in the 'eu-west-1' region from a list of 't2.micro' and 't3.micro'. It prints the first available instance type. ```bash $ pick-instance-type eu-west-1 t2.micro t3.micro t2.micro ``` -------------------------------- ### Terraform "Hello, World" Module Source: https://terratest.gruntwork.io/docs/getting-started/quick-start A minimal Terraform configuration that defines an output variable with the value 'Hello, World!'. This serves as a basic example for testing Terraform code. ```terraform terraform { required_version = ">= 1.0" } # The simplest possible Terraform module: it just outputs "Hello, World!" output "hello_world" { value = "Hello, World!" } ``` -------------------------------- ### Install Terratest Source: https://terratest.gruntwork.io/docs/getting-started/godoc Installs the latest version of Terratest using the go get command. Requires Go 1.26 or later. ```bash go get github.com/gruntwork-io/terratest@latest ``` -------------------------------- ### Create VM Insights Client (Context) Source: https://terratest.gruntwork.io/docs/community/contributing Gets a VM Insights client. The context parameter supports cancellation and timeouts. Deprecated: Use this instead of CreateVMInsightsClientE. ```go // CreateVMInsightsClientContextE gets a VM Insights client. // The ctx parameter supports cancellation and timeouts. func CreateVMInsightsClientContextE(_ context.Context, subscriptionID string) (*armmonitor.VMInsightsClient, error) { // Validate Azure subscription ID _, err := getTargetAzureSubscription(subscriptionID) if err != nil { return nil, err } cred, err := newArmCredential() if err != nil { return nil, err } opts, err := newArmClientOptions() if err != nil { return nil, err } return armmonitor.NewVMInsightsClient(cred, opts) } ``` -------------------------------- ### Get Arm Resources Client Factory Source: https://terratest.gruntwork.io/docs/community/contributing Initializes and returns an `armresources.ClientFactory` for interacting with Azure Resources. It handles subscription ID resolution, cloud configuration, and Azure credential setup. ```go // getArmResourcesClientFactory gets an arm resources client factory func getArmResourcesClientFactory(subscriptionID string) (*armresources.ClientFactory, error) { targetSubscriptionID, err := getTargetAzureSubscription(subscriptionID) if err != nil { return nil, err } clientCloudConfig, err := getClientCloudConfig() if err != nil { return nil, err } cred, err := azidentity.NewDefaultAzureCredential(&azidentity.DefaultAzureCredentialOptions{ ClientOptions: azcore.ClientOptions{ Cloud: clientCloudConfig, }, }) if err != nil { return nil, err } return armresources.NewClientFactory(targetSubscriptionID, cred, &arm.ClientOptions{ ClientOptions: policy.ClientOptions{ Cloud: clientCloudConfig, }, }) } ``` -------------------------------- ### Create Virtual Machines Client (Context-Aware) Source: https://terratest.gruntwork.io/docs/community/contributing Creates a virtual machines client using the provided context and subscription ID. Supports cancellation and timeouts. ```go func CreateVirtualMachinesClientContextE(_ context.Context, subscriptionID string) (*armcompute.VirtualMachinesClient, error) { clientFactory, err := getArmComputeClientFactory(subscriptionID) if err != nil { return nil, err } return clientFactory.NewVirtualMachinesClient(), nil } ``` -------------------------------- ### Initialize Go Module and Tidy Dependencies Source: https://terratest.gruntwork.io/docs/getting-started/quick-start Initialize your Go module and tidy up dependencies within the 'test' directory. Replace '' with your specific module path (e.g., github.com//). ```bash cd test go mod init "" go mod tidy ``` -------------------------------- ### Create SQL Database Client with Context Source: https://terratest.gruntwork.io/docs/community/contributing Helper function to create and set up a SQL database client with context support for cancellation and timeouts. ```go func CreateDatabaseClientContext(_ context.Context, subscriptionID string) (*armsql.DatabasesClient, error) { clientFactory, err := getArmSQLClientFactory(subscriptionID) if err != nil { return nil, err } return clientFactory.NewDatabasesClient(), nil } ``` -------------------------------- ### Create Data Factories Client (Context-aware) Source: https://terratest.gruntwork.io/docs/community/contributing Sets up a data factory client with context support for cancellation and timeouts. Requires a subscription ID. ```go // CreateDataFactoriesClientContextE is a helper function that will setup a data factory client. // The ctx parameter supports cancellation and timeouts. func CreateDataFactoriesClientContextE(_ context.Context, subscriptionID string) (*armdatafactory.FactoriesClient, error) { clientFactory, err := getArmDataFactoryClientFactory(subscriptionID) if err != nil { return nil, err } return clientFactory.NewFactoriesClient(), nil } ``` -------------------------------- ### Rename Get*ClientE to Create*ClientE Source: https://terratest.gruntwork.io/docs/migrating-to-v1/azure Renames functions from Get*ClientE to Create*ClientE for various Azure services. Use this when updating to the new SDK naming conventions. ```bash sd 'GetAvailabilitySetClientE\b' 'CreateAvailabilitySetClientE' $(rg -l 'GetAvailabilitySetClientE') sd 'GetDiskClientE\b' 'CreateDisksClientE' $(rg -l 'GetDiskClientE') sd 'GetDiagnosticsSettingsClientE\b' 'CreateDiagnosticsSettingsClientE' $(rg -l 'GetDiagnosticsSettingsClientE') sd 'GetVMInsightsClientE\b' 'CreateVMInsightsClientE' $(rg -l 'GetVMInsightsClientE') sd 'GetActivityLogAlertsClientE\b' 'CreateActivityLogAlertsClientE' $(rg -l 'GetActivityLogAlertsClientE') sd 'GetResourceGroupClientE\b' 'CreateResourceGroupClientE' $(rg -l 'GetResourceGroupClientE') sd 'GetStorageAccountClientE\b' 'CreateStorageAccountClientE' $(rg -l 'GetStorageAccountClientE') sd 'GetStorageBlobContainerClientE\b' 'CreateStorageBlobContainerClientE' $(rg -l 'GetStorageBlobContainerClientE') ``` -------------------------------- ### Create Synapse Workspace Client (Context-aware) Source: https://terratest.gruntwork.io/docs/community/contributing Sets up a Synapse workspace client with context support for cancellation and timeouts. Requires a subscription ID. ```go // CreateSynapseWorkspaceClientContextE is a helper function that will setup a synapse workspace client. // The ctx parameter supports cancellation and timeouts. func CreateSynapseWorkspaceClientContextE(_ context.Context, subscriptionID string) (*armsynapse.WorkspacesClient, error) { clientFactory, err := getArmSynapseClientFactory(subscriptionID) if err != nil { return nil, err } return clientFactory.NewWorkspacesClient(), nil } ``` -------------------------------- ### Get Azure VM Image (Error Handling, Deprecated) Source: https://terratest.gruntwork.io/docs/community/contributing Gets the VM image information for an Azure Virtual Machine, returning an error if one occurs. This is a deprecated function. Use GetVirtualMachineImageContextE instead. ```go import ( "context" ) // GetVirtualMachineImageE gets the Image of the specified Azure Virtual Machine. // // Deprecated: Use [GetVirtualMachineImageContextE] instead. func GetVirtualMachineImageE(vmName string, resGroupName string, subscriptionID string) (*VMImage, error) { return GetVirtualMachineImageContextE(context.Background(), vmName, resGroupName, subscriptionID) } ``` -------------------------------- ### Get Virtual Machine OS Disk Name (Deprecated) Source: https://terratest.gruntwork.io/docs/community/contributing Gets the OS Disk name for a specified Azure Virtual Machine. This function is deprecated and will fail the test on error. Use GetVirtualMachineOSDiskNameContext instead. ```go // GetVirtualMachineOSDiskName gets the OS Disk name of the specified Azure Virtual Machine. // This function would fail the test if there is an error. // // Deprecated: Use [GetVirtualMachineOSDiskNameContext] instead. func GetVirtualMachineOSDiskName(t testing.TestingT, vmName string, resGroupName string, subscriptionID string) string { t.Helper() return GetVirtualMachineOSDiskNameContext(t, context.Background(), vmName, resGroupName, subscriptionID) } ``` -------------------------------- ### Create MySQL Server Client with Context Source: https://terratest.gruntwork.io/docs/community/contributing Helper function to set up a MySQL server client with context support for cancellation and timeouts. ```go func CreateMySQLServerClientContextE(_ context.Context, subscriptionID string) (*armmysql.ServersClient, error) { clientFactory, err := getArmMySQLClientFactory(subscriptionID) if err != nil { return nil, err } return clientFactory.NewServersClient(), nil } ``` -------------------------------- ### Get Virtual Machine Managed Disks (Deprecated) Source: https://terratest.gruntwork.io/docs/community/contributing Gets the list of Managed Disk names for a specified Azure Virtual Machine. This function is deprecated and will fail the test on error. Use GetVirtualMachineManagedDisksContext instead. ```go // GetVirtualMachineManagedDisks gets the list of Managed Disk names of the specified Azure Virtual Machine. // This function would fail the test if there is an error. // // Deprecated: Use [GetVirtualMachineManagedDisksContext] instead. func GetVirtualMachineManagedDisks(t testing.TestingT, vmName string, resGroupName string, subscriptionID string) []string { t.Helper() return GetVirtualMachineManagedDisksContext(t, context.Background(), vmName, resGroupName, subscriptionID) } ``` -------------------------------- ### Get Arm App Containers Client Factory Source: https://terratest.gruntwork.io/docs/community/contributing Initializes and returns an `armappcontainers.ClientFactory` for Azure Container Apps. It resolves the target subscription ID, gets cloud configuration, and sets up default Azure credentials. ```go // getArmAppContainersClientFactory gets an arm app containers client factory func getArmAppContainersClientFactory(subscriptionID string) (*armappcontainers.ClientFactory, error) { targetSubscriptionID, err := getTargetAzureSubscription(subscriptionID) if err != nil { return nil, err } clientCloudConfig, err := getClientCloudConfig() if err != nil { return nil, err } ``` -------------------------------- ### Create Front Door Frontend Endpoints Client Source: https://terratest.gruntwork.io/docs/community/contributing Instantiates a client for managing Front Door frontend endpoints. Use the context-aware version for better control over cancellation and timeouts. ```go func CreateFrontDoorFrontendEndpointClientContextE(_ context.Context, subID string, cred azcore.TokenCredential, opts *arm.ClientOptions) (*armfrontdoor.FrontendEndpointsClient, error) { if cred == nil { return nil, err } return armfrontdoor.NewFrontendEndpointsClient(subID, cred, opts) } ``` ```go // CreateFrontDoorFrontendEndpointClientE returns a Front Door Frontend Endpoints client. // // Deprecated: Use [CreateFrontDoorFrontendEndpointClientContextE] instead. func CreateFrontDoorFrontendEndpointClientE(subscriptionID string) (*armfrontdoor.FrontendEndpointsClient, error) { return CreateFrontDoorFrontendEndpointClientContextE(context.Background(), subscriptionID) } ``` -------------------------------- ### Use `go get` for Version Pinning Source: https://terratest.gruntwork.io/docs/getting-started/version-pinning The `go get` command with a specific tag pins all subpackages of Terratest. Avoid manually editing subpath requires, as Go may not find the correct revision. ```bash go get github.com/gruntwork-io/terratest@ ``` -------------------------------- ### Get Azure VM Availability Set ID (Error Handling) with Context Source: https://terratest.gruntwork.io/docs/community/contributing Gets the Availability Set ID of an Azure Virtual Machine, returning an error if one occurs. Supports context for cancellation and timeouts. ```go import ( "context" ) // GetVirtualMachineAvailabilitySetIDContextE gets the Availability Set ID of the specified Azure Virtual Machine. // The ctx parameter supports cancellation and timeouts. func GetVirtualMachineAvailabilitySetIDContextE(ctx context.Context, vmName string, resGroupName string, subscriptionID string) (string, error) { vm, err := GetVirtualMachineContextE(ctx, vmName, resGroupName, subscriptionID) if err != nil { return "", err } return extractVMAvailabilitySetID(vm) } ``` -------------------------------- ### Create Azure Virtual Machines Client (with Context) Source: https://terratest.gruntwork.io/docs/community/contributing Returns a virtual machines client using a context for cancellation and timeouts. Requires an Azure subscription ID. ```go // CreateVirtualMachinesClientContextE returns a virtual machines client. // The ctx parameter supports cancellation and timeouts. func CreateVirtualMachinesClientContextE(_ context.Context, subscriptionID string) (*armcompute.VirtualMachinesClient, error) { clientFactory, err := getArmComputeClientFactory(subscriptionID) if err != nil { return nil, err } return clientFactory.NewVirtualMachinesClient(), nil } ``` -------------------------------- ### Instantiate Storage Client Factory Source: https://terratest.gruntwork.io/docs/community/contributing Instantiates an ARM storage client factory with provided subscription ID, credential, and options. ```go func newArmStorageClientFactory(subscriptionID string) (*armstorage.ClientFactory, error) { targetSubscriptionID, err := getTargetAzureSubscription(subscriptionID) if err != nil { return nil, err } cred, err := newArmCredential() if err != nil { return nil, err } opts, err := newArmClientOptions() if err != nil { return nil, err } return armstorage.NewClientFactory(targetSubscriptionID, cred, opts) } ``` -------------------------------- ### Get Azure VM OS Disk Name (Error Handling) with Context Source: https://terratest.gruntwork.io/docs/community/contributing Gets the OS disk name of an Azure Virtual Machine, returning an error if one occurs. Supports context for cancellation and timeouts. ```go import ( "context" ) // GetVirtualMachineOSDiskNameContextE gets the OS Disk name of the specified Azure Virtual Machine. // The ctx parameter supports cancellation and timeouts. func GetVirtualMachineOSDiskNameContextE(ctx context.Context, vmName string, resGroupName string, subscriptionID string) (string, error) { vm, err := GetVirtualMachineContextE(ctx, vmName, resGroupName, subscriptionID) if err != nil { return "", err } return extractVMOSDiskName(vm), nil } ``` -------------------------------- ### Get Virtual Machine NICs Context (Error Handling) Source: https://terratest.gruntwork.io/docs/community/contributing Gets a list of Network Interface names for a specified Azure Virtual Machine, returning an error if one occurs. Supports context for cancellation and timeouts. ```go // GetVirtualMachineNicsContextE gets a list of Network Interface names for a specified Azure Virtual Machine. // The ctx parameter supports cancellation and timeouts. func GetVirtualMachineNicsContextE(ctx context.Context, vmName string, resGroupName string, subscriptionID string) ([]string, error) { vm, err := GetVirtualMachineContextE(ctx, vmName, resGroupName, subscriptionID) if err != nil { return nil, err } return extractVMNics(vm) } ``` -------------------------------- ### Create Front Door Client (Context-Aware) Source: https://terratest.gruntwork.io/docs/community/contributing Returns an Azure Front Door client with context support for cancellation and timeouts. It retrieves the target subscription ID, ARM credentials, and client options. ```go func CreateFrontDoorClientContextE(_ context.Context, subscriptionID string) (*armfrontdoor.FrontDoorsClient, error) { subID, err := getTargetAzureSubscription(subscriptionID) if err != nil { return nil, err } cred, err := newArmCredential() if err != nil { return nil, err } opts, err := newArmClientOptions() if err != nil { return nil, err } return armfrontdoor.NewFrontDoorsClient(subID, cred, opts) } ``` -------------------------------- ### Get Azure VM Availability Set ID (Error Handling, Deprecated) Source: https://terratest.gruntwork.io/docs/community/contributing Gets the Availability Set ID for an Azure Virtual Machine, returning an error if one occurs. This is a deprecated function. Use GetVirtualMachineAvailabilitySetIDContextE instead. ```go import ( "context" ) // GetVirtualMachineAvailabilitySetIDE gets the Availability Set ID of the specified Azure Virtual Machine. // // Deprecated: Use [GetVirtualMachineAvailabilitySetIDContextE] instead. func GetVirtualMachineAvailabilitySetIDE(vmName string, resGroupName string, subscriptionID string) (string, error) { return GetVirtualMachineAvailabilitySetIDContextE(context.Background(), vmName, resGroupName, subscriptionID) } ``` -------------------------------- ### Create Synapse SQL Pool Client (Context-aware) Source: https://terratest.gruntwork.io/docs/community/contributing Sets up a Synapse SQL pool client with context support for cancellation and timeouts. Requires a subscription ID. ```go // CreateSynapseSQLPoolClientContextE is a helper function that will setup a Synapse SQL pool client. // The ctx parameter supports cancellation and timeouts. func CreateSynapseSQLPoolClientContextE(_ context.Context, subscriptionID string) (*armsynapse.SQLPoolsClient, error) { clientFactory, err := getArmSynapseClientFactory(subscriptionID) if err != nil { return nil, err } return clientFactory.NewSQLPoolsClient(), nil } ``` -------------------------------- ### Get Virtual Machine Managed Disks Context (Error Handling) Source: https://terratest.gruntwork.io/docs/community/contributing Gets the list of Managed Disk names for a specified Azure Virtual Machine, returning an error if one occurs. Supports context for cancellation and timeouts. ```go // GetVirtualMachineManagedDisksContextE gets the list of Managed Disk names of the specified Azure Virtual Machine. // The ctx parameter supports cancellation and timeouts. func GetVirtualMachineManagedDisksContextE(ctx context.Context, vmName string, resGroupName string, subscriptionID string) ([]string, error) { vm, err := GetVirtualMachineContextE(ctx, vmName, resGroupName, subscriptionID) if err != nil { return nil, err } return extractVMManagedDisks(vm), nil } ``` -------------------------------- ### Create New Virtual Network Client (Context - Alias) Source: https://terratest.gruntwork.io/docs/community/contributing Alias for backward compatibility. Deprecated: Use CreateVirtualNetworkClientContextE instead. Accepts a context parameter. ```go func CreateNewVirtualNetworkClientContextE(ctx context.Context, subscriptionID string) (*armnetwork.VirtualNetworksClient, error) { return CreateVirtualNetworkClientContextE(ctx, subscriptionID) } ``` -------------------------------- ### Get Virtual Machine OS Disk Name (Error Handling, Deprecated) Source: https://terratest.gruntwork.io/docs/community/contributing Gets the OS Disk name for a specified Azure Virtual Machine, returning an error if one occurs. This function is deprecated. Use GetVirtualMachineOSDiskNameContextE instead. ```go // GetVirtualMachineOSDiskNameE gets the OS Disk name of the specified Azure Virtual Machine. // // Deprecated: Use [GetVirtualMachineOSDiskNameContextE] instead. func GetVirtualMachineOSDiskNameE(vmName string, resGroupName string, subscriptionID string) (string, error) { return GetVirtualMachineOSDiskNameContextE(context.Background(), vmName, resGroupName, subscriptionID) } ``` -------------------------------- ### Create Disks Client with Context Source: https://terratest.gruntwork.io/docs/community/contributing Returns a disks client with context support for cancellation and timeouts. ```go func CreateDisksClientContextE(_ context.Context, subscriptionID string) (*armcompute.DisksClient, error) { clientFactory, err := getArmComputeClientFactory(subscriptionID) if err != nil { return nil, err } return clientFactory.NewDisksClient(), nil } ``` -------------------------------- ### Create SQL Database Client (Deprecated) Source: https://terratest.gruntwork.io/docs/community/contributing Deprecated helper function to create and set up a SQL database client. Use CreateDatabaseClientContext instead. ```go // Deprecated: Use [CreateDatabaseClientContext] instead. func CreateDatabaseClient(subscriptionID string) (*armsql.DatabasesClient, error) { return CreateDatabaseClientContext(context.Background(), subscriptionID) } ``` -------------------------------- ### Get Virtual Machine Managed Disks (Error Handling, Deprecated) Source: https://terratest.gruntwork.io/docs/community/contributing Gets the list of Managed Disk names for a specified Azure Virtual Machine, returning an error if one occurs. This function is deprecated. Use GetVirtualMachineManagedDisksContextE instead. ```go // GetVirtualMachineManagedDisksE gets the list of Managed Disk names of the specified Azure Virtual Machine. // // Deprecated: Use [GetVirtualMachineManagedDisksContextE] instead. func GetVirtualMachineManagedDisksE(vmName string, resGroupName string, subscriptionID string) ([]string, error) { return GetVirtualMachineManagedDisksContextE(context.Background(), vmName, resGroupName, subscriptionID) } ``` -------------------------------- ### Create MySQL Server Client (Deprecated) Source: https://terratest.gruntwork.io/docs/community/contributing Deprecated helper function to set up a MySQL server client. Use CreateMySQLServerClientContextE instead. ```go // Deprecated: Use [CreateMySQLServerClientContextE] instead. func CreateMySQLServerClientE(subscriptionID string) (*armmysql.ServersClient, error) { return CreateMySQLServerClientContextE(context.Background(), subscriptionID) } ``` -------------------------------- ### Create Azure SQL Server Client with Context Source: https://terratest.gruntwork.io/docs/community/contributing Creates a SQL Server client using a provided context and subscription ID. This is the recommended approach for new clients. ```go // CreateSQLServerClientContext is a helper function that will create and setup a sql server client. // The ctx parameter supports cancellation and timeouts. func CreateSQLServerClientContext(_ context.Context, subscriptionID string) (*armsql.ServersClient, error) { clientFactory, err := getArmSQLClientFactory(subscriptionID) if err != nil { return nil, err } return clientFactory.NewServersClient(), nil } ``` -------------------------------- ### List Virtual Machines for Resource Group with Client Source: https://terratest.gruntwork.io/docs/community/contributing Lists virtual machine names in a resource group using a pre-configured client. Useful for testing with fake clients. ```go // ListVirtualMachinesForResourceGroupWithClient gets a list of all Virtual Machine names // in the specified Resource Group using the provided client. // This variant is useful for testing with fake clients. func ListVirtualMachinesForResourceGroupWithClient(ctx context.Context, client *armcompute.VirtualMachinesClient, resourceGroupName string) ([]string, error) { return listVirtualMachineNames(ctx, client, resourceGroupName) } ``` -------------------------------- ### Create SQL Managed Databases Client Source: https://terratest.gruntwork.io/docs/community/contributing Helper function to create and set up a SQL managed databases client. Use CreateSQLManagedDatabasesClientContext for context-aware operations. ```go func CreateSQLManagedDatabasesClient(subscriptionID string) (*armsql.ManagedDatabasesClient, error) { return CreateSQLManagedDatabasesClientContext(context.Background(), subscriptionID) } ``` -------------------------------- ### Create VM Insights Client (Deprecated) Source: https://terratest.gruntwork.io/docs/community/contributing Gets a VM Insights client. This is a deprecated function and CreateVMInsightsClientContextE should be used instead. ```go // CreateVMInsightsClientE gets a VM Insights client. // // Deprecated: Use [CreateVMInsightsClientContextE] instead. func CreateVMInsightsClientE(subscriptionID string) (*armmonitor.VMInsightsClient, error) { return CreateVMInsightsClientContextE(context.Background(), subscriptionID) } ``` -------------------------------- ### Migrating to Context Variants Source: https://terratest.gruntwork.io/docs/migrating-to-v1/overview Demonstrates the transition from older function variants (e.g., `Apply`, `ApplyE`) to the preferred v1 context-aware variants (`ApplyContext`, `ApplyContextE`). ```go // Before out := terraform.Apply(t, options) out, err := terraform.ApplyE(t, options) // After ctx := context.Background() // or context.WithTimeout(...) for cancellation out := terraform.ApplyContext(t, ctx, options) out, err := terraform.ApplyContextE(t, ctx, options) ``` -------------------------------- ### Get Storage URI Suffix Source: https://terratest.gruntwork.io/docs/community/contributing Retrieves the storage URI suffix for the configured Azure environment. Deprecated in favor of context-aware version. ```go func GetStorageURISuffixE() (string, error) { return GetStorageURISuffixContextE(context.Background()) } ``` -------------------------------- ### Create Azure SQL Managed Instance Client with Context Source: https://terratest.gruntwork.io/docs/community/contributing Creates a SQL Managed Instance client using a provided context and subscription ID. This is the recommended approach for new clients. ```go // CreateSQLManagedInstanceClientContext is a helper function that will create and setup a sql managed instance client. // The ctx parameter supports cancellation and timeouts. func CreateSQLManagedInstanceClientContext(_ context.Context, subscriptionID string) (*armsql.ManagedInstancesClient, error) { clientFactory, err := getArmSQLClientFactory(subscriptionID) if err != nil { return nil, err } return clientFactory.NewManagedInstancesClient(), nil } ``` -------------------------------- ### Create Network Management Client (Context) Source: https://terratest.gruntwork.io/docs/community/contributing Returns a network management client. The context parameter supports cancellation and timeouts. ```go func CreateNetworkManagementClientContextE(_ context.Context, subscriptionID string) (*armnetwork.ManagementClient, error) { clientFactory, err := getArmNetworkClientFactory(subscriptionID) if err != nil { return nil, err } return clientFactory.NewManagementClient(), nil } ``` -------------------------------- ### Get Virtual Machine (Deprecated) Source: https://terratest.gruntwork.io/docs/community/contributing Retrieves a Virtual Machine from an Azure Resource Group. This function is deprecated and users should use GetVirtualMachineContext instead. ```go // Deprecated: Use [GetVirtualMachineContext] instead. func GetVirtualMachine(t testing.TestingT, vmName string, resGroupName string, subscriptionID string) *armcompute.VirtualMachine { t.Helper() return GetVirtualMachineContext(t, context.Background(), vmName, resGroupName, subscriptionID) } ``` -------------------------------- ### Get Virtual Machine Tags with Context Source: https://terratest.gruntwork.io/docs/community/contributing Retrieves tags for a specific virtual machine using a provided context. This is a helper function for tests. ```go func GetVirtualMachineTagsContextE(ctx context.Context, vmName string, resGroupName string, subscriptionID string) (map[string]string, error) { vm, err := GetVirtualMachineContextE(ctx, vmName, resGroupName, subscriptionID) if err != nil { return make(map[string]string), err } return extractVMTags(vm), nil } ``` -------------------------------- ### Create SQL Managed Databases Client (Context Aware) Source: https://terratest.gruntwork.io/docs/community/contributing Instantiates a SQL Managed Databases client using the provided context and subscription ID. Supports cancellation and timeouts via the context. ```go // CreateSQLManagedDatabasesClientContext is a helper function that will create and setup a sql managed databases client. // The ctx parameter supports cancellation and timeouts. func CreateSQLManagedDatabasesClientContext(_ context.Context, subscriptionID string) (*armsql.ManagedDatabasesClient, error) { ``` -------------------------------- ### Get VM Tags Context E Source: https://terratest.gruntwork.io/docs/community/contributing Retrieves the Tags of the specified Virtual Machine as a map. The ctx parameter supports cancellation and timeouts. ```go func GetVirtualMachineTagsContextE(ctx context.Context, vmName string, resGroupName string, subscriptionID string) (map[string]string, error) { return GetVirtualMachineTagsContextE(ctx, vmName, resGroupName, subscriptionID) } ``` -------------------------------- ### Get Virtual Machine Image Context Source: https://terratest.gruntwork.io/docs/community/contributing Retrieves the image details for a specified Azure Virtual Machine using a context for cancellation and timeouts. ```go func GetVirtualMachineImageContextE(ctx context.Context, vmName string, resGroupName string, subscriptionID string) (*VMImage, error) { vm, err := GetVirtualMachineContextE(ctx, vmName, resGroupName, subscriptionID) if err != nil { return nil, err } return extractVMImage(vm), nil } ``` -------------------------------- ### Create Azure Front Door Client (with Context) Source: https://terratest.gruntwork.io/docs/community/contributing Creates an Azure Front Door client with context support for cancellation and timeouts. Use this for managing Azure Front Door resources. ```go // CreateFrontDoorClientContextE returns a Front Door client. // The ctx parameter supports cancellation and timeouts. func CreateFrontDoorClientContextE(_ context.Context, subscriptionID string) (*armfrontdoor.FrontDoorsClient, error) { subID, err := getTargetAzureSubscription(subscriptionID) if err != nil { return nil, err } cred, err := newArmCredential() if err != nil { return nil, err } opts, err := newArmClientOptions() if err != nil { return nil, err } return armfrontdoor.NewFrontDoorsClient(subID, cred, opts) } ``` -------------------------------- ### Get Arm App Containers Client Factory Source: https://terratest.gruntwork.io/docs/community/contributing Initializes and returns an Azure App Containers client factory. Requires a subscription ID. ```go func getArmAppContainersClientFactory(subscriptionID string) (*armappcontainers.ClientFactory, error) { ``` -------------------------------- ### Get Arm Resources Client Factory Source: https://terratest.gruntwork.io/docs/community/contributing Initializes and returns an Azure Resources client factory. Handles subscription ID and cloud configuration. ```go func getArmResourcesClientFactory(subscriptionID string) (*armresources.ClientFactory, error) { targetSubscriptionID, err := getTargetAzureSubscription(subscriptionID) if err != nil { return nil, err } clientCloudConfig, err := getClientCloudConfig() if err != nil { return nil, err } cred, err := azidentity.NewDefaultAzureCredential(&azidentity.DefaultAzureCredentialOptions{ ClientOptions: azcore.ClientOptions{ Cloud: clientCloudConfig, }, }) if err != nil { return nil, err } return armresources.NewClientFactory(targetSubscriptionID, cred, &arm.ClientOptions{ ClientOptions: policy.ClientOptions{ Cloud: clientCloudConfig, }, }) } ``` -------------------------------- ### Create Front Door Frontend Endpoint Client Source: https://terratest.gruntwork.io/docs/community/contributing Creates a client for managing Front Door frontend endpoints. It uses a background context and requires a subscription ID. ```go func CreateFrontDoorFrontendEndpointClientE(subscriptionID string) (*armfrontdoor.FrontendEndpointsClient, error) { return CreateFrontDoorFrontendEndpointClientContextE(context.Background(), subscriptionID) } ``` -------------------------------- ### Create Virtual Network Client Source: https://terratest.gruntwork.io/docs/community/contributing Creates a Virtual Network client with context support for cancellation and timeouts. ```go // CreateVirtualNetworkClientContextE returns a virtual network client. // The ctx parameter supports cancellation and timeouts. func CreateVirtualNetworkClientContextE(_ context.Context, subscriptionID string) (*armnetwork.VirtualNetworksClient, error) { clientFactory, err := getArmNetworkClientFactory(subscriptionID) if err != nil { return nil, err } return clientFactory.NewVirtualNetworksClient(), nil } ``` -------------------------------- ### Get Default Environment Name Source: https://terratest.gruntwork.io/docs/community/contributing Returns the Azure environment name from the `AZURE_ENVIRONMENT` environment variable, or defaults to 'AzurePublicCloud' if the variable is not set or empty. ```go // getDefaultEnvironmentName returns either a configured Azure environment name, or the public default. func getDefaultEnvironmentName() string { envName, exists := os.LookupEnv(AzureEnvironmentEnvName) if exists && len(envName) > 0 { return envName } return "AzurePublicCloud" } ``` -------------------------------- ### Create NIC IP Configuration Client with Context Source: https://terratest.gruntwork.io/docs/community/contributing Creates a NIC IP configuration client using the provided context and subscription ID. Supports cancellation and timeouts. ```go func CreateNetworkInterfaceIPConfigurationClientContextE(_ context.Context, subscriptionID string) (*armnetwork.InterfaceIPConfigurationsClient, error) { clientFactory, err := getArmNetworkClientFactory(subscriptionID) if err != nil { return nil, err } return clientFactory.NewInterfaceIPConfigurationsClient(), nil } ``` -------------------------------- ### Create App Service Client (Context) Source: https://terratest.gruntwork.io/docs/community/contributing Returns an App Service client. The context parameter supports cancellation and timeouts. ```go func CreateAppServiceClientContextE(_ context.Context, subscriptionID string) (*armappservice.WebAppsClient, error) { clientFactory, err := getArmAppServiceClientFactory(subscriptionID) if err != nil { return nil, err } return clientFactory.NewWebAppsClient(), nil } ``` -------------------------------- ### Get ARM MySQL Client Factory Source: https://terratest.gruntwork.io/docs/community/contributing Retrieves an ARM MySQL client factory, handling subscription ID and Azure credential configuration. ```go func getArmMySQLClientFactory(subscriptionID string) (*armmysql.ClientFactory, error) { targetSubscriptionID, err := getTargetAzureSubscription(subscriptionID) if err != nil { return nil, err } clientCloudConfig, err := getClientCloudConfig() if err != nil { return nil, err } cred, err := azidentity.NewDefaultAzureCredential(&azidentity.DefaultAzureCredentialOptions{ ClientOptions: azcore.ClientOptions{ Cloud: clientCloudConfig, }, }) if err != nil { return nil, err } return armmysql.NewClientFactory(targetSubscriptionID, cred, &arm.ClientOptions{ ClientOptions: policy.ClientOptions{ Cloud: clientCloudConfig, }, }) } ``` -------------------------------- ### Get ARM SQL Client Factory Source: https://terratest.gruntwork.io/docs/community/contributing Retrieves an ARM SQL client factory, handling subscription ID and Azure credential configuration. ```go func getArmSQLClientFactory(subscriptionID string) (*armsql.ClientFactory, error) { targetSubscriptionID, err := getTargetAzureSubscription(subscriptionID) if err != nil { return nil, err } clientCloudConfig, err := getClientCloudConfig() if err != nil { return nil, err } cred, err := azidentity.NewDefaultAzureCredential(&azidentity.DefaultAzureCredentialOptions{ ClientOptions: azcore.ClientOptions{ Cloud: clientCloudConfig, }, }) if err != nil { return nil, err } return armsql.NewClientFactory(targetSubscriptionID, cred, &arm.ClientOptions{ ClientOptions: policy.ClientOptions{ Cloud: clientCloudConfig, }, }) } ``` -------------------------------- ### Create Network Management Client Source: https://terratest.gruntwork.io/docs/community/contributing Creates a Network Management client with context support for cancellation and timeouts. ```go // CreateNetworkManagementClientContextE returns a network management client. // The ctx parameter supports cancellation and timeouts. func CreateNetworkManagementClientContextE(_ context.Context, subscriptionID string) (*armnetwork.ManagementClient, error) { clientFactory, err := getArmNetworkClientFactory(subscriptionID) if err != nil { return nil, err } return clientFactory.NewManagementClient(), nil } ``` -------------------------------- ### Create Managed Environments Client (Context-aware) Source: https://terratest.gruntwork.io/docs/community/contributing Creates a managed environments client for Azure Container Apps with context support for cancellation and timeouts. Requires a subscription ID. ```go // CreateManagedEnvironmentsClientContextE creates a managed environments client for Azure Container Apps. // The ctx parameter supports cancellation and timeouts. func CreateManagedEnvironmentsClientContextE(_ context.Context, subscriptionID string) (*armappcontainers.ManagedEnvironmentsClient, error) { clientFactory, err := getArmAppContainersClientFactory(subscriptionID) if err != nil { return nil, err } client := clientFactory.NewManagedEnvironmentsClient() return client, nil } ``` -------------------------------- ### Get All Virtual Machines for Resource Group (Deprecated) Source: https://terratest.gruntwork.io/docs/community/contributing Retrieves all virtual machine objects for a resource group. This is a deprecated helper function that fails on error. ```go // GetVirtualMachinesForResourceGroup gets all Virtual Machine objects in the specified Resource Group. Each // VM Object represents the entire set of VM compute properties accessible by using the VM name as the map key. // This function would fail the test if there is an error. // // Deprecated: Use [GetVirtualMachinesForResourceGroupContext] instead. func GetVirtualMachinesForResourceGroup(t testing.TestingT, resGroupName string, subscriptionID string) map[string]armcompute.VirtualMachineProperties { t.Helper() return GetVirtualMachinesForResourceGroupContext(t, context.Background(), resGroupName, subscriptionID) } ``` -------------------------------- ### Get VM Size Context E Source: https://terratest.gruntwork.io/docs/community/contributing Retrieves the size type of a specified Azure Virtual Machine. The ctx parameter supports cancellation and timeouts. ```go func GetSizeOfVirtualMachineContextE(ctx context.Context, vmName string, resGroupName string, subscriptionID string) (armcompute.VirtualMachineSizeTypes, error) { vm, err := GetVirtualMachineContextE(ctx, vmName, resGroupName, subscriptionID) if err != nil { return "", err } return extractVMSize(vm), nil } ``` -------------------------------- ### Create New Virtual Network Client (Deprecated - Alias) Source: https://terratest.gruntwork.io/docs/community/contributing Alias for backward compatibility. Deprecated: Use CreateVirtualNetworkClientContextE instead. ```go func CreateNewVirtualNetworkClientE(subscriptionID string) (*armnetwork.VirtualNetworksClient, error) { return CreateVirtualNetworkClientContextE(context.Background(), subscriptionID) } ``` -------------------------------- ### Get Key Vault URI Suffix Source: https://terratest.gruntwork.io/docs/community/contributing Retrieves the Key Vault URI suffix for the configured Azure environment. Deprecated in favor of context-aware version. ```go func GetKeyVaultURISuffixE() (string, error) { return GetKeyVaultURISuffixContextE(context.Background()) } ``` -------------------------------- ### Create Azure Virtual Machine Client with Context Source: https://terratest.gruntwork.io/docs/community/contributing Helper function to create an Azure Virtual Machine client with context support for cancellation and timeouts. Fails the test on error. ```go package azure import ( "context" "fmt" "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6" "github.com/gruntwork-io/terratest/modules/testing" "github.com/stretchr/testify/require" ) // GetVirtualMachineClientContext is a helper function that will setup an Azure Virtual Machine client on your behalf. // This function would fail the test if there is an error. // The ctx parameter supports cancellation and timeouts. func GetVirtualMachineClientContext(t testing.TestingT, ctx context.Context, subscriptionID string) *armcompute.VirtualMachinesClient { t.Helper() vmClient, err := GetVirtualMachineClientContextE(ctx, subscriptionID) require.NoError(t, err) return vmClient } // GetVirtualMachineClient is a helper function that will setup an Azure Virtual Machine client on your behalf. // This function would fail the test if there is an error. // // Deprecated: Use [GetVirtualMachineClientContext] instead. func GetVirtualMachineClient(t testing.TestingT, subscriptionID string) *armcompute.VirtualMachinesClient { t.Helper() return GetVirtualMachineClientContext(t, context.Background(), subscriptionID) //nolint:staticcheck } // GetVirtualMachineClientContextE is a helper function that will setup an Azure Virtual Machine client on your behalf. // The ctx parameter supports cancellation and timeouts. func GetVirtualMachineClientContextE(ctx context.Context, subscriptionID string) (*armcompute.VirtualMachinesClient, error) { vmClient, err := CreateVirtualMachinesClientContextE(ctx, subscriptionID) if err != nil { return nil, err } return vmClient, nil } // GetVirtualMachineClientE is a helper function that will setup an Azure Virtual Machine client on your behalf. // // Deprecated: Use [GetVirtualMachineClientContextE] instead. func GetVirtualMachineClientE(subscriptionID string) (*armcompute.VirtualMachinesClient, error) { return GetVirtualMachineClientContextE(context.Background(), subscriptionID) } ``` -------------------------------- ### Run All Terratest Tests Source: https://terratest.gruntwork.io/docs/community/contributing Execute all automated tests within the Terratest project. Ensure AWS credentials are configured and necessary tools like Terraform are installed. ```bash go test -v -timeout 30m -p 1 ./... ```