VMware Skyline Insights API Kullanımı
Skyline Insights API ile Skyline Advisor dışında bulgularınızı cloud ortamından toplayıp buradaki bulgu ve önerilere göre otomasyon araçları yada PowerCLI ile uygulanması mümkün olan operasyonlarınızı otomatikleştirebilirsiniz. Eğer Skyline ile ilgili önceki makaleyi okumadıysanız aşağıdaki linkten başlamanızı öneririm.
Bu makalede Skyline Insights API ile GraphQL ve komut satırı üzerinden nasıl veri çekebileceğimizden bahsedeceğim. Bunun için öncelikle Skyline üzerinde bir API User ve bu usera ait bir token oluşturmamız gerekiyor. Bunun için aşağıdaki adımları takip edebilirsiniz. Sonrasında örnek olarak Skyline aktif olan bulguların listesini çekeceğiz.
API User oluşturma
Skyline API User ını oluşturmak için aşağıdaki adımları izleyebilirsiniz.
- https://console.cloud.vmware.com adresinden VMware Cloud Services a giriş yapın.
- Identity & Access Management menüsünde Active Users a tıklayın.
- API access vereceğimiz yeni bir user oluşturalım. Add Users a tıkladıktan Assign Service Roles kısmından da Skyline API User ı seçin ve Add e tıklayın.
API Token oluşturma
REST API ile Skyline a atılacak sorgularda öncelikle bir kimlik doğrulama token ı oluşturmamız gerekiyor. API Token oluşturmak için aşağıdaki adımları takip edebilirsiniz.
- https://skyline.vmware.com/advisor adresinden Skyline Advisor a giriş yapın.
- User Settings altında My Account a tıklayın.
- API Tokens tabında GENERATE A NEW API TOKEN a tıklayın.
- Token ayarlarınızı girdikten sonra GENERATE e tıklayın ve oluşturmuş olduğunuz token bilgisini bir yere kaydedin. Bu token bilgisini kaybedecek olursanız tokenı yeniden oluşturmanız gerekicek.
- Son olarak CONTINUE ya tıklayıp token oluşturma işlemini tamamlayabilirsiniz.
API Access Token
Skyline Insights API kullanarak yapacağımız isteklerde kimlik yönetimini doğrulamak için ayrıca bir Access Token oluşturulması gerekiyor.
Gereksinimler
Curl ile JSON jq komutlarını çalıştırmak için aşağıdaki linkten işletim sisteminize göre kurulum yapabilirsiniz.
https://stedolan.github.io/jq/download/
Access Token oluşturma
Daha önce oluşturmuş olduğumuz API Token ile aşağıdaki curl komutu ile beraber kullanacağız. Aşağıdaki curl komutunda API_TOKEN yazan yere oluşturmuş olduğunuz API Token ile değiştirin. Bu komutu çalıştırdıktan sonra size uzunca bir alfanümerik token oluşturacaktır.
curl -s -X POST "https://console.cloud.vmware.com/csp/gateway/am/api/auth/api-tokens/authorize?grant_type=refresh_token" --header 'Accept: application/json' \ --header "Content-Type: application/x-www-form-urlencoded" --data-urlencode "refresh_token=API_TOKEN"| jq -r .access_token
API Şema Yapısı
API ile önceden tanımlanmış olan bazı veri setleri bulunuyor. Bu veri setlerine ilişkin tüm şema yapısını aşağıda bulabilirsiniz.
Finding Schema
Field Name | Type | Description |
findingId | String | Findings Identifier |
accountId | String | Account Identifier |
products | String | List Of products impacted by this Finding |
findingDisplayName | String | Findings display name |
severity | Severity | Severity level of the given finding |
findingDescription | String | Finding description |
findingImpact | String | Impact of this finding if not remediation steps taken |
recommendations | [String] | Recommended remediation steps |
recommendationsVCF | [String] | Recommended remediation steps for VCF |
kbLinkURLs | [String] | Knowledge base url reference for this Finding |
kbLinkURLsVCF | [String] | Knowledge base url reference for VCF |
categoryName | String | Findings category name |
findingTypes | [FindingType] | Type of finding |
firstObserved | Long | First known occurence of this finding |
totalAffectedObjectsCount | Long | Total objects count |
affectedObjects(start: Int, limit: Int) | AffectedObject | Paginated list of objects affected by this Finding (Max Limit 20) |
Affected Objects Schema
Field Name | Type | Description |
sourceName | String | Source Name |
objectName | String | Object Name |
objectType | String | Object Type |
version | String | Version |
buildNumber | String | Build Number |
solutionTags | [DeploymentInfo] | Solution tags for affected object |
firstObserved | Long | First known occurrence of this affected object |
Active Findings Listeleme
GraphQL ile Findings verilerini elde etme
GraphQL ile beraber api sorgularını görsel olarak oluşturabilir ve tüm API şemasına ait açıklama ve query yapısını görüntüleyebilirsiniz. Aşağıdaki adresten GraphQL arayüzüne erişebilirsiniz.
https://skyline.vmware.com/public/api/docs
Ana sayfada sorguyu direk çalıştıracak olursak aşağıdaki gibi bir hata ile karşılaşıyoruz. Buradaki sorgu içerisine Authorization header olarak önceden oluşturmuş olduğumuz Access Token bilgisini girmemiz gerekiyor.
{
"errors": [
{
"message": "Exception while fetching data (/activeFindings) : Access is denied",
"extensions": {
"invalidAccessToken": "Access Token is absent or invalid. Please provide valid Bearer token in Authorization header of the request.",
"classification": "AccessDeniedError"
}
}
],
"data": {}
}
GraphQL ekranında sol alt tarafta Request Headers sekmesine aşağıdaki satırı eklemeniz gerekiyor. Access_Token yazan yere kendi token bilginiz ile güncelledikten sonra sorguyu başarılı bir şekilde tamamlayabilirsiniz
{ "Authorization": "Bearer Access_Token" }
CLI ile Findings verilerini elde etme
Komut satırından aynı verilere erişmek için API Token bilgisine ihtiyacımız var. Bu token ile yeni bir Access Token oluşturup GraphQL deki Active Findings sorgusunu çalıştırabiliriz. Aşağıdaki script ile tüm Active Findingleri listeleyebilirsiniz.
#!/bin/sh
#
APITOKEN="API_Token"
SKYLINEACCESS="https://console.cloud.vmware.com/csp/gateway/am/api/auth/api-tokens/authorize?grant_type=refresh_token"
SKYLINEAPI="https://skyline.vmware.com/public/api/data"
TOKEN=$(curl -s -X POST $SKYLINEACCESS \
--header 'Accept: application/json' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode "refresh_token=$APITOKEN"| jq -r .access_token)
curl -s -X POST $SKYLINEAPI -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' -d '{"query": "
{
activeFindings(limit: 200) {
findings {
findingId
accountId
products
findingDisplayName
severity
findingDescription
findingImpact
recommendations
kbLinkURLs
recommendationsVCF
kbLinkURLsVCF
categoryName
findingTypes
firstObserved
totalAffectedObjectsCount
}
totalRecords
timeTaken
}
}
"}' | jq .
Scripti çalıştırdıktan sonra aşağıdaki gibi bir response alacaksınız.
{
"data": {
"activeFindings": {
"findings": [
{
"findingId": "vSphere-**********************************",
"accountId": "************-*******-********-***********",
"products": [
"vcenter01.domain.local",
],
"findingDisplayName": "vSphere-**********************************",
"severity": "MODERATE",
"findingDescription": "Enable ******************",
"findingImpact": "Environmental Stability",
"recommendations": [
"******************"
],
"kbLinkURLs": [
"https://kb.vmware.com/s/article/******************"
],
"recommendationsVCF": [
""
],
"kbLinkURLsVCF": [
""
],
"categoryName": "Compute",
"findingTypes": [
"CONFIGURATION"
],
"firstObserved": 694224000,
"totalAffectedObjectsCount": 2
}
],
"totalRecords": 1,
"timeTaken": 32
}
}
}
Bir sonraki makalede aktif bulguları API ile çekip buradaki her konu başlığına ait JIRA da issue kayıtlarını açtığımız makaleye aşağıdaki linkten ulaşabilirsiniz.
You can access the scripts used in the article from my Github profile.
https://github.com/vmbro/VMware-Scripts/tree/main/Skyline/shell