CoreOps/HostMappings/New-SDPHostMapping.ps1

function New-SDPHostMapping {
    param(
        [parameter(Mandatory,ValueFromPipelineByPropertyName)]
        [Alias('pipeName')]
        [string] $hostName,
        [parameter()]
        [string] $volumeName,
        [parameter()]
        [int] $lun,
        [parameter()]
        [Alias('snapshotName')]
        [string] $viewName,
        [parameter()]
        [string] $k2context = 'k2rfconnection'
    )
    <#
        .SYNOPSIS
        Map a host to an existing volume.

        .EXAMPLE
        New-SDPHostMapping -hostName Host01 -volumeName Vol01

        .EXAMPLE
        Get-SDPHost -name Host01 | New-SDPHostMapping -volumeName Vol01

        .DESCRIPTION
        This function will map a host to any qualifying volume. Accepts piped into from Get-SDPHost

        .NOTES
        Authored by J.R. Phillips (GitHub: JayAreP)

        .LINK
        https://www.github.com/JayAreP/K2RF/

    #>

    begin {
        $endpoint = 'mappings'
    }

    process{
        ## Special Ops
        
        $hostid = Get-SDPHost -name $hostName -k2context $k2context
        $hostPath = ConvertTo-SDPObjectPrefix -ObjectPath "hosts" -ObjectID $hostid.id -nestedObject

        if ($hostid.host_) {
            $message = "Host $hostName is a member of a host group, please use New-SDPHostMapping for the parent or select an unused host."
            Write-Error $message
        }

        if ($volumeName) {
            $volumeid = Get-SDPVolume -name $volumeName -k2context $k2context
            $volumePath = ConvertTo-SDPObjectPrefix -ObjectPath "volumes" -ObjectID $volumeid.id -nestedObject
        } elseif ($viewName) {
            $volumeid = Get-SDPVolumeGroupView -name $viewName -k2context $k2context
            $volumePath = ConvertTo-SDPObjectPrefix -ObjectPath "snapshots" -ObjectID $volumeid.id -nestedObject
        } else {
            $message = "Please supply either a -volumeName or -viewName"
            return $message | Write-error
        }

        $o = New-Object psobject
        $o | Add-Member -MemberType NoteProperty -Name "host" -Value $hostPath
        $o | Add-Member -MemberType NoteProperty -Name "volume" -Value $volumePath

        $body = $o

        ## Make the call
        try {
            Invoke-SDPRestCall -endpoint $endpoint -method POST -body $body -k2context $k2context -erroraction silentlycontinue -TimeOut 5
        } catch {
            return $Error[0]
        }

        $response = Get-SDPHostMapping -hostName $hostName -volumeName $volumeName
        if ($lun) {
            $response = Set-SDPHostMapping -id $response.id -lun $lun
        }
        return $response
        
    }
}