private/Start-AzBootstrapInteractiveMode.ps1
function Start-AzBootstrapInteractiveMode { [CmdletBinding()] [OutputType([hashtable])] param( [Parameter(Mandatory)] [hashtable]$defaults ) Write-Host "`n" -NoNewline Write-BootstrapLog "Interactive Mode - Enter required values or press Enter to accept defaults`n" # Determine initial environment from defaults $initialEnv = $defaults.InitialEnvironmentName # Prompt for template repo URL $templateRepoUrl = Read-Host "Enter Template Repository URL [kewalaka/terraform-azure-starter-template]" if ([string]::IsNullOrWhiteSpace($templateRepoUrl)) { $templateRepoUrl = "kewalaka/terraform-azure-starter-template" } $defaults.TemplateRepoUrl = $templateRepoUrl # Prompt for Target Repository Name do { $targetRepoName = Read-Host "Enter Target Repository Name [$($defaults.TargetRepoName)]" if ([string]::IsNullOrWhiteSpace($targetRepoName)) { $targetRepoName = $defaults.TargetRepoName } if ([string]::IsNullOrWhiteSpace($targetRepoName)) { Write-Host "Target Repository Name cannot be empty." } } while ([string]::IsNullOrWhiteSpace($targetRepoName)) $defaults.TargetRepoName = $targetRepoName # Default storage account name $randomPadding = Get-Random -Minimum 100 -Maximum 999 $defaultStorageAccountName = "st$($defaults.TargetRepoName)$initialEnv$randomPadding" -replace '[^a-z0-9]', '' if ($defaultStorageAccountName.Length -gt 24) { $defaultStorageAccountName = $defaultStorageAccountName.Substring(0, 24) } $defaults.TerraformStateStorageAccountName = $defaultStorageAccountName # Azure Location $location = Read-Host "Enter Azure Location [$($defaults.Location)]" if ([string]::IsNullOrWhiteSpace($location)) { $location = $defaults.Location } $defaults.Location = $location # Resource Group $defaultResourceGroupName = if (-not [string]::IsNullOrWhiteSpace($defaults.ResourceGroupName)) { $defaults.ResourceGroupName } else { "rg-$($defaults.TargetRepoName)-$initialEnv" } $resourceGroupName = Read-Host "Enter Resource Group Name [$defaultResourceGroupName]" if ([string]::IsNullOrWhiteSpace($resourceGroupName)) { $resourceGroupName = $defaultResourceGroupName } $defaults.ResourceGroupName = $resourceGroupName # Managed identities. Use the helper to generate a name unless overriden # Prompt for Plan Managed Identity Name with default fallback $defaultPlanMi = Get-ManagedIdentityName -BaseName $defaults.TargetRepoName -Environment $initialEnv -Type 'plan' -Override $defaults.PlanManagedIdentityName $inputPlanMi = Read-Host "Enter Plan Managed Identity Name [$($defaultPlanMi)]" if ([string]::IsNullOrWhiteSpace($inputPlanMi)) { $planManagedIdentityName = $defaultPlanMi } else { $planManagedIdentityName = $inputPlanMi } $defaults.PlanManagedIdentityName = $planManagedIdentityName # Prompt for Apply Managed Identity Name with default fallback $defaultApplyMi = Get-ManagedIdentityName -BaseName $defaults.TargetRepoName -Environment $initialEnv -Type 'apply' -Override $defaults.ApplyManagedIdentityName $inputApplyMi = Read-Host "Enter Apply Managed Identity Name [$($defaultApplyMi)]" if ([string]::IsNullOrWhiteSpace($inputApplyMi)) { $applyManagedIdentityName = $defaultApplyMi } else { $applyManagedIdentityName = $inputApplyMi } $defaults.ApplyManagedIdentityName = $applyManagedIdentityName # Do you want a Terraform state storage account? (default yes) $useTerraformStorage = Read-Host "Would you like to create a Terraform State Storage Account? [Y/n]" if ([string]::IsNullOrWhiteSpace($useTerraformStorage)) { $useTerraformStorage = 'y' } if ($useTerraformStorage -match '^[yY]$') { do { $storageAccountName = Read-Host "Enter Terraform State Storage Account Name [$($defaults.TerraformStateStorageAccountName)]" if ([string]::IsNullOrWhiteSpace($storageAccountName)) { $storageAccountName = $defaults.TerraformStateStorageAccountName } Write-BootstrapLog "Checking if Storage Account '$storageAccountName' is valid and available..." $valid = Test-AzStorageAccountName -StorageAccountName $storageAccountName } while (-not $valid) $defaults.TerraformStateStorageAccountName = $storageAccountName } else { $defaults.TerraformStateStorageAccountName = $null } Write-Host "`n" -NoNewline return $defaults } |