In this article, I will explain briefly how to work with REST API exposed by ScaleIO software using PowerShell to manage/ monitor your ScaleIO system. ScaleIO can be deployed either using AMS (only for ScaleIO Ready Nodes) or without AMS. In case of an AMS deployment, API is available as part of the ScaleIO Ready Node AMS package. The AMS REST API is served from the AMS server which allows querying information and performing several actions related to ScaleIO Ready Node hardware and software components. For a non-AMS ScaleIO deployment, the REST API is served from the ScaleIO Gateway. If you used ScaleIO Installation Manager (IM) to install ScaleIO, the gateway has already been installed and configured with the MDM details. In both cases, the AMS server/ ScaleIO Gateway connects and queries master MDM, reformats the results in a RESTful manner and passes it to a REST client.
Here I am using an AMS managed ScaleIO Ready Node cluster. Access to the API requires a login using AMS username and password. Successful login returns a token, and you can use this token for later authentications for other requests. The responses or results returned by ScaleIO Ready Node AMS are in JSON format. In the following sections, I will explain how to use PowerShell to query ScaleIO REST API and obtain relevant results.
PowerShell uses Invoke-RestMethod cmdlet which sends HTTP/ HTTPS requests to REST web services that return rich structured data. PowerShell will format the response based on the data type. For JSON PowerShell converts the response content to objects.
Here I am using an AMS managed ScaleIO Ready Node cluster. Access to the API requires a login using AMS username and password. Successful login returns a token, and you can use this token for later authentications for other requests. The responses or results returned by ScaleIO Ready Node AMS are in JSON format. In the following sections, I will explain how to use PowerShell to query ScaleIO REST API and obtain relevant results.
PowerShell uses Invoke-RestMethod cmdlet which sends HTTP/ HTTPS requests to REST web services that return rich structured data. PowerShell will format the response based on the data type. For JSON PowerShell converts the response content to objects.
Step 1: Authentication and token generation
#Note: 192.168.11.15 is the IP of my AMS server
$User = Read-Host -Prompt "Please enter ScaleIO AMS username"
$SecurePassword = Read-Host -Prompt "Enter ScaleIO Password for user $user" –AsSecureString
$Credentials = New-Object System.Management.Automation.PSCredential ($user,$Securepassword)
#HTTPS Get request is invoked with credentials for authentication
$Token = Invoke-RestMethod -Uri "https://192.168.11.15:443/api/login" -Method Get -Credential $Credentials
Step 2: Create header with the token
$auth = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(':'+$Token))
$global:ScaleIOAuthHeaders = @{'Authorization' = "Basic $auth"
'Content-Type' = "application/json" }
Step 3: Invoke-RestMethod
#Query all alerts in the system
$alerts = (Invoke-RestMethod -Uri "https://192.168.11.15:443/api/types/Alert/instances/" -Method Get -Headers $ScaleIOAuthHeaders)
#Query all SDSs in a PD
$all_SDS = (Invoke-RestMethod -Uri "https://192.168.11.15:443/api/instances/ProtectionDomain::3ce4af5f00000000/relationships/Sds " -Method Get -Headers $ScaleIOAuthHeaders)
#Query a specified PD
$pd01 = (Invoke-RestMethod -Uri "https://192.168.11.15:443/api/instances/ProtectionDomain::3ce4af5f00000000 " -Method Get -Headers $ScaleIOAuthHeaders)
#Query statistics of a specified PD
$pd01_stats = (Invoke-RestMethod -Uri "https://192.168.11.15:443/api/instances/ProtectionDomain::3ce4af5f00000000/relationships/Statistics " -Method Get -Headers $ScaleIOAuthHeaders)
Hope this was useful. Refer to Dell EMC ScaleIO Ready Node Version 2.5 REST API Reference Guide for more details.
In the next article, I will explain how to query selected statistics/ parameters with POST method which will help you to
create custom monitoring scripts for your ScaleIO Ready Node environment.
Note:
If you are getting the below error while trying to create the token during step 1, please add the below lines of code to the
start of your script.
"Invoke-RestMethod : The underlying connection was closed: An unexpected error occurred on a send."
"Invoke-RestMethod : The underlying connection was closed: An unexpected error occurred on a send."
#Solution to above error!
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]::CertificatePolicy = New-Object TrustAllCertsPolicy
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12 -bor [System.Net.SecurityProtocolType]::Tls11
References:






