GcpPrepareApi.ps1


Class GcpPrepareApi : PrepareApi
{
    # properties
    [string]$GcpZone
    [string]$VpcNetworkName
    [string]$VpcNetworkSubnetName
    [string]$NetworkTags
    [bool]$UsePublicIP

    # Default constructor
    GcpPrepareApi([hashtable]$values) : base ($values) {
        $this.CopyValues(@{
            GcpZone = @{
                required = $False
                default = "us-east4-a"
            }
            VpcNetworkName = @{
                required = $True
            }
            VpcNetworkSubnetName = @{
                required = $False
                default = $Null
            }
            UsePublicIP = @{
                required = $False
                default = $False
            }
            NetworkTags = @{
                required = $False
                default = $Null
            }
        }, $values)
    }

    # POST ProcessImage
    [string]PostProcessImageJob([string]$resourceLocationId)
    {
        LogIt "Creating GCP prepare Job"

        # Create a jobData object
        $prepareData = @{
            zone = $this.GcpZone
            VpcNetworkName = $this.VpcNetworkName
            UsePublicIP = $this.UsePublicIP
            targetImageName = $this.CloudDiskName
        }
        if ($this.VpcNetworkSubnetName) {
            $prepareData["VpcNetworkSubnetName"] = $this.VpcNetworkSubnetName
        }
        if ($this.NetworkTags) {
            $prepareData["NetworkTags"] = $this.VpcNetworkName
        }

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

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