tags.psm1


$TagsDefaultProperties = ('name', 'index', 'object-type', 'num-of-items', 'color')

.(commonLib) 

Function Get-XtremTags {
  <#
     .DESCRIPTION
      displays the list of Tags.
 
     .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-XtremTags
  #>

    [cmdletbinding()]
    [Alias('xmsTagList')]
    Param (
        [parameter()]
        [Alias("Properties")]
        [Argumentcompleter( { doComplete $args 'tags' prop })]
        [string[]]$Property = $TagsDefaultProperties,
        [parameter()]
        [Alias("Filters")]
        [Argumentcompleter( { doComplete $args 'tags' filter })]
        [string[]]$Filter,
        [Parameter()]
        [object]$Session =  (Get-XtremDefaultSession),
        [Parameter()]
        [switch]$ShowRest,
        [Parameter()]
        [switch]$Full = $false
    )
    initCommand
    $Route = '/types/tags'

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

    finalizeCommand
    return $result
}

# Retrieves information about a Tag
Function Get-XtremTag {
   <#
      .DESCRIPTION
       Retrieves information about a tag
 
      .PARAMETER TagName
      Name of the tag you would like information for
 
      .PARAMETER ShowRest
      Return an object represents the REST operation including URI , Method and JSON
 
      .EXAMPLE
      Get-XtremTag -TagName myTag -ObjectType Volume
   #>

    [cmdletbinding()]
    [Alias('xmsTagGet')]
    Param (
        [Alias("Name", "Index")]
        [parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, Position = 0)]
        [Argumentcompleter( { doComplete $args 'tags' name })]
        $TagName,
        [Parameter()]
        [Alias("Properties")]
        [Argumentcompleter( { doComplete $args 'tags' prop })]
        [string[]]$Property,
        [ValidateSet('Volume', 'ConsistencyGroup', 'Snapshot', 'SnapshotSet', 'InitiatorGroup', 'Initiator', 'Scheduler')]
        [string]$Entity,
        [Parameter()]
        [object]$Session =  (Get-XtremDefaultSession),
        [switch]$ShowRest
    )
    initCommand
    $Route = '/types/tags'
    
    if ($TagName.GetType().Name -eq "String" -and $Entity -and $TagName -notlike "/$Entity/*") {
        $TagName = '/' + $Entity + '/' + $TagName
    }
    
    $Route, $GetProperty = SetParametersForRequest $Route $TagName
    
    $result = NewXtremRequest -Method GET -Endpoint $Route -Session $Session -ObjectSelection $ObjectSelection -GetProperty $GetProperty -Properties $Property -ShowRest:$ShowRest.IsPresent
    
    $result = formatOutPut $Property $result

    finalizeCommand
    return $result
}

