DSCResources/ArcGIS_Server_RegisterDirectories/ArcGIS_Server_RegisterDirectories.psm1
<#
.SYNOPSIS Makes a request to the installed Server to Register Existing External Cache Directories with existing Server Site .PARAMETER Ensure Ensure makes sure that a Cache Directories are registered to site if specified. Take the values Present or Absent. - "Present" ensures that a server site is created or the server is joined to an existing site. - "Absent" ensures that existing server site is deleted (Not Implemented). .PARAMETER SiteAdministrator A MSFT_Credential Object - Primary Site Administrator .PARAMETER DirectoriesJSON List of Registered Directories in JSON Format #> function Get-TargetResource { [CmdletBinding()] [OutputType([System.Collections.Hashtable])] param ( [parameter(Mandatory = $true)] [System.String] $DirectoriesJSON, [ValidateSet("Present","Absent")] [System.String] $Ensure, [parameter(Mandatory = $true)] [System.Management.Automation.PSCredential] $SiteAdministrator ) Import-Module $PSScriptRoot\..\..\ArcGISUtility.psm1 -Verbose:$false $null } function Set-TargetResource { [CmdletBinding()] param ( [parameter(Mandatory = $true)] [System.String] $DirectoriesJSON, [ValidateSet("Present","Absent")] [System.String] $Ensure, [parameter(Mandatory = $true)] [System.Management.Automation.PSCredential] $SiteAdministrator ) Import-Module $PSScriptRoot\..\..\ArcGISUtility.psm1 -Verbose:$false $FQDN = Get-FQDN $env:COMPUTERNAME Write-Verbose "Fully Qualified Domain Name :- $FQDN" [System.Reflection.Assembly]::LoadWithPartialName("System.Web") | Out-Null Write-Verbose "Waiting for Server 'https://$($FQDN):6443/arcgis/admin' to initialize" Wait-ForUrl "https://$($FQDN):6443/arcgis/admin" -HttpMethod 'GET' if($Ensure -ieq 'Present') { $Referer = 'http://localhost' $ServerUrl = "https://$($FQDN):6443" try { Write-Verbose "Getting the Token for site '$ServerUrl'" $token = Get-ServerToken -ServerEndPoint $ServerUrl -ServerSiteName 'arcgis' -Credential $SiteAdministrator -Referer $Referer if($null -ne $token.token -and $DirectoriesJSON) { #setting registered directories $responseDirectories = Get-RegisteredDirectories -ServerURL $ServerUrl -Token $token.token -Referer $Referer ForEach ($dir in ($DirectoriesJSON | ConvertFrom-Json)) { Write-Verbose "Testing for Directory $($dir.name)" if(($responseDirectories | Where-Object { ($responseDirectories.directories.name -icontains $($dir.name))} | Measure-Object).Count -gt 0) { Write-Verbose "Directory $($dir.name) already registered > no Action required" } else { Write-Verbose "Directory $($dir.name) not registered > registering directory" $response = Set-RegisteredDirectory -ServerURL $ServerUrl -Token $token.token -Referer $Referer -Name $dir.name -PhysicalPath $dir.physicalPath -DirectoryType $dir.directoryType Write-Verbose "Set-RegisteredDirectory Response :-$response" } } }else{ throw "[Error] No Token Returned" } } catch { throw "[ERROR] GetToken returned:- $_" } } elseif($Ensure -ieq 'Absent') { #Unregister Registered Directories Write-Verbose "TO BE IMPLEMENTED" } } function Test-TargetResource { [CmdletBinding()] [OutputType([System.Boolean])] param ( [parameter(Mandatory = $true)] [System.String] $DirectoriesJSON, [ValidateSet("Present","Absent")] [System.String] $Ensure, [parameter(Mandatory = $true)] [System.Management.Automation.PSCredential] $SiteAdministrator ) Import-Module $PSScriptRoot\..\..\ArcGISUtility.psm1 -Verbose:$false [System.Reflection.Assembly]::LoadWithPartialName("System.Web") | Out-Null $FQDN = Get-FQDN $env:COMPUTERNAME Write-Verbose "Fully Qualified Domain Name :- $FQDN" $Referer = 'http://localhost' $ServerUrl = "https://$($FQDN):6443" $result = $true Write-Verbose "Getting the Token for site '$ServerUrl'" $token = Get-ServerToken -ServerEndPoint $ServerUrl -ServerSiteName 'arcgis' -Credential $SiteAdministrator -Referer $Referer try { if($null -ne $token.token -and $DirectoriesJSON) { #setting registered directories $responseDirectories = Get-RegisteredDirectories -ServerURL $ServerUrl -Token $token.token -Referer $Referer ForEach ($dir in ($DirectoriesJSON | ConvertFrom-Json)) { Write-Verbose "Testing for Directory $($dir.name)" if(($responseDirectories | Where-Object { ($responseDirectories.directories.name -icontains $($dir.name))} | Measure-Object).Count -gt 0) { Write-Verbose "Directory $($dir.name) already registered" } else { Write-Verbose "Directory $($dir.name) not registered" $result = $false break } } } else{ throw "No Token Returned" } } catch { throw "[ERROR] GetToken returned:- $_" } if($Ensure -ieq 'Present') { $result } elseif($Ensure -ieq 'Absent') { (-not($result)) } } function Get-RegisteredDirectories { # returns list of Servers registerd Directories [CmdletBinding()] param ( [System.String] $ServerURL, [System.String] $Token, [System.String] $Referer ) $Url = $ServerURL.TrimEnd("/") + "/arcgis/admin/system/directories" try{ Invoke-ArcGISWebRequest -Url $Url -HttpFormParameters @{ f= 'pjson'; token = $Token; } -Referer $Referer -TimeOutSec 150 }catch{ Write-Verbose "[WARNING] Response from $Url (Get-RegisteredDirectories) is - $_" } } function Set-RegisteredDirectory { # adds an directory to Server registerd Directories [CmdletBinding()] param ( [System.String] $ServerURL, [System.String] $Token, [System.String] $Referer, [System.String] $Name, [System.String] $PhysicalPath, [System.String] $DirectoryType ) $Url = $ServerURL.TrimEnd("/") + "/arcgis/admin/system/directories/register" $props = @{ f= 'pjson'; token = $Token; name = $Name; physicalPath = $PhysicalPath; directoryType = $DirectoryType; } try{ Invoke-ArcGISWebRequest -Url $Url -HttpFormParameters $props -Referer $Referer -TimeOutSec 150 }catch{ Write-Verbose "[WARNING] Response from $Url (Get-RegisteredDirectories) is - $_" } } Export-ModuleMember -Function *-TargetResource |