Hi Zoli,
I hit the same issue for a customer. The solution i chose was not to use PERL and instead rewrite the commands to acquire the datasource and wait for datasource acquisition via the REST API using PowerShell. Here is the command code i used:
acquire_wfa_datasource:
Param(
[Parameter(Mandatory=$False, HelpMessage="The Protocol name")]
[ValidateSet("https","http")]
[String]$Protocol="https",
[Parameter(Mandatory=$True, HelpMessage="The WFA Server hostname, FQDN or IP Address")]
[String]$WfaServer,
[Parameter(Mandatory=$True, HelpMessage="The WFA Datasource name")]
[String]$DataSourceName
)
#'------------------------------------------------------------------------------
#'Set the certificate policy and TLS version.
#'------------------------------------------------------------------------------
Add-Type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
"@
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]'Tls12'
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
#'------------------------------------------------------------------------------
#'Acquire the WFA datasource
#'------------------------------------------------------------------------------
$credentials = Get-WFACredentials $WfaServer
[String]$uri = "$Protocol`://$WfaServer/rest/data_sources/$DataSourceName/jobs"
Try{
[xml]$result = Invoke-RestMethod -Uri $uri -Method "POST" -ContentType "Application/JSON" -Credential $credentials
Get-WFALogger -Info -Message "Acquired Datasource ""$DataSourceName"" using URI ""$uri"""
}Catch{
Write-Warning -Message $("Failed acquiring Datasource ""$DataSourceName"" using URI ""$uri"". Error " + $_.Exception.Message)
}
#'------------------------------------------------------------------------------
#'Enumerate the VMWare session ID from the response and add it as a return paramater..
#'------------------------------------------------------------------------------
[String]$jobId = $result.acquisitionJob.jobId
If(-Not([String]::IsNullOrEmpty($jobId))){
Add-WfaWorkflowParameter -Name "data_source_acquisition_job_id" -Value $jobId -AddAsReturnParameter $True
Get-WFALogger -Info -Message "Added WFA datasource acquisition Job ID ""$jobId"" as a return paramater"
}Else{
Throw "Failed acquiring WFA datasource ""$DataSourceName"""
}
#'------------------------------------------------------------------------------
wait_wfa_datasource:
Param(
[Parameter(Mandatory=$False, HelpMessage="The Protocol name")]
[ValidateSet("https","http")]
[String]$Protocol="https",
[Parameter(Mandatory=$True, HelpMessage="The WFA Server hostname, FQDN or IP Address")]
[String]$WfaServer,
[Parameter(Mandatory=$True, HelpMessage="The WFA Datasource name")]
[String]$DataSourceName,
[Parameter(Mandatory=$False, HelpMessage="The WFA Datasource aquisition Job ID")]
[Int]$JobId,
[Parameter(Mandatory=$False, HelpMessage="The WFA Datasource aquisition Job ID")]
[Int]$TimeOut=60,
[Parameter(Mandatory=$False, HelpMessage="The WFA Datasource aquisition Job ID")]
[Int]$WaitInterval=3
)
#'------------------------------------------------------------------------------
#'Set the certificate policy and TLS version.
#'------------------------------------------------------------------------------
Add-Type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
"@
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]'Tls12'
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
#'------------------------------------------------------------------------------
#'Enumerate WFA credentials.
#'------------------------------------------------------------------------------
$credentials = Get-WFACredentials $WfaServer
#'------------------------------------------------------------------------------
#'Enumerate the WFA datasource acquisition job ID using a WFA return paramater if not provided.
#'------------------------------------------------------------------------------
[String]$returnParameter = "data_source_acquisition_job_id"
If(-Not($JobId)){
[Int]$JobId = Get-WfaWorkflowParameter -Name $returnParameter
}
If(-Not([String]::IsNullOrEmpty($JobId))){
Get-WFALogger -Info -Message "Enumerated datasource aquisition Job ID ""$jobId"" from WFA return Parameter ""$returnParameter"""
}Else{
Throw "Failed enumerating WFA Return Parameter ""$returnParameter"""
}
#'------------------------------------------------------------------------------
#'Enumerate the WFA datasource aquisition Job ID status and wait for completion.
#'------------------------------------------------------------------------------
[Int]$acquired = 0
[Int]$waited = 0
[String]$uri = "$Protocol`://$WfaServer/rest/data_sources/$DataSourceName/jobs/$JobId"
Get-WFALogger -Info -Message "Enumerating WFA Datasource aquisition Job ID ""$jobId"" using URI ""$uri"""
Do{
Try{
[xml]$result = Invoke-RestMethod -Uri $uri -Method GET -ContentType "Application/JSON" -Credential $credentials
[String]$status = $($result.acquisitionJob.JobStatus.status).ToLower();
Get-WFALogger -Info -Message "Enumerated WFA Datasource acquisition Job ID ""$jobId"" status ""$status"" using URI ""$uri"""
If($status -ne "completed"){
Start-Sleep -Seconds $WaitInterval
[Int]$waited += $WaitInterval
}Else{
[Int]$acquired = 1
}
}Catch{
Throw $("Failed enumerating WFA Datasource aquisition Job ID ""$jobId"" using URI ""$uri"". Error " + $_.Exception.Message)
}
}Until(($acquired -eq 1) -Or (($waited -ge $timeOut) -And $timeOut -ge 0))
#'------------------------------------------------------------------------------
#'Ensure an error is raised if the datasource was not aquired within the timeout.
#'------------------------------------------------------------------------------
If($acquired -eq 1){
Get-WFALogger -Info -Message "Successfully acquired WFA Datasource ""$DataSourceName"". Waited a total of ""$waited"" seconds"
}Else{
Throw "Failed acquiring WFA Datasource ""$DataSourceName"" within a timeout of ""$timeOut"" seconds"
}
#'------------------------------------------------------------------------------
Hope that helps
/Matt
If this post resolved your issue, help others by selecting ACCEPT AS SOLUTION or adding a KUDO.