Function New-XtremTag {
  <#
    .DESCRIPTION
    Enables you to create a Tag.
     
    .PARAMETER TagName
    Full path Tag name.
 
    .PARAMETER Entity
    The entity type asscoiated.
 
    .PARAMETER Color
    Tag Color
 
    .PARAMETER ShowRest
    Return an object represents the REST operation including URI , Method and JSON
 
    .EXAMPLE
    New-XtremTag -TagName mytag -Entity Snapshot
 #>

    [CmdletBinding()]
    [Alias('xmsTagCreate')]
    Param (
        [Parameter(Mandatory = $true, Position = 1)]
        [ValidateSet('Volume', 'ConsistencyGroup', 'Snapshot', 'SnapshotSet', 'InitiatorGroup', 'Initiator', 'Scheduler')]
        [String]$Entity,
        [Alias("Name", "Index")]
        [Parameter(Mandatory = $True, ValueFromPipelineByPropertyName = $true, Position = 0)]
        [Argumentcompleter( { doComplete $args 'tags' name })]
        [ValidatePattern("^[^\[\]&\(\)`";,<>']+$")] 
        [String]$TagName,
        [Parameter()]
        [ValidateSet('Green', 'Blue', 'Red', 'Yellow', 'Brown', 'Magenta', 'Cyan', 'Gray', 'DarkGray', 'Black', 'DarkYellow', 'DarkMagenta', 'DarkRed', 'DarkCyan', 'DarkGreen', 'DarkBlue')]
        [String]$Color,
        [Parameter()]
        [object]$Session =  (Get-XtremDefaultSession),
        [Parameter()]
        [switch]$ShowRest
    )
    initCommand
    $Route = '/types/tags'
    
    $BodyList = @{ }
    
    AddIfExists -name "entity" -value $Entity -list $BodyList
    AddIfExists -name "tag-name" -value $TagName -list $BodyList
    AddIfExists -name "color" -value $Color -list $BodyList
    
    $Body = BuildXtremJson -list $BodyList
    
    $result = NewXtremRequest -Method POST -Endpoint $Route -Session $Session -Body $Body -ObjectSelection $ObjectSelection -ShowRest:$ShowRest.IsPresent

    finalizeCommand
    return $result
}

Function Remove-XtremTag {
  <#
     .DESCRIPTION
      Enables you to delete a Tag.
 
      .PARAMETER TagName
      Tag's name or index number
 
      .PARAMETER Entity
      Name of the entity
 
      .EXAMPLE
      Remove-XtremTag -TagName myTag -Entity Volume
  #>

    [CmdletBinding()]
    [Alias('xmsTagRemove')]
    Param (
        [Alias("Name", "Index")]
        [Parameter(Mandatory = $true, Position = 0)]
        [Argumentcompleter( { doComplete $args 'tags' name })]
        $TagName,
        [Parameter(ValueFromPipelineByPropertyName = $true, Position = 1)]
        [ValidateSet('Volume', 'ConsistencyGroup', 'Snapshot', 'SnapshotSet', 'InitiatorGroup', 'Initiator', 'Scheduler')]
        [String]$Entity,
        [Parameter()]
        [bool]$Confirm =  (Get-XtremDefaultSession)._XtremCLIMode,
        [Parameter()]
        [object]$Session =  (Get-XtremDefaultSession),
        [Parameter()]
        [switch]$ShowRest
    )
    $confirmed = IsConfirmed $Confirm
    if (!$confirmed) { return }
    initCommand

    $Route = '/types/tags'
    if ($TagName.GetType().Name -eq "String" -and $Entity -and $TagName -notlike "/$Entity/*") {
        $TagName = '/' + $Entity + '/' + $TagName
    }
    
    $Route, $GetProperty = SetParametersForRequest $Route $TagName
    
    $result = NewXtremRequest -Method DELETE -Endpoint $Route -Session $Session -GetProperty $GetProperty -ShowRest:$ShowRest.IsPresent

    finalizeCommand
    return $result
}

Function Set-XtremTag {
 <#
     .DESCRIPTION
      Enables you to rename the selected tag, change color.
 
      .PARAMETER TagName
      Name or index of the tag you want to modify.
 
       .PARAMETER Entity
      Name of the entity
 
       .PARAMETER EntityDetails
      Entity's name or index number
 
      .EXAMPLE
      Set-XtremTag -TagName 7 -Entity Volume -NewTagName -ShowRest -EntityDetails Testing
  #>

    [CmdletBinding()]
    [Alias('xmsTagModify')]
    Param (
        [Alias("Name", "Index")]
        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, Position = 0)]
        [Argumentcompleter( { doComplete $args 'tags' name })]
        $TagName,
        [Parameter(ValueFromPipelineByPropertyName = $true, Position = 1)]
        [ValidateSet('Volume', 'ConsistencyGroup', 'Snapshot', 'SnapshotSet', 'InitiatorGroup', 'Initiator')]
        [String]$Entity,
        [Parameter()]
        [ValidatePattern("^[^\[\]&\(\)`";,<>']+$")] 
        [String]$NewTagName,
        [Parameter()]
        [ValidateSet('Green', 'Blue', 'Red', 'Yellow', 'Brown', 'Magenta', 'Cyan', 'Gray', 'DarkGray', 'Black', 'DarkYellow', 'DarkMagenta', 'DarkRed', 'DarkCyan', 'DarkGreen', 'DarkBlue')]
        [String]$Color,
        [Parameter()]
        [object]$Session =  (Get-XtremDefaultSession),
        [Parameter()]
        [switch]$ShowRest
    )
    initCommand
    $Route = '/types/tags'

    if (($TagName.GetType().Name -eq "String") -and $Entity -and ($TagName -notlike "/$Entity/*")) {
        $TagName = '/' + $Entity + '/' + $TagName
    }
    
    $Route, $GetProperty = SetParametersForRequest $Route $TagName
    
    $BodyList = @{ }
    
    AddIfExists -name "caption" -value $NewTagName -list $BodyList
    AddIfExists -name "color" -value $Color -list $BodyList
    
    $Body = BuildXtremJson -list $BodyList
    
    $result = NewXtremRequest -Method PUT -Endpoint $Route -Session $Session -Body $Body -GetProperty $GetProperty -XtremClusterName "" -ShowRest:$ShowRest.IsPresent

    finalizeCommand
    return $result
}


Function Set-XtremTagObject {
 <#
     .DESCRIPTION
      Enables you to tag an object.
 
      .PARAMETER TagName
      Name of the tag you would like to tag with.
 
       .PARAMETER Entity
      Name of the entity
 
       .PARAMETER EntityDetails
      Entity's name or index number
 
      .EXAMPLE
      Set-XtremTag -TagName 7 -Entity Volume -ShowRest -EntityDetails Testing
  #>

    [CmdletBinding()]
    [Alias('xmsTagApply')]
    Param (
        [Alias("Name", "Index")]
        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, Position = 0)]
        [Argumentcompleter( { doComplete $args 'tags' name })]
        $TagName,
        [Parameter(Position = 1)]
        [ValidateSet('Volume', 'ConsistencyGroup', 'Snapshot', 'SnapshotSet', 'InitiatorGroup', 'Initiator')]
        [String]$Entity,
        [Parameter()]
        [Argumentcompleter( { completeEntityName $args 'Entity' })]
        $EntityDetails,
        [Parameter()]
        [object]$Session =  (Get-XtremDefaultSession),
        [Parameter()]
        [switch]$ShowRest
    )
    initCommand
    $Route = '/types/tags'
    if ($TagName.GetType().Name -eq "String" -and $Entity -and $TagName -notlike "/$Entity/*") {
        $TagName = '/' + $Entity + '/' + $TagName
    }
    
    $Route, $GetProperty = SetParametersForRequest $Route $TagName
    
    $BodyList = @{ }
    
    AddIfExists -name "cluster-id" -value $XtremClusterName -list $BodyList
    AddIfExists -name "entity" -value $Entity -list $BodyList
    AddIfExists -name "entity-details" -value $EntityDetails -list $BodyList
    
    $Body = BuildXtremJson -list $BodyList
    
    $result = NewXtremRequest -Method PUT -Endpoint $Route -Session $Session -Body $Body -GetProperty $GetProperty -ShowRest:$ShowRest.IsPresent

    finalizeCommand
    return $result
}

Export-ModuleMember *-* -Alias *