Scripts/ProtectionSource/register-cohesityprotectionsourceisilon.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
function Register-CohesityProtectionSourceIsilon {
  <#
        .SYNOPSIS
        Register a new Isilon source.
        .DESCRIPTION
        The Register-CohesityProtectionSourceIsilon function is used to register a new Isilon protection source.
        .NOTES
        Published by Cohesity
        .LINK
        https://cohesity.github.io/cohesity-powershell-module/#/README
        .EXAMPLE
        Register-CohesityProtectionSourceIsilon -Server <string> -Credential (New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "root", (ConvertTo-SecureString -AsPlainText "secret" -Force))
    #>

  [CmdletBinding()]
  Param(
    [Parameter(Position = 0, Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [String]$Server,
    [Parameter(Mandatory = $true)]
    [ValidateNotNull()]
    [System.Management.Automation.PSCredential]
    [System.Management.Automation.Credential()]
    $Credential
  )

  Begin {
    if (-not (Test-Path -Path "$HOME/.cohesity")) {
      throw "Failed to authenticate. Please connect to the Cohesity Cluster using 'Connect-CohesityCluster'"
    }
    $cohesitySession = Get-Content -Path $HOME/.cohesity | ConvertFrom-Json
    $cohesityCluster = $cohesitySession.ClusterUri
    $cohesityToken = $cohesitySession.Accesstoken.Accesstoken
  }

  Process {
    $ISILON_TYPE = 14
    # Using a private API for the registration, public API will be used in the upcoming release
    $cohesityClusterURL = $cohesityCluster + '/irisservices/api/v1/backupsources'
    $cohesityHeaders = @{'Authorization' = 'Bearer ' + $cohesityToken }

    $userName = $Credential.UserName
    $plainPassword = $Credential.GetNetworkCredential().Password
    $payload = @{
      entity     = @{
        type         = $ISILON_TYPE
        isilonEntity = @{
          type = 0
        }
      }
      entityInfo = @{
        endpoint    = $Server
        type        = $ISILON_TYPE
        credentials = @{
          username = $userName
          password = $plainPassword
        }
      }
    }
    $payloadJson = $payload | ConvertTo-Json -Depth 100
    $resp = Invoke-RestApi -Method Post -Uri $cohesityClusterURL -Headers $cohesityHeaders -Body $payloadJson
    if ($resp) {
      $resp
    }
    else {
      $errorMsg = "Register Isilon : Failed to register"
      Write-Output $errorMsg
      Write-Output $Global:CohesityAPIError
      CSLog -Message $errorMsg
    }
  }

  End {
  }
}