首页 > 解决方案 > SoftLayer API 在调用 setUserMetadata 时返回 SoftLayer_Exception_NotImplemented

问题描述

我遇到了返回 SoftLayer_Exception_NotImplemented 的 500 错误。

SoftLayer_Exception_NotImplemented: SoftLayer_Virtual_Guest_Strategy_Behavior_Standard::setUserMetadata is not implemented. (HTTP 500)

它发生在我调用 createObject 后设置用户元数据时。并且此虚拟机在“设置供应配置”中保持“停止”状态。我只是等了大约 30 秒才重试。所以我编程了 60 秒暂停。这个值可以吗?

标签: ibm-cloud-infrastructure

解决方案


这里报告了同样的错误IBM Cloud Infrastructure cli error - setUserMetadata is not implemented

这是一个如何使用 REST 调用setUserMetadata的示例:

POST: https://api.softlayer.com/rest/v3/SoftLayer_Virtual_Guest/[vmID]/setUserMetadata

BODY:
{
    "parameters":[
        [
            "value1"
        ]
    ]
}

我无法重现错误,我等了 50 秒才运行以下 softlayer-go 示例,并且元数据设置成功:

virtualService := services.GetVirtualGuestService(sess)
metadata := []string{"value1"}  

result, err := virtualService.Id(11122233).SetUserMetadata(metadata)
    if err != nil {
        fmt.Printf("\n Unable to set user metadata:\n - %s\n", err)
        return
    }
    // If true prints the user data
    if result == true {
        udata, err := virtualService.Id(11122233).GetUserData()
        if err != nil {
            fmt.Printf("\n Unable retrieve user data:\n - %s\n", err)
            return
        }
        jsonFormat, jsonErr := json.MarshalIndent(udata, "", "     ")
        if jsonErr != nil {
            fmt.Println(jsonErr)
            return
        }
        fmt.Println(string(jsonFormat))

输出:

[
     {
          "type": {
               "keyname": "USER_DATA",
               "name": "User Data"
          },
          "value": "value1"
     }
]

以下是我打电话后得到的回应/rest/v3.1/SoftLayer_Resource_Metadata/getUserMetadata

root@example:~# curl -i https://api.service.softlayer.com/rest/v3.1/SoftLayer_Resource_Metadata/getUserMetadata
HTTP/1.1 200 OK
Date: Wed, 25 Jul 2018 15:12:21 GMT
Server: Apache
X-Frame-Options: SAMEORIGIN
Content-Length: 8
Vary: Accept-Encoding
Connection: close
Content-Type: application/json
Strict-Transport-Security: max-age=31536000

"value1"

我关闭了 VM(Halted),我还能够设置一个新的元数据,我不确定你是如何得到这个错误的。

我建议您在创建 VM 时设置元数据,因为它将在配置 VM 时设置,以下是 REST 中使用createObject方法的示例:

POST: https://api.softlayer.com/rest/v3/SoftLayer_Virtual_Guest/createObject

{
    "parameters": [{
        "hostname": "hostname01",
        "domain": "softlayer.local",        
        "datacenter": { "name": "dal10" },      
        "startCpus": 1,
        "maxMemory": 1024,
        "localDiskFlag": false,
        "blockDevices": [{
                "device": "0",
                "diskImage": { "capacity": 25   }
            }],
        "networkComponents": [{ "maxSpeed": 10 }],
        "hourlyBillingFlag": true,      
        "operatingSystemReferenceCode": "DEBIAN_LATEST",        
        "userData": [ { "value": "someUserMetadataValue" } ]        
    }]
}

推荐阅读