164 строки
6.0 KiB
HCL
164 строки
6.0 KiB
HCL
provider "azuread" {
|
|
version = "~> 0.4"
|
|
}
|
|
|
|
provider "azurerm" {
|
|
version = "~> 1.31"
|
|
}
|
|
|
|
provider "random" {
|
|
version = "~> 2.1"
|
|
}
|
|
|
|
variable "location" {
|
|
description = "Azure datacenter to deploy to."
|
|
default = "westus2"
|
|
}
|
|
|
|
variable "servicebus_name_prefix" {
|
|
description = "Input your unique Azure Service Bus Namespace name"
|
|
default = "azuresbtests"
|
|
}
|
|
|
|
variable "resource_group_name_prefix" {
|
|
description = "Resource group to provision test infrastructure in."
|
|
default = "servicebus-go-tests"
|
|
}
|
|
|
|
variable "azure_client_secret" {
|
|
description = "(Optional) piped in from env var so .env will be updated if there is an existing client secret"
|
|
default = "foo"
|
|
}
|
|
|
|
resource "random_string" "name" {
|
|
length = 8
|
|
upper = false
|
|
special = false
|
|
number = false
|
|
}
|
|
|
|
# Create resource group for all of the things
|
|
resource "azurerm_resource_group" "test" {
|
|
name = "${var.resource_group_name_prefix}-${random_string.name.result}"
|
|
location = var.location
|
|
}
|
|
|
|
resource "azurerm_servicebus_namespace" "test" {
|
|
name = "${var.servicebus_name_prefix}-${random_string.name.result}"
|
|
location = azurerm_resource_group.test.location
|
|
resource_group_name = azurerm_resource_group.test.name
|
|
sku = "standard"
|
|
}
|
|
|
|
# Generate a random secret fo the service principal
|
|
resource "random_string" "secret" {
|
|
count = data.azurerm_client_config.current.service_principal_application_id == "" ? 1 : 0
|
|
length = 32
|
|
upper = true
|
|
special = true
|
|
number = true
|
|
}
|
|
|
|
// Application for AAD authentication
|
|
resource "azuread_application" "test" {
|
|
count = data.azurerm_client_config.current.service_principal_application_id == "" ? 1 : 0
|
|
name = "servicebustest"
|
|
homepage = "https://servicebustest-${random_string.name.result}"
|
|
identifier_uris = ["https://servicebustest-${random_string.name.result}"]
|
|
reply_urls = ["https://servicebustest-${random_string.name.result}"]
|
|
available_to_other_tenants = false
|
|
oauth2_allow_implicit_flow = true
|
|
}
|
|
|
|
# Create a service principal, which represents a linkage between the AAD application and the password
|
|
resource "azuread_service_principal" "test" {
|
|
count = data.azurerm_client_config.current.service_principal_application_id == "" ? 1 : 0
|
|
application_id = azuread_application.test[0].application_id
|
|
}
|
|
|
|
# Create a new service principal password which will be the AZURE_CLIENT_SECRET env var
|
|
resource "azuread_service_principal_password" "test" {
|
|
count = data.azurerm_client_config.current.service_principal_application_id == "" ? 1 : 0
|
|
service_principal_id = azuread_service_principal.test[0].id
|
|
value = random_string.secret[0].result
|
|
end_date = "2030-01-01T01:02:03Z"
|
|
}
|
|
|
|
# This provides the new AAD application the rights to managed, send and receive from the Event Hubs instance
|
|
resource "azurerm_role_assignment" "service_principal_eh" {
|
|
count = data.azurerm_client_config.current.service_principal_application_id == "" ? 1 : 0
|
|
scope = "subscriptions/${data.azurerm_client_config.current.subscription_id}/resourceGroups/${azurerm_resource_group.test.name}/providers/Microsoft.ServiceBus/namespaces/${azurerm_servicebus_namespace.test.name}"
|
|
role_definition_name = "Owner"
|
|
principal_id = azuread_service_principal.test[0].id
|
|
}
|
|
|
|
# This provides the new AAD application the rights to managed the resource group
|
|
resource "azurerm_role_assignment" "service_principal_rg" {
|
|
count = data.azurerm_client_config.current.service_principal_application_id == "" ? 1 : 0
|
|
scope = "subscriptions/${data.azurerm_client_config.current.subscription_id}/resourceGroups/${azurerm_resource_group.test.name}"
|
|
role_definition_name = "Owner"
|
|
principal_id = azuread_service_principal.test[0].id
|
|
}
|
|
|
|
# Most tests should create and destroy their own Queues, Topics, and Subscriptions. However, to keep examples from being
|
|
# bloated, the items below are created externally by Terraform.
|
|
|
|
resource "azurerm_servicebus_queue" "scheduledMessages" {
|
|
name = "scheduledmessages"
|
|
resource_group_name = azurerm_resource_group.test.name
|
|
namespace_name = azurerm_servicebus_namespace.test.name
|
|
}
|
|
|
|
resource "azurerm_servicebus_queue" "queueSchedule" {
|
|
name = "schedulewithqueue"
|
|
resource_group_name = azurerm_resource_group.test.name
|
|
namespace_name = azurerm_servicebus_namespace.test.name
|
|
}
|
|
|
|
resource "azurerm_servicebus_queue" "helloworld" {
|
|
name = "helloworld"
|
|
resource_group_name = azurerm_resource_group.test.name
|
|
namespace_name = azurerm_servicebus_namespace.test.name
|
|
}
|
|
|
|
resource "azurerm_servicebus_queue" "receiveSession" {
|
|
name = "receivesession"
|
|
resource_group_name = azurerm_resource_group.test.name
|
|
namespace_name = azurerm_servicebus_namespace.test.name
|
|
default_message_ttl = "PT300S"
|
|
requires_session = true
|
|
}
|
|
|
|
# Data resources used to get SubID and Tennant Info
|
|
data "azurerm_client_config" "current" {}
|
|
|
|
output "TEST_SERVICEBUS_RESOURCE_GROUP" {
|
|
value = azurerm_resource_group.test.name
|
|
}
|
|
|
|
output "SERVICEBUS_CONNECTION_STRING" {
|
|
value = "Endpoint=sb://${azurerm_servicebus_namespace.test.name}.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=${azurerm_servicebus_namespace.test.default_primary_key}"
|
|
sensitive = true
|
|
}
|
|
|
|
output "AZURE_SUBSCRIPTION_ID" {
|
|
value = data.azurerm_client_config.current.subscription_id
|
|
}
|
|
|
|
output "TEST_SERVICEBUS_LOCATION" {
|
|
value = azurerm_servicebus_namespace.test.location
|
|
}
|
|
|
|
output "AZURE_TENANT_ID" {
|
|
value = data.azurerm_client_config.current.tenant_id
|
|
}
|
|
|
|
output "AZURE_CLIENT_ID" {
|
|
value = compact(concat(azuread_application.test.*.application_id, list(data.azurerm_client_config.current.client_id)))[0]
|
|
}
|
|
|
|
output "AZURE_CLIENT_SECRET" {
|
|
value = compact(concat(azuread_service_principal_password.test.*.value, list(var.azure_client_secret)))[0]
|
|
sensitive = true
|
|
}
|