initiatorGroup.psm1


$InitiatorGroupsDefaultProperties = ('name', 'index', 'sys-name', 'num-of-initiators', 'num-of-vols', 'iops')

.(commonLib) 
  

Function Get-XtremInitiatorGroups {
  <#
    .DESCRIPTION
    Displays the list of all Initiator Groups.
 
    .PARAMETER Properties
    Array of properties requested from this call.
 
    .PARAMETER Filters
    Array of filters for this call.
 
    .PARAMETER ShowRest
    Return an object represents the REST operation including URI , Method and JSON
 
    .EXAMPLE
    Get-XtremInitiatorGroups
  #>

    [cmdletbinding()]
    [Alias('xmsInitiatorGroupList')]
    Param (
        [parameter()]
        $XtremClusterName =  (Get-XtremDefaultSession)._XtremClusterName,
        [parameter()]
        [Alias("Properties")]
        [Argumentcompleter( { doComplete $args 'initiator-groups' prop })] 
        [string[]]$Property = $InitiatorGroupsDefaultProperties,
        [parameter()]
        [Alias("Filters")]
        [Argumentcompleter( { doComplete $args 'initiator-groups' filter })] 
        [string[]]$Filter,
        [Parameter()]
        [object]$Session =  (Get-XtremDefaultSession),
        [Parameter()]
        [switch]$ShowRest,
        [Parameter()]
        [switch]$Full = $false
    )
    initCommand
    
    $Route = '/types/initiator-groups'

    if ($Full) { $Property = '' }
    
    $result = NewXtremRequest -Method GET -Endpoint $Route -Session $Session -XtremClusterName $XtremClusterName -Properties $Property -ObjectSelection $ObjectSelection -Filters $Filter -ShowRest:$ShowRest.IsPresent -Multi -Full:$Full.IsPresent

    $result = formatOutPut $Property $result
    
    finalizeCommand
    return $result
}

Function Get-XtremInitiatorGroup{
<#
    .DESCRIPTION
    displays the name and index number of the selected Initiator Group.
 
    .PARAMETER InitiatorGroupName
    Initiator Group's name or index number.
 
    .PARAMETER Properties
    Array of properties requested from this call.
 
    .PARAMETER ShowRest
    Return an object represents the REST operation including URI , Method and JSON
 
    .EXAMPLE
    Get-XtremInitiatorGroup -InitiatorGroupName initiatorName
  #>

    [cmdletbinding()]
    [Alias('xmsInitiatorGroupGet')]
    Param (
        [parameter()]
        $XtremClusterName =  (Get-XtremDefaultSession)._XtremClusterName,
        [Alias("Name", "Index")]
        [parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, Position = 0)]
        [Argumentcompleter( { doComplete $args 'initiator-groups' name })] 
        $InitiatorGroupName,
        [Parameter()]
        [Alias("Properties")]
        [Argumentcompleter( { doComplete $args 'initiator-groups' prop })] 
        [string[]]$Property,
        [Parameter()]
        [object]$Session =  (Get-XtremDefaultSession),
        [Parameter()]
        [switch]$ShowRest
    )
    
    $Route = '/types/initiator-groups'
    $Route, $GetProperty = SetParametersForRequest $Route $InitiatorGroupName

    initCommand
    
    $result = NewXtremRequest -Method GET -Endpoint $Route -Session $Session -XtremClusterName $XtremClusterName -ObjectSelection $ObjectSelection -GetProperty $GetProperty -Properties $Property -ShowRest:$ShowRest.IsPresent

    $result = formatOutPut $Property $result

    finalizeCommand
    return $result
}


