Introduction
This page describes how to refresh the datacenter repository and load templates from a remote repository, such as the default Abiquo remote repository.
When you refresh the repository, the platform will detect VM templates that you have manually added to the repository filesystem. See Importing templates into the catalogue#ManualUpload
This tutorial does not describe how to upload an OVA or disk file from your local system in Abiquo. The easiest way to do this is to use the UI, which will call the Appliance manage remote service to load the package or disk, and automatically process an OVA file. See Add VM Templates to the Apps Library
To use the API, see Appliance manager template API upload and download. You can also Upload and replace template disks via API
You will need the following resources.
Datacenter
Remote repository (e.g. default remote repository)
A cloud tenant (see How to create a tenant via API)
Your user role must include the following privileges.
ENTERPRISE_ADMINISTER_ALL
MANAGE_ENTERPRISES
APPLIB_ALLOW_MODIFY
The following pages describe the enterprise UI and Apps library functionality.
Summary diagram
The steps in this diagram link to the API reference guide resources and data entities sections.
Detailed steps
Get the enterprise by name and switch to the enterprise
Reference: How to switch enterprises via API
Also keep the datacenterrepositories link of the enterprise
{ "title": "repositories", "rel": "datacenterrepositories", "type": "application/vnd.abiquo.datacenterrepositories+json", "href": "https://example.com:443/api/admin/enterprises/267/datacenterrepositories" },
Get the datacenter repositories for the enterprise
From the enterprise entity, use the URL of the datacenter repositories link
{ "title": "repositories", "rel": "datacenterrepositories", "type": "application/vnd.abiquo.datacenterrepositories+json", "href": "https://example.com:443/api/admin/enterprises/267/datacenterrepositories" },
Reference: https://wiki.abiquo.com/api/latest/DatacenterRepositoriesResource.html#list-datacenter-repositories
From each datacenter repository, you will need the refresh link
{ "title": "refresh", "rel": "refresh", "type": "application/vnd.abiquo.acceptedrequest+json", "href": "https://example.com:443/api/admin/enterprises/267/datacenterrepositories/1/actions/refresh" },
And the "virtualmachinetemplates" link.
{ "title": "virtual machine templates", "rel": "virtualmachinetemplates", "type": "application/vnd.abiquo.virtualmachinetemplates+json", "href": "https://example.com:443/api/admin/enterprises/267/datacenterrepositories/1/virtualmachinetemplates" },
Refresh the datacenter repository to update the Apps library
Perform a PUT request to the refresh link.
cURL
curl --verbose -X PUT https://example.com:443/api/admin/enterprises/267/datacenterrepositories/1/actions/refresh \ -H "Accept: application/vnd.abiquo.acceptedrequest+json; version=4.7;" \ -u user:password
The refresh is an asynchronous task, so wait until it has completed to go on to the next step
Retrieve a compatible template
If a compatible template already exists, you can retrieve it now using the templates link and parameters.
cURL
curl --verbose -X GET https://example.com/api/admin/enterprises/267/datacenterrepositories/1/virtualmachinetemplates?hypervisorTypeName=VMX_04&limit=1&has=Core \ -H "Accept: application/vnd.abiquo.virtualmachinetemplates+json; version=4.7;" \ -u user:password
From a compatible template, you will need the edit link
{ "title": "Core", "rel": "edit", "type": "application/vnd.abiquo.virtualmachinetemplate+json", "href": "https://example.com:443/api/admin/enterprises/267/datacenterrepositories/1/virtualmachinetemplates/3" },
Or download a template from a remote repository.
There is a default remote repository registered in Abiquo.
To get a list of the templates available in the remote repository, use the Get template definition lists request.
cURL
curl --verbose -X GET https://example.com/api/admin/enterprises/267/appslib/templateDefinitionLists \ -H "Accept: application/vnd.abiquo.templatedefinitionslists+json; version=4.7;" \ -u user:password
Sample response. Success status code: 200. From the response, search for a suitable template definition
{ "id": 2083, "url": "http://files.template-repository.abiquo.com/m0n0wall/m0n0wall-1.3b18-i386-monolithicFlat.1.5.ovf", "name": "m0n0wall 1.3b18-i386", "description": "m0n0wall is a project aimed at creating a complete, embedded firewall software package that, when used together with an embedded PC, provides \n all the important features of commercial firewall boxes (including ease of use) at a fraction of the price (free software). https://PUBLIC:IP and use Username: admin, \n password: abiquo. Configure MANUALLY the private IP of abicloud and it's done.", "productName": "m0n0wall 1.3b18-i386", "iconUrl": "http://files.template-repository.abiquo.com/m0n0wall/m0n0wall_logo.png", "osType": "LINUX_2_6", "ethernetDriverType": "E1000", "links": [ { "title": "Reseller enterprise", "rel": "enterprise", "type": "application/vnd.abiquo.enterprise+json", "href": "https://example.com:443/api/admin/enterprises/267" }, { "title": "Firewall", "rel": "category", "type": "application/vnd.abiquo.category+json", "href": "https://example.com:443/api/config/categories/11" }, { "title": "Repository 2.0", "rel": "templateDefinitionList", "type": "application/vnd.abiquo.templatedefinitionlist+json", "href": "https://example.com:443/api/admin/enterprises/267/appslib/templateDefinitionLists/87" }, { "title": "m0n0wall 1.3b18-i386", "rel": "edit", "type": "application/vnd.abiquo.templatedefinition+json", "href": "https://example.com:443/api/admin/enterprises/267/appslib/templateDefinitions/2083" } ], "templatedefinitiondisks": [ { "label": "scsi0:0", "diskFormatType": "VMDK_FLAT", "diskFileSize": 27262976, "hdRequired": 27262976, "diskControllerType": "SCSI", "diskController": "lsilogic", "links": [] } ] },
From the template definition, keep the edit link
{ "title": "m0n0wall 1.3b18-i386", "rel": "edit", "type": "application/vnd.abiquo.templatedefinition+json", "href": "https://example.com:443/api/admin/enterprises/267/appslib/templateDefinitions/2083" }
Create a template from the template definition
The templatedefinition.json file should contain the edit link to the template definition with the value of the "rel" attribute changed to "templatedefinition"
{ "links": [ { "title": "m0n0wall 1.3b18-i386", "rel": "templateDefinition", "type": "application/vnd.abiquo.templatedefinition+json", "href": "https://example.com/api/admin/enterprises/267/appslib/templateDefinitions/2083/actions/repositoryInstall" } ] }
cURL
curl -X POST https://example.com:443/api/admin/enterprises/267/datacenterrepositories/1/virtualmachinetemplates \ -H 'Accept:application/vnd.abiquo.acceptedrequest+json;version=4.7' \ -H 'Content-Type:application/vnd.abiquo.virtualmachinetemplaterequest+json;version=4.7' \ -d @templatedefinition.json \ -u user:password --verbose
This request will return a link. You can use the link to track the progress of the task.
{ "message": "You can keep track of the progress in the link", "links": [ { "title": "status", "rel": "status", "type": "application/vnd.abiquo.task+json", "href": "https://example.com:443/api/admin/enterprises/267/datacenterrepositories/1/virtualmachinetemplates/2251/tasks/de40272f-1e23-45c0-99ae-2255e5bc752f" } ] }
The template ID is returned in the accepted request in the task link.
You can then use the VM template to create a VM. See How to create virtual datacenters and VMs via API