mirror of
https://github.com/actions/runner-images.git
synced 2025-12-10 02:46:51 +00:00
86 lines
3.8 KiB
PowerShell
86 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 ManagedImageName
|
|
The name of the managed image to be used to create the virtual machine.
|
|
|
|
.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 {SubscriptionId} -ResourceGroupName {ResourceGroupName} -VirtualMachineName "testvm1" -ManagedImageName {ManagedImageName} -AdminUsername "shady1" -AdminPassword "SomeSecurePassword1" -AzureLocation "eastus"
|
|
#>
|
|
param (
|
|
[Parameter(Mandatory = $True)]
|
|
[string] $SubscriptionId,
|
|
[Parameter(Mandatory = $True)]
|
|
[string] $ResourceGroupName,
|
|
[Parameter(Mandatory = $True)]
|
|
[string] $ManagedImageName,
|
|
[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 Basic --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 vm create `
|
|
--resource-group $ResourceGroupName `
|
|
--name $VirtualMachineName `
|
|
--image $ManagedImageName `
|
|
--size $vmSize `
|
|
--admin-username $AdminUsername `
|
|
--admin-password $AdminPassword `
|
|
--nics $networkId `
|
|
--subscription $subscriptionId `
|
|
--location $AzureLocation
|
|
|
|
Write-Host "`nCreated in ${ResourceGroupName}:`n vnet ${vnetName}`n subnet ${subnetName}`n nic ${nicName}`n publicip ${publicIpName}`n vm ${VirtualMachineName}"
|
|
}
|