AzurePrepareApi.ps1


Class AzurePrepareApi : PrepareApi
{
    # properties
    [string]$AzureSubscriptionId
    [string]$AzureLocation
    [string]$TargetResourceGroup
    [string]$AzureVirtualNetworkResourceGroupName
    [string]$AzureVirtualNetworkName
    [string]$AzureVirtualNetworkSubnetName
    [bool]$UsePublicIP
    [string]$AzureVmResourceGroup

    # Default constructor
    AzurePrepareApi([hashtable]$values) : base ($values) {
        $this.CopyValues(@{
        AzureSubscriptionId = @{
                required = $True
            }
            AzureLocation = @{
                required = $False
                default = "eastus"
            }
            TargetResourceGroup = @{
                required = $True
            }
            AzureVirtualNetworkResourceGroupName = @{
                required = $True
            }
            AzureVirtualNetworkName = @{
                required = $True
            }
            AzureVirtualNetworkSubnetName = @{
                required = $True
            }
            UsePublicIP = @{
                required = $False
                default = $False
            }            
            AzureVmResourceGroup = @{
                required = $False
                default = $False
            } 
        }, $values)
    }

    # POST ProcessImage
    [string]PostProcessImageJob([string]$resourceLocationId)
    {
        LogIt "Creating Azure prepare Job for disk resource group $($this.TargetResourceGroup) disk $($this.CloudDiskName)"

        # Create a jobData object
        $prepareData = @{
            subscriptionId = $this.AzureSubscriptionId
            azureRegion = $this.AzureLocation
            ceVmSku = "Standard_D2s_v3"
            targetDiskResourceGroupName = $this.TargetResourceGroup
            targetDiskName = $this.CloudDiskName
            VirtualNetworkResourceGroupName = $this.AzureVirtualNetworkResourceGroupName
            VirtualNetworkName = $this.AzureVirtualNetworkName
            VirtualNetworkSubnetName = $this.AzureVirtualNetworkSubnetName
            UsePublicIP = $this.UsePublicIP
            resourceGroup = $this.AzureVmResourceGroup
        }

        return ([PrepareApi]$this).PostProcessImageJob($resourceLocationId, "Azure", $prepareData)
    }
}

Function New-AzurePrepareApi([hashtable]$values) {
    return [AzurePrepareApi]::New($values)
}