1

I want to get the status of encryption key from vcenter in golang to check whether the key is available on vCenter Server, and if any virtual machines or ESXi hosts, or third-party applications are using it.

I have tried searching on internet and found this vcenter api: queryCryptoKeyStatus() which returns the status of key from vcenter. I have created a function but somehow it is showing me error ServerFaultCode: ManagedObjectNotFound for all requests.

I have checked the connection to vcenter is correct and manage object also exist in vcenter. I also tried with other managed object but getting the same error for all.

Code:

func vcenterStatus() { 

    vURL := "https://admin_user:pwd@vc.671236ac.region.avslab.domain.com/sdk" 

    url, _ := url.Parse(vURL) 

    soapClient := soap.NewClient(url, false)  

    c1, err := vim25.NewClient(context.TODO(), soapClient)  

    if err != nil { 
        fmt.Printf("Encountered error %v", err) 
    } 

    cnsClient, err := cns.NewClient(context.TODO(), c1) 

    if err != nil { 
        fmt.Printf("Encountered error %v\n", cnsClient) 
    } 

    keyId := "2134ec-412e8f-cwq2ef-e799-99f" 

    CryptoKeyIdd := types.CryptoKeyId{types.DynamicData{}, keyId, &types.KeyProviderId{types.DynamicData{}, "tnt-kms-cluster"}} 

    CryptoKeyIddArr := []types.CryptoKeyId{} 

    CryptoKeyIddArr = append(CryptoKeyIddArr, CryptoKeyIdd) 

    MoRef := types.ManagedObjectReference{ 

        Type:  "Datacenter", 
        Value: "datacenter-7", 
    } 

    QueryCryptoKeyStatus := types.QueryCryptoKeyStatus{MoRef, CryptoKeyIddArr, 15} 

    resBody, err := methods.QueryCryptoKeyStatus(context.TODO(), cnsClient, &QueryCryptoKeyStatus) 

    if err != nil { 
        fmt.Printf("Encountered error %v", err) 
    } else { 
        fmt.Println("SUCCESS !!", resBody) 
    } 

} 

I am new to golang, so any help regarding the fixing of issue is highly appreciated.

0 Answers0