VO Image List Format
Introduction
AppDB produces image list files in order to provide third parties with information regarding particular virtual appliance versions (a.k.a. VM image versions), or groups thereof. There are two types of image lists; the first one is the standalone image list, generated while publishing a virtual appliance version, which contains a single image. In this case, the image list is made publicly available and accessible through AppDB, with the exception of private virtual appliances, which are only accessible by the VM authors.
The second type of image list is the VO-wide image list, which is a collection of VM versions that a VO manager has endorsed. It gets generated each time a VO manager publishes a list of endorsed VM versions and is accessible only by authenticated parties (instructions).
The format of the image list follows the HEPiX image list format and, therefore, is interoperable with the vmcatcher and the cloudkeeper clients. All of the generated image lists are signed by the AppDB service. An example of the image list structure can be found here
Image list schema
Note: Field names prefixed with ad: are AppDB-specific extensions to the HEPiX format.
Field Name | Description |
---|---|
dc:date:created | Date in year-month-dayTHour:Minute:SecondTimezone format, e.g. 2021-10-06T14:37:28Z |
dc:date:expires | Date in year-month-day format, after which the Virtual Machine Image List should no longer be trusted, e.g. 2499-12-31T22:00:00Z |
dc:description | Description of the Virtual Machine Image List, e.g. “This is a VO-wide image list for vo.access.egi.eu VO.” |
dc:identifier | RFC 4122 UUID for the Virtual Machine Image List, for unique identification purposes, e.g. 488dcdc4-9ab1-4fc8-a7ba-b7a5428ecb3d |
dc:source | Source of the image list, its default value is https://appdb.egi.eu/ |
dc:title | Title of the Virtual Machine Image List, e.g. “VO vo.access.egi.eu image list.” |
ad:num_of_images | Number of images contained in this list, e.g. 8 |
ad:publisher:fullname | Full name of image list publisher, as taken from the AppDB user profile |
ad:publisher:guid | Unique identifier of image list publisher as taken from the AppDB user profile |
ad:publisher:uri | Link to the publisher’s AppDB user profile |
ad:vo | The name of the VO this list pertains to, e.g. vo.access.egi.eu. In the case of a standalone image list, the value is always “appdb-general” |
hv:uri | URL to retrieve this image list, e.g. https://vmcaster.appdb.egi.eu/store/vo/vo.access.egi.eu/image.list. In the case of VO wide image lists, the URL is not publicly accessible. |
hv:version | The version of this image list (auto-generated from AppDB per VO), e.g. 20210913143728 |
hv:endorser/hv:x509 | Placeholder for endorser metadata |
hv:images | The images referenced by this image list |
Endorser schema
The schema of hv:endorser/hv:x509 object describing the endorser service. In our case this is the AppDB service itself.
Field Name | Description |
---|---|
hv:ca | Standard hash id for the Certification Authorities |
hv:dn | x.509 DN of the endorser |
hv:email | Email address of the endorser |
dc:creator | Name of the endorser |
Image item schema
The schema of the image data objects contained in the “hv:images” list. In the case of VO wide image lists, this information is meant to be processed by a subscription service (e.g. cloudkeeper), in order to populate a cloud provider VM catalog (e.g. OpenStack Glance).
Field Name | Optional | Description |
---|---|---|
dc:description | NO | Free text describing the image |
dc:identifier | NO | RFC 4122 UUID for image unique identification purposes |
dc:title | NO | Title of image. Default value gets auto-generated by AppDB, if not provided by user |
dc:date:expires | NO | The expiration date of the specific VM version. The value is user-defined and may span any of 3, 6, 9, or 12 months after the publication of the image version |
ad:appid | NO | AppDB ID referencing the virtual appliance the image belongs to |
ad:mpuri | NO | AppDB URL referring to the VM version in relation to the specific VO image list version. In the case of a standalone image list, this value will be the same as ad:base_mpuri Note: In the case of VO-wide image lists, this information is important, as it relates the specific virtual appliance version with the specific VO image list version. Moreover, storing it in a cloud provider catalogue helps identify the distribution of the particular image. |
ad:base_mpuri | NO | AppDB URL referring to the VM version |
ad:group | NO | Obsolete. Used in the past to group many VMs of the same virtual appliance version. Now, each virtual appliance version corresponds to a single VM, and the value defaults to “General group”. May be ignored |
hv:hypervisor | NO | Typically set to reflect the supported Virtualization technology, e.g. Xen, KVM. The list of all possible values may be retrieved from the AppDB API |
hv:format | NO | The image format, e.g. OVA. User defined |
hv:uri | NO | URI pointing to the location of this image. |
hv:version | NO | The version of the image, so that updates can share the same metadata. It does not follow a specific pattern and it is up to the user to provide, although AppDB enforces values to be unique per virtual appliance |
hv:size | NO | Size of the image in bytes, as measured by AppDB during checksum computation |
sl:checksum:sha512 | NO | Computed sha512 checksum of the image from AppDB upon publication by user |
sl:comments | NO | User comments for the specific VM version. |
sl:arch | NO | Architecture of the image, typically ’x86_64’ The list of all possible values may be retrieved from the AppDB API |
sl:os | NO | The operating system family the image runs, examples include “Linux”, “BSD”, “Windows” The list of all possible values may be retrieved from the application:osfamily elements of the AppDB API |
sl:osname | NO | The operating system the image runs, examples include “Ubuntu” The list of all possible values may be retrieved from the application:os elements of the AppDB API, as long as their familyid attribute corresponds to the sl:os value |
sl:osversion | NO | The operating system version the image runs, examples include “20.04” |
hv:ram_minimum | YES | Minimum number of RAM required to run the virtual machine image, expressed as an integer in bytes. |
ad:ram_recommended | YES | Recommended number of RAM required to run the virtual machine image, expressed as an integer in bytes. |
hv:core_minimum | YES | Minimum number of virtual cores required to run the virtual machine image, expressed as an integer. AppDB constraints the value to 1,2,4,8,16 or 32 cores |
ad:core_recommended | YES | Recommended number of virtual cores required to run the virtual machine image, expressed as an integer. AppDB constraints the value to 1,2,4,8,16 or 32 cores |
ad:accel_type | YES | The accelerator type the VM supports. Currently, the only supported value is “GPU”. |
ad:accel_minimum | YES | Minimum accelerator cores. Only available if accel_type is defined] AppDB constraints the value to 1,2,4,8,16 or 32 cores |
ad:accel_recommended | YES | Recommended accelerator cores. Available if accelerator type is defined AppDB constraints the value to 1,2,4,8,16 or 32 cores |
ad:traffic_in | YES | List of inbound network traffic rules that the VM needs to function, as defined by the user, |
ad:traffic_out | YES | List of outbound network traffic rules that the VM needs to function, as defined by the user, |
ad:context_format | YES | The contextualization format. Reserved for future use and may be ignored. Only supported option is “cloud-init” |
ad:default_access | YES | The default method to access the VM. Reserved for future use and may be ignored. Defaults to “None” |
ad:user:fullname | NO | Full name of image version publisher as taken from the AppDB user profile |
ad:user:guid | NO | Unique identifier of image version publisher as taken from the AppDB user profile |
ad:user:uri | NO | Link to image version publisher’s AppDB user profile |
Network traffic schema
Below are the fields of objects of ad:traffic_in and ad:traffic_out lists in the image items.
Field Name | Description |
---|---|
ad:net_protocol | The type of network protocol. Possible values are “TCP”, “UDP”, or “ICMP” |
ad:net_port | The port number the rule applies to, or a range of ports seperated by “:" e.g. “80”, “8000:8088” |
ad:net_range | Reserved for future use for IP Ranges. Always defaults to “0.0.0.0/0” and may be ignored |