AutomationVMware

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.

  1. https://console.cloud.vmware.com adresinden VMware Cloud Services a giriş yapın.
  2. Identity & Access Management menüsünde Active Users a tıklayın.
  3. 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.

  1. https://skyline.vmware.com/advisor adresinden Skyline Advisor a giriş yapın.
  2. User Settings altında My Account a tıklayın.
  3. API Tokens tabında GENERATE A NEW API TOKEN a tıklayın.
  4. 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.
  5. 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 NameTypeDescription
findingIdStringFindings Identifier
accountIdStringAccount Identifier
productsStringList Of products impacted by this Finding
findingDisplayNameStringFindings display name
severitySeveritySeverity level of the given finding
findingDescriptionStringFinding description
findingImpactStringImpact 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
categoryNameStringFindings category name
findingTypes[FindingType]Type of finding
firstObservedLongFirst known occurence of this finding
totalAffectedObjectsCountLongTotal objects count
affectedObjects(start: Int, limit: Int)AffectedObjectPaginated list of objects affected by this Finding (Max Limit 20)
Skyline Findings için API Şema gereksinimleri

Affected Objects Schema

Field NameTypeDescription
sourceNameStringSource Name
objectNameStringObject Name
objectTypeStringObject Type
versionStringVersion
buildNumberStringBuild Number
solutionTags[DeploymentInfo]Solution tags for affected object
firstObservedLongFirst known occurrence of this affected object
Skyline Affected Objects için API Şema gereksinimleri

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" }

GraphQL ile Skyline API başarılı sorgu çıktısı

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.

ShellScript
#!/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

Leave a Reply

Your email address will not be published. Required fields are marked *