Function New-XtremInitiatorGroup {
<#
    .DESCRIPTION
    Enables you to add an Initiator Group and its Initiators to the XtremIO cluster.
 
    .PARAMETER InitiatorGroupName
    Initiator Group's name.
 
    .PARAMETER operatigSystem
    Initiators operating System.
 
    .PARAMETER InitiatorList
    List of associated Initiators (port adressess)
 
    .PARAMETER TagList
    Tag ID list
 
    .PARAMETER QoSEnabledMode
    QosEnabledMode
 
    .PARAMETER QoSPolicyId
    QoSPolicyId
 
    .PARAMETER ShowRest
    Return an object represents the REST operation including URI , Method and JSON
 
    .EXAMPLE
    New-XtremInitiatorGroup -InitiatorGroupName mygroup
  #>

    [CmdletBinding()]
    [Alias('xmsInitiatorGroupCreate')]
    Param (
        [Parameter()]
        $XtremClusterName =  (Get-XtremDefaultSession)._XtremClusterName,
        [Alias("Name", "Index")]
        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, Position = 0)]
        [Argumentcompleter( { doComplete $args 'initiator-groups' name })]
        [ValidatePattern("^[^\[\]&\(\)`";,<>'/]+$")] 
        [String]$InitiatorGroupName,
        [Parameter()]
        [ValidateSet("esx", "Linux", "Windows", "Solaris", "AIX", "HP-UX", "Other")]
        [string]$operatigSystem = 'esx',
        [Parameter()]
        [ArgumentCompleter( {
                param ( $commandName,
                    $parameterName,
                    $wordToComplete,
                    $commandAst,
                    $fakeBoundParameters )

                $vals = (Invoke-XtremGetRequest '/types/discover-initiators' port-address) | foreach { $_."port-type" + '-' + $_."port-address"}
                $vals = removeEntredVals $commandAst $vals                    
                    $vals | Where-Object {
                        $_ -like "$wordToComplete*"
                    }
            } )]
        [String[]]$InitiatorList,
        [Parameter()]
        [Array]$TagList,
        [Parameter()]
        [ValidateSet('enabled','disabled','monitor_only')]
        [String]$QoSEnabledMode,
        [Parameter()]
        [String]$QoSPolicyId,
        [Parameter()]
        [object]$Session =  (Get-XtremDefaultSession),
        [Parameter()]
        [switch]$ShowRest
    )
    $Route = '/types/initiator-groups'
    $BodyList = @{ }

    
    AddIfExists -name "cluster-id" -value $XtremClusterName -list $BodyList
    AddIfExists -name "ig-name" -value $InitiatorGroupName -list $BodyList
    AddIfExists -name "initiator-list" -value (getInitiatorsInfo) -list $BodyList
    AddIfExists -name "tag-list" -value $TagList -list $BodyList
    AddIfExists -name "qos-enabled-mode" -value $QoSEnabledMode -list $BodyList
    AddIfExists -name "qos-policy-id" -value $QoSPolicyId -list $BodyList
    AddIfExists -name "created-by-external-client" -value 'PowerShell' -list $BodyList

    initCommand
    
    $Body = BuildXtremJson -list $BodyList 
    
    $result = NewXtremRequest -Method POST -Endpoint $Route -Session $Session -Body $Body -ObjectSelection $ObjectSelection -ShowRest:$ShowRest.IsPresent

    finalizeCommand
    return $result
}

function getInitiatorsInfo(){
    $outList = [System.Collections.ArrayList]@()

    for ($i = 0; $i -lt $InitiatorList.Count; $i++) {
        $intrName = $InitiatorList[$i]
        $intr = @{}
        $nArr = $intrName -split '-'
        $intr."initiator-name" = $InitiatorGroupName+'-'+$nArr[0]+'-'+($i+1)
        $intr."port-address" =  $nArr[1]
        $intr."operating-system" =  $operatigSystem
        [void]($outList.Add($intr))
    }
    return $outList
}

