tools/e2etesting/DeployStandalone.ps1 (99 lines of code) (raw):
Param(
[string]
$ResourceGroupName,
[Guid]
$TenantId,
[string]
$Region = "EastUS",
[string]
$ServicePrincipalId
)
# Stop execution when an error occurs.
$ErrorActionPreference = "Stop"
if (!$ResourceGroupName) {
Write-Error "ResourceGroupName not set."
}
if (!$Region) {
Write-Error "Region not set."
}
if (!$ServicePrincipalId) {
Write-Warning "ServicePrincipalId not set, cannot update permissions."
}
## Login if required
Write-Host "Getting Azure Context..."
$context = Get-AzContext
if (!$context) {
Write-Host "Logging in..."
Login-AzAccount -Tenant $TenantId
$context = Get-AzContext
}
if (!$TenantId) {
$TenantId = $context.Tenant.Id
Write-Host "Using TenantId $($TenantId)."
}
## Check if resource group exists
$resourceGroup = Get-AzResourceGroup -Name $resourceGroupName -ErrorAction SilentlyContinue
if (!$resourceGroup) {
Write-Host "Creating Resource Group $($ResourceGroupName) in $($Region)..."
$resourceGroup = New-AzResourceGroup -Name $ResourceGroupName -Location $Region
}
Write-Host "Resource Group: $($resourceGroup.ResourceGroupName)"
## Determine suffix for testing resources
if (!$resourceGroup.Tags) {
$resourceGroup.Tags = @{}
}
$testSuffix = $resourceGroup.Tags["TestingResourcesSuffix"]
if (!$testSuffix) {
$testSuffix = Get-Random -Minimum 10000 -Maximum 99999
$tags = $resourceGroup.Tags
$tags+= @{"TestingResourcesSuffix" = $testSuffix}
Set-AzResourceGroup -Name $resourceGroup.ResourceGroupName -Tag $tags | Out-Null
$resourceGroup = Get-AzResourceGroup -Name $resourceGroup.ResourceGroupName
}
Write-Host "Resources Suffix: $($testSuffix)"
$iotHubName = "e2etesting-iotHub-$($testSuffix)"
$keyVaultName = "e2etestingkeyVault$($testSuffix)"
Write-Host "IoT Hub: $($iotHubName)"
Write-Host "Key Vault: $($keyVaultName)"
## Ensure IoT Hub
$iotHub = Get-AzIotHub -ResourceGroupName $ResourceGroupName -Name $iotHubName -ErrorAction SilentlyContinue
if (!$iotHub) {
Write-Host "Creating IoT Hub $($iotHubName)..."
$iotHub = New-AzIotHub -ResourceGroupName $ResourceGroupName -Name $iotHubName -SkuName S1 -Units 1 -Location $resourceGroup.Location
}
# Ensure Event Hub additional consumer group for tests
$cgName = "TestConsumer"
$iotHubCg = Get-AzIotHubEventHubConsumerGroup -ResourceGroupName $ResourceGroupName -Name $iotHubName | Where-Object Name -eq $cgName
if (!$iotHubCg) {
Write-Host "Creating IoT Hub Event Hub Consumer Group $($cgName)..."
$iotHubCg = Add-AzIotHubEventHubConsumerGroup -ResourceGroupName $ResourceGroupName -Name $iotHubName -EventHubConsumerGroupName $cgName
}
## Ensure KeyVault
$keyVault = Get-AzKeyVault -ResourceGroupName $ResourceGroupName -VaultName $keyVaultName -ErrorAction SilentlyContinue
if (!$keyVault) {
Write-Host "Creating Key Vault $($keyVaultName)"
$keyVault = New-AzKeyVault -ResourceGroupName $ResourceGroupName -VaultName $keyVaultName -Location $resourceGroup.Location -DisableRbacAuthorization
}
else {
$keyVault | Update-AzKeyVault -DisableRbacAuthorization
}
if ($ServicePrincipalId) {
Write-Host "Setting Key Vault Permissions for Service Principal $($ServicePrincipalId)..."
Set-AzKeyVaultAccessPolicy -VaultName $KeyVaultName -ResourceGroupName $ResourceGroupName -ServicePrincipalName $ServicePrincipalId -PermissionsToSecrets get,list,set
}
$connectionString = Get-AzIotHubConnectionString $ResourceGroupName -Name $iothub.Name -KeyName "iothubowner"
$SubscriptionId = $context.Subscription.Id
Write-Host "Adding/Updating KeyVault-Secret 'PCS-IOTHUB-CONNSTRING' with value '***'..."
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingConvertToSecureStringWithPlainText", "")]
$secret = ConvertTo-SecureString $connectionString.PrimaryConnectionString -AsPlainText -Force
Set-AzKeyVaultSecret -VaultName $keyVault.VaultName -Name 'PCS-IOTHUB-CONNSTRING' -SecretValue $secret | Out-Null
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingConvertToSecureStringWithPlainText", "")]
$secret = ConvertTo-SecureString $TenantId -AsPlainText -Force
Set-AzKeyVaultSecret -VaultName $keyVault.VaultName -Name 'PCS-AUTH-TENANT' -SecretValue $secret | Out-Null
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingConvertToSecureStringWithPlainText", "")]
$secret = ConvertTo-SecureString $SubscriptionId -AsPlainText -Force
Set-AzKeyVaultSecret -VaultName $keyVault.VaultName -Name 'PCS-SUBSCRIPTION-ID' -SecretValue $secret | Out-Null
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingConvertToSecureStringWithPlainText", "")]
$secret = ConvertTo-SecureString $ResourceGroupName -AsPlainText -Force
Set-AzKeyVaultSecret -VaultName $keyVault.VaultName -Name 'PCS-RESOURCE-GROUP' -SecretValue $secret | Out-Null
Write-Host "Deployment finished."