VMware {code} Community
SimonF5
Contributor
Contributor

vSphere Rest API: Set Guest Customization not working

Hello friends@vmware

I need to use the rest API to set metadata but it always failed with 400. Can someone please take a look ? I used base64 to encode the metadata. 

Based on the documentation (https://developer.vmware.com/apis/vsphere-automation/latest/vcenter/api/vcenter/vm/vm/guest/customiz... ), below is a good payload:

{
"spec": {
"configuration_spec": {
"cloud_config": {
"cloudinit": {
"metadata": "aW5zdGFuY2UtaWQ6IGJpZy1pcC1uZXh0CmxvY2FsLWhvc3RuYW1lOiBiaWctaXAtbmV4dApkc21vZGU6IGxvY2FsCm5ldHdvcms6CiAgdmVyc2lvbjogMgogIGV0aGVybmV0czoKICAjIG9wYXF1ZSBJRCBmb3IgcGh5c2ljYWwgaW50ZXJmYWNlcywgb25seSByZWZlcnJlZCB0byBieSBvdGhlciBzdGFuemFzCiAgICBlbnMxNjA6CiAgICAgIGFkZHJlc3NlczoKICAgICAgICAtIDEwLjE0Ni4xNjguMS8yNAogICAgICBnYXRld2F5NDogMTAuMS4xLjEKICAgICAgbmFtZXNlcnZlcnM6CiAgICAgICAgYWRkcmVzc2VzOiBbMTAuMS4xLjFd"
},
"type": "CLOUDINIT"
}
},
"global_DNS_settings": {},
"interfaces": [
{
"adapter": {
"ipv4": {
"type": "STATIC"
}
}
}
]
}
}

However, when I use curl to send the request, it failed. Below is the request and response . 

---------- Request ---------------

curl -ki -X PUT -H "vmware-api-session-id: $sessionID" -H "Content-Type: application/json" -d '{"spec":{"configuration_spec":{"cloud_config":{"cloudinit":{"metadata":"bmV0d29yazoKICB2ZXJzaW9uOiAyCiAgZXRoZXJuZXRzOgogICMgb3BhcXVlIElEIGZvciBwaHlzaWNhbCBpbnRlcmZhY2VzLCBvbmx5IHJlZmVycmVkIHRvIGJ5IG90aGVyIHN0YW56YXMKICAgIGVuczE2MDoKICAgICAgYWRkcmVzc2VzOgogICAgICAgIC0gMTAuMTQ2LjE2OC4xLzI0"},"type":"CLOUDINIT"}},"global_DNS_settings":{},"interfaces":[{"adapter":{"ipv4":{"type":"STATIC"}}}]}}' https://$host/api/vcenter/vm/vm-397399/guest/customization

-------- Response -----------------
HTTP/2 400
date: Thu, 09 Mar 2023 03:33:48 GMT
content-type: application/json
x-envoy-upstream-service-time: 32
server: envoy

 

{"error_type":"INVALID_ARGUMENT","messages":[]}

0 Kudos
1 Reply
kaushikpal
Contributor
Contributor

I suppose you would need to pass proper/complete data to interface and dns if you want to set them.

0 Kudos