Function Set-XtremInitiatorGroup {
 <#
    .DESCRIPTION
    Enables you to rename an Initiator Group
 
    .PARAMETER InitiatorGroupName
    Initiator Group's name.
 
    .PARAMETER NewName
    Initiator Group's new name
 
    .PARAMETER TagList
    Tag ID list
 
    .PARAMETER QoSEnabledMode
    QosEnabledMode
 
    .PARAMETER QoSPolicyId
    QoSPolicyId
 
    .PARAMETER OperatingSystem
    Operating System (e.g. Linux,Windows, ESX, Solaris, AIX, HP-UX)
 
    .PARAMETER ShowRest
    Return an object represents the REST operation including URI , Method and JSON
 
    .EXAMPLE
    Set-XtremInitiatorGroup -InitiatorGroupName mygroup -NewName mynewgroup
  #>

    [CmdletBinding()]
    [Alias('xmsInitiatorGroupModify')]
    Param (
        [Parameter()]
        $XtremClusterName =  (Get-XtremDefaultSession)._XtremClusterName,
        [Alias("Name", "Index")]
        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, Position = 0)]
        [Argumentcompleter( { doComplete $args 'initiator-groups' name })] 
        $InitiatorGroupName,
        [Parameter()]
        [ValidatePattern("^[^\[\]&\(\)`";,<>'/]+$")] 
        [String]$NewName,
        [Parameter()]
        [Array]$TagList,
        [Parameter()]
        [ValidateSet('enabled','disabled','monitor_only')]
        [String]$QoSEnabledMode,
        [Parameter()]
        $QoSPolicyId,
        [Parameter()]
        [ValidateSet("linux", "windows", "esx", "solaris", "aix", "hpux", "other")]
        [String]$OperatingSystem,
        [Parameter()]
        [object]$Session =  (Get-XtremDefaultSession),
        [Parameter()]
        [switch]$ShowRest
    )
    
    $Route = '/types/initiator-groups'
    $Route, $GetProperty = SetParametersForRequest $Route $InitiatorGroupName
    
    $BodyList = @{ }
    
    AddIfExists -name "cluster-id" -value $XtremClusterName -list $BodyList
    AddIfExists -name "new-name" -value $NewName -list $BodyList
    AddIfExists -name "qos-enabled-mode" -value $QoSEnabledMode -list $BodyList
    AddIfExists -name "qos-policy-id" -value $QoSPolicyId -list $BodyList
    AddIfExists -name "operating-system" -value $OperatingSystem -list $BodyList

    initCommand
    
    $Body = BuildXtremJson -list $BodyList
    
    
    $result = NewXtremRequest -Method PUT -Endpoint $Route -Session $Session -XtremClusterName $XtremClusterName -Body $Body -ObjectSelection $ObjectSelection -GetProperty $GetProperty -ShowRest:$ShowRest.IsPresent
    
    finalizeCommand

    return $result
}

Function Remove-XtremInitiatorGroup {
  <#
    .DESCRIPTION
    Enables you to remove an Initiator Group and its associated Initiators.
 
    .PARAMETER InitiatorGroupName
    Initiator Group's current name or index number
 
    .PARAMETER ShowRest
    Return an object represents the REST operation including URI , Method and JSON
 
    .EXAMPLE
    Remove-XtremIitiatorGroup -InitiatorGroupName groupName
  #>

    
    [cmdletbinding()]
    [Alias('xmsInitiatorGroupRemove')]
    Param (
        [parameter()]
        $XtremClusterName =  (Get-XtremDefaultSession)._XtremClusterName,
        [Alias("Name", "Index")]
        [parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, Position = 0)]
        [Argumentcompleter( { doComplete $args 'initiator-groups' name })] 
        $InitiatorGroupName,
        [Parameter()]
        [bool]$Confirm =  (Get-XtremDefaultSession)._XtremCLIMode,
        [Parameter()]
        [object]$Session =  (Get-XtremDefaultSession),
        [Parameter()]
        [switch]$ShowRest
    )
    
    $confirmed = IsConfirmed $Confirm
    if (!$confirmed){
        return
    }

    initCommand
    
    $Route = '/types/initiator-groups'
    $Route, $GetProperty = SetParametersForRequest $Route $InitiatorGroupName
    
    $result = NewXtremRequest -Method DELETE -Endpoint $Route -Session $Session -XtremClusterName $XtremClusterName -GetProperty $GetProperty -ShowRest:$ShowRest.IsPresent

    finalizeCommand

    return $result
}


Export-ModuleMember *-* -Alias *