...
Table of Contents |
---|
Introduction
This tutorial continues on from Get Started started with the Abiquo API!
Modify an entity through the API
Because the VM entity is a special case, we are going to look at two types of modifications: configuring a VM and changing the state of a VM.
But for most entities you can simply retrieve a data object with a GET request, modify the data object, and then perform a PUT request.
Warning |
---|
Links do more than just take you to related objects–they also define the configuration of a VM. When you edit the data object, take care not to accidentally remove any links because you could accidentally remove a disk or a NIC or perform some other unintended action! |
To add a NIC to the VM, we are going to first perform the steps using the UI, in order to obtain information about the data object.
Configure the VM to add a NIC through the UI
Now we will add a network interface card (NIC) with an IP address in a private network to the first VM we created. In this case, we will assume that the VM is not deployed.
- Open the browser console at the Network tab and record actions
- Edit the VM, go to Network → Private → select network → drag and drop an IP, and Save the VM
- Examine the PUT request and look for the link to the NIC and expand it. It will probably be at the end of the links section.
Tip | ||
---|---|---|
| ||
If your VM is deployed, then it will already have a NIC. To work with a deployed VM, you may need to create another private network, because by default, you may not be able to add two NICs in the same private network. To change the configuration of a deployed VM, if the VM doesn't have network hot-reconfigure, then you will need to shut it down first. |
At the top of the Request Payload section, click "view source". Copy the source, format it, and select the link to the NIC and copy it. After formatting, it will look something like this.
In this tutorial, you will use the Abiquo API to do the following.
Configure a VM by adding an IP address (NIC)
Delete a VM
There is also a link to another section that describes how to power cycle a VM.
...
Requirements
This tutorial requires two VMs that are:
Not deployed
Have no IP addresses (NICs)
You will also need 2 free IP addresses in private networks in the virtual datacenter with the VMs.
To use VMs from the previous tutorial, in the UI undeploy it and delete its IP address.
Tip |
---|
Working with Deployed VMs A deployed VM must always have a NIC. If you want to add another NIC, you may need to create another network to avoid trying to add two IP addresses in the same network. To change the configuration of a deployed VM, if the VM doesn't have network hot-reconfigure, then you will need to shut it down first. |
...
Get and modify an entity using the API
In general, to modify an entity using the Abiquo API, do these steps.
Use a
GET
request to retrieve the entity's data objectModify the data object
Use a
PUT
request to update the entity
Note |
---|
Within a data object, links can define an entity's configuration. When you edit the VM data object, be careful not to accidentally delete links because you could change the configuration, such as by deleting a disk from your VM! |
...
Configure a VM to add a NIC using the UI
First perform the action using the Abiquo UI, to view the API request that the UI makes.
To the first VM, which is not deployed, add a network interface card (NIC) with an IP address in a private network.
Open the browser console to the Network tab and record actions
Edit the VM and go to Network → Private
Select the network and drag an IP address into the NICs panel, and Save the VM
Find the
PUT
request and copy it, or get thenic
link and VM data object
...
Obtain the link to the NIC
In the VM object, find the link to the NIC (with a rel
attribute with a value of nic1
near the end of the VM links section.
Code Block |
---|
{ "title":"privateip", "rel":"nic0nic1", "type":"application/vnd.abiquo.privateip+json", "href":"https://mjsabiquoabiquo.bcnlab.abiquoexample.com:443/api/cloud/virtualdatacenters/212/privatenetworks/59/ips/1611" }, |
We will use this type of NIC link in the next step.
...
...
Get an IP address to add to the VM
...
Now we are going to add a NIC to the second VM. To do this, we need to identify the second private IP that we created for this tutorial.
So we perform a GET request to retrieve all the IP addresses on the same network used above.
...
To find a free IP address:
From the link to the NIC in the previous step, get only the networks IPs link
Code Block https://
...
abiquo.
...
lab.
...
example.com:443/api/cloud/virtualdatacenters/
...
12/privatenetworks/
...
9/ips
...
Use a
...
GET request
...
to obtain the first 3 IP addresses in this network, and add the query parameter
limit
with a value of3
Code Block curl --verbose 'https://
...
abiquo.
...
lab.
...
example.com:443/api/cloud/virtualdatacenters/
...
12/privatenetworks/
...
9/ips?limit=3' \ -H 'Accept: application/vnd.abiquo.privateips+json; version=
...
6.
...
1' \ -u
...
user:
...
password -k | jq .
...
To retrieve IPs that are available for use only, use the query parameter
free
with a value oftrue
The response has 3 IP addresses: the gateway and the IP addresses we created specifically for this exercise.
...
Code Block
...
√ ~
...
% curl --verbose -k 'https://
...
abiquo.
...
lab.
...
example.com:443/api/cloud/virtualdatacenters/
...
12/privatenetworks/
...
9/ips?limit=3' \ -H 'Accept: application/vnd.abiquo.privateips+json; version=
...
6.
...
1' \ -u
...
user:
...
password
...
| jq .
...
...
...
...
...
...
...
>
...
GET /api/cloud/virtualdatacenters/
...
12/privatenetworks/
...
9/ips?limit=3 HTTP/1.1 > Host: abiquo.lab.example.com > Authorization: Basic
...
XXXXXX > User-Agent: curl/7.
...
88.
...
1 >
...
...
Accept: application/vnd.abiquo.privateips+json; version=
...
6.
...
1 > < HTTP/1.1 200 200 < Date: Wed,
...
07 Jun
...
2023 13:
...
54:
...
46 GMT
...
...
< Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips < Set-Cookie: ABQSESSIONID=
...
5848743475559326145; Max-Age=1800; Expires=Wed,
...
07-Jun-
...
2023
...
14:
...
24:
...
46 GMT; Path=/; Secure; HttpOnly; SameSite=strict < X-Abiquo-
...
TracerContext:
...
c2b1df27-14c5-4e28-917d-f793d7dc3a71 <
...
X-Abiquo-
...
Token:
...
XXXXXX <
...
Cache-
...
Control:
...
no-cache, no-store, max-age=0, must-revalidate < Pragma: no-cache < Expires: 0 < Strict-Transport-Security: max-age=31536000 ; includeSubDomains < X-XSS-Protection: 1; mode=block < X-Frame-Options: DENY < X-Content-Type-Options: nosniff < Content-Type: application/vnd.abiquo.privateips+json; version=6.1 < Transfer-Encoding: chunked < { "totalSize": 4, "links": [ { "rel": "first", "href": "https://
...
abiquo.
...
lab.
...
example.com:443/api/cloud/virtualdatacenters/
...
12/privatenetworks/
...
9/ips?limit=3&by=ip&asc=true" }, {
...
...
...
"rel": "
...
next",
...
"href": "https://
...
abiquo.
...
lab.
...
example.com:443/api/cloud/virtualdatacenters/
...
12/privatenetworks/
...
9/ips?startwith=3&limit=3&by=ip&asc=true" }, { "
...
rel": "
...
last",
...
"
...
href": "
...
https://abiquo.lab.example.com:443/api/cloud/virtualdatacenters/12/privatenetworks/9/ips?startwith=1&limit=3&by=ip&asc=true" } ], "
...
collection":
...
[ {
...
"id": 8,
...
"ip": "192.168.0.1",
...
"
...
mac": "
...
00:50:56:2F:D8:F3",
...
"
...
name": "
...
0050562FD8F3_captured",
...
...
"
...
networkName": "
...
default_private_network",
...
"ipv6":
...
false, "quarantine": false,
...
"available":
...
true, "
...
links":
...
[ {
...
...
"
...
title": "
...
default_private_network", "
...
rel": "
...
privatenetwork", "
...
type": "
...
application/vnd.abiquo.vlan+json",
...
...
"href": "https://abiquo.lab.example.com:443/api/cloud/virtualdatacenters/12/privatenetworks/9"
...
...
},
...
...
...
{
...
"
...
title": "privateip",
...
...
"rel": "self", "
...
type": "application/vnd.abiquo.privateip+json", "href": "https://
...
abiquo.
...
lab.
...
example.com:443/api/cloud/virtualdatacenters/
...
12/privatenetworks/9/
...
ips/8" },
...
{ "
...
title": "
...
vdcbcdc", "
...
rel": "
...
virtualdatacenter",
...
"type": "application/vnd.abiquo.virtualdatacenter+json",
...
...
"href": "https://
...
abiquo.
...
lab.
...
example.com:443/api/cloud/virtualdatacenters/
...
12"
...
} ]
...
}, { "
...
id":
...
11,
...
"ip": "192.168.0.2", "mac":
...
"00:50:56:1A:2E:18",
...
"
...
name": "
...
0050561A2E18_captured",
...
"
...
networkName": "
...
default_private_network",
...
"
...
ipv6":
...
false, "
...
usedBy": "
...
1979e77f-32b1-430d-9b92-9f6347dbd416",
...
"quarantine": false, "available":
...
true, "links": [
...
{ "
...
title": "
...
default_private_network", "rel": "
...
privatenetwork", "
...
type": "
...
application/vnd.abiquo.vlan+json", "href": "https://
...
abiquo.
...
lab.
...
example.com:443/api/cloud/virtualdatacenters/
...
12/
...
privatenetworks/9" }, {
...
"title": "
...
privateip", "rel": "
...
self", "
...
type": "
...
application/vnd.abiquo.privateip+json",
...
"href": "https://abiquo.lab.example.com:443/api/cloud/virtualdatacenters/12/privatenetworks/9/ips/11"
...
},
...
...
{
...
...
"
...
title": "
...
vdcbcdc", "
...
rel": "
...
virtualdatacenter", "
...
type": "
...
application/vnd.abiquo.virtualdatacenter+json", "
...
href": "
...
https://abiquo.lab.example.com:443/api/cloud/virtualdatacenters/12" }, {
...
...
"
...
title": "
...
vapbcdc",
...
...
...
"rel": "virtualappliance",
...
"
...
type":
...
"application/vnd.abiquo.virtualappliance+json", "href": "https://
...
abiquo.
...
lab.
...
example.com:443/api/cloud/virtualdatacenters/
...
12/
...
virtualappliances/
...
4"
...
},
...
{
...
"title": "vmapihowto", "
...
rel": "
...
virtualmachine",
...
...
"type": "application/vnd.abiquo.virtualmachine+json", "href": "https://
...
abiquo.
...
lab.
...
example.com:443/api/cloud/virtualdatacenters/
...
12/
...
virtualappliances/
...
4/
...
virtualmachines/
...
304"
...
}
...
] },
...
...
{ "
...
id":
...
12,
...
"ip": "192.168.0.3",
...
"mac": "00:50:56:18:63:13",
...
"
...
name": "
...
005056186313_host", "
...
networkName": "
...
default_private_network", "ipv6": false, "
...
quarantine":
...
false, "available": true, "
...
links":
...
[
...
{
...
"
...
title":
...
"default_private_network", "
...
rel": "
...
privatenetwork", "
...
type": "
...
application/vnd.abiquo.vlan+json", "
...
href": "
...
https://abiquo.lab.example.com:443/api/cloud/virtualdatacenters/12/privatenetworks/9"
...
},
...
...
...
{
...
"
...
title":
...
"privateip",
...
...
"
...
rel":
...
"self",
...
"type": "application/vnd.abiquo.privateip+json", "href": "https://
...
abiquo.
...
lab.
...
example.com:443/api/cloud/virtualdatacenters/
...
12/privatenetworks/
...
9/ips
...
/12"
...
...
},
...
{ "
...
title":
...
"vdcbcdc", "rel": "virtualdatacenter", "
...
type": "
...
application/vnd.abiquo.virtualdatacenter+json",
...
...
"
...
href":
...
"https://abiquo.lab.example.com:443/api/cloud/virtualdatacenters/12" } ] } ] }
In the above example, the NIC for the IP address of 192.168.0.2
is the one that we just added to the VM called vmapihowto
and it has a link to the VM.
Hint: to only retrieve IPs that are available for use, you can use the request parameter "free=true", as follows.
Code Block |
---|
https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/26/privatenetworks/34/ips?free=true |
The available IP that we will use has the identifier "17".
And the link we need from this IP object is the link with a "rel" value of "self"
The available IP address of 192.168.0.3
is the one we will use, and it has an ID of 12
.
Create a NIC link
From the IP address object in the above step, get the link with a rel
attribute that has a value of self
.
Code Block |
---|
{ "hreftitle": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/privatenetworks/5/ips/17privateip", "typerel": "application/vnd.abiquo.privateip+jsonself", "reltype": "selfapplication/vnd.abiquo.privateip+json", "titlehref": "privateip" }, |
...
https://abiquo.lab.example.com:443/api/cloud/virtualdatacenters/12/privatenetworks/9/ips/12"
}, |
To prepare it for the VM, change the rel
attribute from a value of self
to nicX
, where X
represents the number of the new NIC in the VM. So if there are no NICs on the machine, we will add "nic0" nic1
as shown here.
Code Block |
---|
{ "hreftitle": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/privatenetworks/5/ips/17",privateip", "rel": "nic1", "type": "application/vnd.abiquo.privateip+json", "relhref": "nic0", "title": "privateip"https://abiquo.lab.example.com:443/api/cloud/virtualdatacenters/12/privatenetworks/9/ips/12" }, |
Remember that when you add this NIC to the end of the links section, you must add a comma first, after the previous item. And as this will be the last link, remember to remove the comma after it.
So here is an example of the request body that would be used to update our second VM, with the nic0 link at the end of the links section.
...
Add the NIC link to the VM object
Get the VM object that you created using the API in the first part of this tutorial.
To get the VM entity again, you can send a GET
request to the cloud/virtualmachines
link.
In this case, we are using a vmname
query parameter to filter on the number 2
in the VM name to only retrieve the VM from the first part of the tutorial.
Code Block |
---|
√ ~ % curl --verbose 'https://abiquo.lab.example.com:443/api/admin/enterprises/2", cloud/virtualmachines?vmname=2' \"type" -H 'Accept:" application/vnd.abiquo. enterprisevirtualmachines+json", ; version=6.1' \"rel": "enterprise", "title": "Cloudland" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8", "type": "application/vnd.abiquo.virtualmachine+json", "rel": "edit", "title": "ABQ_06cfadf0-db57-48c5-8f4c-f9fe2ca76c46" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/admin/publiccloudregions/1/enterprises/2/virtualmachines/8/action/sendmail", "type": "application/vnd.abiquo.mail+json", "rel": "sendmail", "title": "send mail" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/admin/enterprises/2/users/1", "type": "application/vnd.abiquo.user+json", "rel": "user", "title": "Cloud Administrator" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2", "type": "application/vnd.abiquo.virtualdatacenter+json", "rel": "virtualdatacenter", "title": "bcdc_vdc_cloudland_01" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2", "type": "application/vnd.abiquo.virtualappliance+json", "rel": "virtualappliance", "title": "bcdc_vdc_cloudland_01_vapp_01" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/metadata", "type": "application/vnd.abiquo.metadata+json", "rel": "metadata", "title": "metadata" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/network/configurations", "type": "application/vnd.abiquo.virtualmachinenetworkconfigurations+json", "rel": "configurations", "title": "vlan network configurations" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/network/nics", "type": "application/vnd.abiquo.nics+json", "rel": "nics", "title": "nics" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/storage/disks", "type": "application/vnd.abiquo.harddisks+json", "rel": "harddisks", "title": "disks" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/state", "type": "application/vnd.abiquo.virtualmachinestate+json", "rel": "state", "title": "NOT_ALLOCATED" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/action/undeploy", "type": "application/vnd.abiquo.acceptedrequest+json", "rel": "undeploy", "title": "virtual machine undeploy" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/action/deploy", "type": "application/vnd.abiquo.acceptedrequest+json", "rel": "deploy", "title": "virtual machine deploy" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/action/reset", "type": "application/vnd.abiquo.acceptedrequest+json", "rel": "reset", "title": "virtual machine reset" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/action/instance", "type": "application/vnd.abiquo.acceptedrequest+json", "rel": "instance", "title": "virtual machine snapshot" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/config/rdpaccess", "type": "application/vnd.abiquo.virtualmachineconsole+json", "rel": "rdpaccess", "title": "remote access" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/tasks", "type": "application/vnd.abiquo.tasks+json", "rel": "tasks", "title": "tasks" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/firewalls", "type": "application/vnd.abiquo.links+json", "rel": "firewalls", "title": "firewalls" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/loadbalancers", "type": "application/vnd.abiquo.loadbalancers+json", "rel": "loadbalancers", "title": "load balancers" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/backup/action/request", "type": "application/vnd.abiquo.ondemandbackup+json", "rel": "requestbackup", "title": "request on demand backup" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/backup/action/restore", "type": "application/vnd.abiquo.restore+json", "rel": "requestrestore", "title": "request a restore of a backup" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/action/vappmove", "type": "application/vnd.abiquo.links+json", "rel": "vappmove", "title": "move VM to a virtual appliance" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/action/move", "type": "application/vnd.abiquo.movevm+json", "rel": "move", "title": "move VM to another virtual datacenter" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/storage/volumes", "type": "application/vnd.abiquo.volumes+json", "rel": "volumes", "title": "volumes" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/disks/31", "type": "application/vnd.abiquo.harddisk+json", "rel": "disk0", "title": "9c83fcc3-e9cb-44bf-88d0-f8a98248fa69", "length": "64", "diskLabel": "Hard disk 1", "diskControllerType": "IDE" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/locations/1/datastoretiers/1", "type": "application/vnd.abiquo.datastoretier+json", "rel": "datastoretier0", "title": "Default Tier" }, { "href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/action/protect", "type": "text/plain" -u user:password -k | jq . |
This request returns a collection of VMs, so you will need to select the individual VM from the collection.
In the VM object, go the end of the links
section and add the NIC link from the previous step.
If this is the last link, remember to add a comma before it, and remove any comma after it.
This is an example of a modified VM object, with the nic1
link at the end of a shortened links
section. We shortened the links
section to make the example more readable
Code Block |
---|
{ "id": 305, "rel uuid": "protect eb613c22-ffa1-4498-827a-ccaf37385c2e", "title fqdn": "protect box.localdomain",}, "description": "A virtual{ machine","href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/action/unprotect" "coresPerSocket": 1, "type idState": 1,"text/plain" "idType": 0, "rel type": "unprotect MANAGED", "title highDisponibility": 0, "unprotect monitored": false,}, {"monitoringLevel": "DEFAULT", "href protected":"https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/metrics" false, "type variables":"application/vnd.abiquo.metricsmetadata+json" {}, "rel backuppolicies":"metricsmetadata" [], "title lastSynchronize": 1686046081000, "metricsmetadata generateGuestInitialPassword": false,}, {"natrules": [], "href vdrpEnabled": true,"https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/enablemonitoring" "vdrpPort": 0, "type password": "6t51rgZ9", "rel deallocated":"enablemonitoring" false, "title name": "enablemonitoring vmapihowto2",}, "ram": 48,{ " hrefcpu":"https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/metrics/collectd" 1, "type state": "application/json NOT_ALLOCATED", "rel creationTimestamp":"collectd" 1686042455000, "title birthTimestamp":"collectd" 1686045726000,}, "links": [{ {"href": "https://mjsabiquo.bcn.abiquo.com:443/api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/alarms", " typetitle": "application/vnd.abiquo.alarms+json Abiquo", "rel": "alarmssearch enterprise", "title type": "alarmssearch" }, application/vnd.abiquo.enterprise+json",{ "href": "https:// mjsabiquoabiquo.bcn lab.abiquo example.com:443/api/cloud admin/virtualdatacenters/2/virtualappliances/2/virtualmachines/8/action/clone", enterprises/1""type": "application/vnd.abiquo.virtualmachinecloneoptions+json", }, {"rel": "clone", "title": " clone"
}vmapihowto2",{ " href": "https://mjsabiquo.bcn.abiquo.com:443/api/config/hypervisortypes/KVM",rel": "edit", "type": "application/vnd.abiquo.hypervisortype virtualmachine+json", "rel href": "hypervisortype", https://abiquo.lab.example.com:443/api/cloud/virtualdatacenters/12/virtualappliances/4/virtualmachines/305""title": "KVM" },}, ...{ "href": "https://mjsabiquo.bcn.abiquo.com:443/api/admin/enterprises/2/datacenterrepositories/1/virtualmachinetemplates/86",{ "type title": "application/vnd.abiquo.virtualmachinetemplate+json VMware vCenter Cluster", "rel": "virtualmachinetemplate hypervisortype", "title type": "yvm2" } application/vnd.abiquo.hypervisortype+json",{ "href": "https:// mjsabiquoabiquo.bcn lab.abiquo example.com:443/api/config/categories/1", hypervisortypes/VCENTER_CLUSTER" }, {"type "title": "application/vnd.abiquo.category+json yVM", "rel": "category virtualmachinetemplate", "title type": "Others" } application/vnd.abiquo.virtualmachinetemplate+json",{ "href": "https:// mjsabiquoabiquo.bcn lab.abiquo example.com:443/api/cloud admin/virtualdatacenters enterprises/2 1/privatenetworks datacenterrepositories/5 2/ips virtualmachinetemplates/17", 145" }, {"type": "application/vnd.abiquo.privateip+json", " reltitle": "nic0 Others", "title rel": "privateip category",} ], " natrulestype":[], "application/vnd.abiquo.category+json","generateGuestInitialPassword": false, "backuppolicies href":[], "https://abiquo.lab.example.com:443/api/config/categories/1""creationTimestamp": 1560939950000, "variables": {},
"protected": false,"monitored": false, {"ram": 48, "coresPerSocket": 1, " cputitle":1 "privateip","description": "A virtual machine", "label rel": "yVM_New nic1","name "type": "ABQ_06cfadf0-db57-48c5-8f4c-f9fe2ca76c46 application/vnd.abiquo.privateip+json","uuid": "06cfadf0-db57-48c5-8f4c-f9fe2ca76c46", "id": 8,"href"vdrpEnabled": true, "vdrpPort": 0, "idState": 1, "state": "NOT_ALLOCATED", "idType": 0, "type": "MANAGED", "highDisponibility": 0, "password": "VUFvbvoa" } |
...
: "https://abiquo.lab.example.com:443/api/cloud/virtualdatacenters/12/privatenetworks/9/ips/12"
}
],
"usageStatistics": []
} |
...
Update the VM to add the NIC
Create a PUT
request to update the whole VM, including all the links. As the VM object is quite large, instead of adding it to the -d option between single quotation marks,
To easily manage the large data object, you can save it to a JSON file, for example, "VMnic.json", and then use the @ the @
notation to reference the file in the cURLthe PUT
request.
In our example, we called the file vmapihowto2.json
.
Code Block |
---|
curl --verbose -X PUT 'https://mjsabiquoabiquo.bcnlab.abiquoexample.com:443/api/cloud/virtualdatacenters/212/virtualappliances/24/virtualmachines/8305' \ -H 'Content-Type: application/vnd.abiquo.virtualmachine+json; version=46.61' \ -H 'Accept: application/vnd.abiquo.acceptedrequest+json; version=46.61' \ -u adminuser:xabiquopassword \ -d @VMnic@vmapihowto2.json -k |
The full text of the response object is shown in the expanding section belowSend the PUT
request.
If the request is successfulplatform updates the VM successfully, the response status and message will be "204 No content
".
In the UI, when you select the VM, and open the control panel in the Network tab, the NIC should display.
This expanding section contains the full request with the VM object embedded in it.
...
for an undeployed VM.
An example of the request is given here.
Code Block |
---|
√ api_tutorials % curl --verbose -X PUT 'https://abiquo.lab.example.com:443/api/cloud/virtualdatacenters/12/virtualappliances/4/virtualmachines/305' \ -H 'Content-Type: application/vnd.abiquo.virtualmachine+json; version=6.1' \ -H 'Accept: application/vnd.abiquo.acceptedrequest+json; version=6.1' \ -u user:password \ -d @vmapihowto2.json -k > PUT /api/cloud/virtualdatacenters/2 12/virtualappliances/2 4/virtualmachines/8' -H 'Content-Type: application/vnd.abiquo.virtualmachine+json; version=4.6' -H 'Accept: application/vnd.abiquo.acceptedrequest+json; version=4.6' -u admin:xabiquo -d @VMnic.json -k * Connected to mjsabiquo.bcn.abiquo.com (10.60.13.180) port 443 (#0) * Server auth using Basic with user 'admin' > PUT /api/cloud/virtualdatacenters/2/virtualappliances/2/virtualmachines/8 305 HTTP/1.1 > Host: abiquo.lab.example.com > Authorization: Basic XXXXXXX > User-Agent: curl/7.88.1 > Content-Type: application/vnd.abiquo.virtualmachine+json; version=6.1 > Accept: application/vnd.abiquo.acceptedrequest+json; version=6.1 > Content-Length: 12498 > < HTTP/1.1> 204Authorization: 204Basic YWRtaW46eGFiaXF1bw== > User-Agent: curl/7.35.0 > Host: mjsabiquo.bcn.abiquo.com > Content-Type: application/vnd.abiquo.virtualmachine+json; version=4.6 > Accept: application/vnd.abiquo.acceptedrequest+json; version=4.6 > Content-Length: 9805 > Expect: 100-continue > < HTTP/1.1 100 Continue < HTTP/1.1 204 204 < Date: Wed, 19 Jun 2019 13:30:55 GMT < Server: Apache < Set-Cookie: ABQSESSIONID=4974951206556392645; Max-Age=1800; Expires=Wed, 19-Jun-2019 14:00:55 GMT; Path=/; Secure; HttpOnly < X-Abiquo-Token: 2772ef503a95419ab7066ee6771751e622f4fd0743fe006121a77f6b3213506b < |
...
Before you begin this section, deploy a VM through the user interface.
...
Delete an entity through the API
...
< Date: Wed, 07 Jun 2023 15:06:58 GMT
< Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
< Set-Cookie: ABQSESSIONID=7288756894413749700; Max-Age=1800; Expires=Wed, 07-Jun-2023 15:36:58 GMT; Path=/; Secure; HttpOnly; SameSite=strict
< X-Abiquo-TracerContext: e54d1e2f-6b6a-4338-ba9e-4c770f4e9813
< X-Abiquo-Token: XXXXXX
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: 0
< Strict-Transport-Security: max-age=31536000 ; includeSubDomains
< X-XSS-Protection: 1; mode=block
< X-Frame-Options: DENY
< X-Content-Type-Options: nosniff
< |
...
Check your VM in the UI
In the UI, when you select the VM, and open the VM details panel to the NICs tab, the NIC should display.
...
Change the power states of a VM
To prepare a VM to change power states, deploy a VM using the UI or the API.
To deploy the VM you were using in the previous step, send a POST
request to the deploy
link.
Then see Administer and troubleshoot VMs in the "Manage VM power states using the API" section
...
Delete a VM using the API
To delete a VM (or another entity), simply perform a DELETE request to the API link. But remember
Note that there may be restrictions on what you can delete. For example, you cannot delete a virtual datacenter that contains virtual appliances.
If we delete the VM using the following queryas shown here, it will be removed from the platform (and if it exists on the hypervisor, it will be destroyed). The NIC we added will be detached and released back into And the IP address will return to the virtual datacenter.
Code Block |
---|
curl -X DELETE https://mjsabiquoabiquo.bcnlab.abiquoexample.com:443/api/cloud/virtualdatacenters/212/virtualappliances/24/virtualmachines/8 \ 305 \ -H 'Accept: text/json,application/json;' \ -u user:password -k |
...
Conclusion
Congratulations, you have now completed the Abiquo API tutorials. You can now continue to experiment using the API together with the UI. And you can find more examples in the API Howtos section.
And of course don't forget to check out the Java and Python libraries. Enjoy!
Related links