mirror of
https://github.com/actions/runner-images.git
synced 2025-12-10 19:16:48 +00:00
* Don't assume JSON output Specify JSON output, since it's required. The default can be changed. * Make actions easier to track To make cleanup easier, use the same GUID for all components and report at the end on what was created.
77 lines
3.8 KiB
PowerShell
77 lines
3.8 KiB
PowerShell
Function CreateAzureVMFromPackerTemplate {
|
|
<#
|
|
.SYNOPSIS
|
|
A helper function to deploy a VM from a generated image.
|
|
|
|
.DESCRIPTION
|
|
Creates an Azure VM from a template. Also generates network resources in Azure to make the VM accessible.
|
|
|
|
.PARAMETER SubscriptionId
|
|
The Azure subscription Id where resources will be created.
|
|
|
|
.PARAMETER ResourceGroupName
|
|
The Azure resource group name where the Azure virtual machine will be created.
|
|
|
|
.PARAMETER TemplatFilePath
|
|
The path for the json template generated by packer during image generation locally.
|
|
|
|
.PARAMETER VirtualMachineName
|
|
The name of the virtual machine to be generated.
|
|
|
|
.PARAMETER AdminUserName
|
|
The administrator username for the virtual machine to be created.
|
|
|
|
.PARAMETER AdminPassword
|
|
The administrator password for the virtual machine to be created.
|
|
|
|
.PARAMETER AzureLocation
|
|
The location where the Azure virtual machine will be provisioned. Example: "eastus"
|
|
|
|
.EXAMPLE
|
|
CreateAzureVMFromPackerTemplate -SubscriptionId {YourSubscriptionId} -ResourceGroupName {ResourceGroupName} -TemplateFile "C:\BuildVmImages\temporaryTemplate.json" -VirtualMachineName "testvm1" -AdminUsername "shady1" -AdminPassword "SomeSecurePassword1" -AzureLocation "eastus"
|
|
#>
|
|
param (
|
|
[Parameter(Mandatory = $True)]
|
|
[string] $SubscriptionId,
|
|
[Parameter(Mandatory = $True)]
|
|
[string] $ResourceGroupName,
|
|
[Parameter(Mandatory = $True)]
|
|
[string] $TemplateFilePath,
|
|
[Parameter(Mandatory = $True)]
|
|
[string] $VirtualMachineName,
|
|
[Parameter(Mandatory = $True)]
|
|
[string] $AdminUsername,
|
|
[Parameter(Mandatory = $True)]
|
|
[string] $AdminPassword,
|
|
[Parameter(Mandatory = $True)]
|
|
[string] $AzureLocation
|
|
)
|
|
|
|
$vmSize = "Standard_DS2_v2"
|
|
$guid = [System.GUID]::NewGuid().ToString().ToUpper()
|
|
$vnetName = $env:UserName + "vnet-" + $guid
|
|
$subnetName = $env:UserName + "subnet-" + $guid
|
|
$nicName = $env:UserName + "nic-" + $guid
|
|
$publicIpName = $env:UserName + "pip-" + $guid
|
|
|
|
Write-Host "Creating a virtual network and subnet"
|
|
($vnet = az network vnet create -g $ResourceGroupName -l $AzureLocation -n $vnetName --address-prefixes 10.0.0.0/16 --subnet-name $subnetName --subnet-prefixes 10.0.1.0/24 --subscription $subscriptionId -o json)
|
|
$subnetId = ($vnet | ConvertFrom-Json).newVNet.subnets[0].id
|
|
|
|
Write-Host "`nCreating a network interface controller (NIC)"
|
|
($nic = az network nic create -g $ResourceGroupName -l $AzureLocation -n $nicName --subnet $subnetId --subscription $subscriptionId -o json)
|
|
$networkId = ($nic | ConvertFrom-Json).NewNIC.id
|
|
|
|
Write-Host "`nCreating a public IP address"
|
|
($publicIp = az network public-ip create -g $ResourceGroupName -l $AzureLocation -n $publicIpName --allocation-method Static --sku Standard --version IPv4 --subscription $subscriptionId -o json)
|
|
$publicIpId = ($publicIp | ConvertFrom-Json).publicIp.id
|
|
|
|
Write-Host "`nAdding the public IP to the NIC"
|
|
az network nic ip-config update -g $ResourceGroupName -n ipconfig1 --nic-name $nicName --public-ip-address $publicIpId --subscription $subscriptionId
|
|
|
|
Write-Host "`nCreating the VM"
|
|
az group deployment create -g $ResourceGroupName -n $VirtualMachineName --subscription $subscriptionId --template-file $templateFilePath --parameters vmSize=$vmSize vmName=$VirtualMachineName adminUserName=$AdminUsername adminPassword=$AdminPassword networkInterfaceId=$networkId
|
|
|
|
Write-Host "`nCreated in $(ResourceGroupName):`n vnet $(vnetName)`n subnet $(subnetName)`n nic $(nicName)`n publicip $(publicIpName)`n vm $(VirtualMachineName)"
|
|
}
|