164 lines
9.6 KiB
Go
164 lines
9.6 KiB
Go
|
package egoscale
|
||
|
|
||
|
// Template represents a machine to be deployed.
|
||
|
type Template struct {
|
||
|
Account string `json:"account,omitempty" doc:"the account name to which the template belongs"`
|
||
|
AccountID *UUID `json:"accountid,omitempty" doc:"the account id to which the template belongs"`
|
||
|
Bootable bool `json:"bootable,omitempty" doc:"true if the ISO is bootable, false otherwise"`
|
||
|
Checksum string `json:"checksum,omitempty" doc:"checksum of the template"`
|
||
|
Created string `json:"created,omitempty" doc:"the date this template was created"`
|
||
|
CrossZones bool `json:"crossZones,omitempty" doc:"true if the template is managed across all Zones, false otherwise"`
|
||
|
Details map[string]string `json:"details,omitempty" doc:"additional key/value details tied with template"`
|
||
|
DisplayText string `json:"displaytext,omitempty" doc:"the template display text"`
|
||
|
Format string `json:"format,omitempty" doc:"the format of the template."`
|
||
|
HostID *UUID `json:"hostid,omitempty" doc:"the ID of the secondary storage host for the template"`
|
||
|
HostName string `json:"hostname,omitempty" doc:"the name of the secondary storage host for the template"`
|
||
|
Hypervisor string `json:"hypervisor,omitempty" doc:"the target hypervisor for the template"`
|
||
|
ID *UUID `json:"id,omitempty" doc:"the template ID"`
|
||
|
IsDynamicallyScalable bool `json:"isdynamicallyscalable,omitempty" doc:"true if template contains XS/VMWare tools inorder to support dynamic scaling of VM cpu/memory"`
|
||
|
IsExtractable bool `json:"isextractable,omitempty" doc:"true if the template is extractable, false otherwise"`
|
||
|
IsFeatured bool `json:"isfeatured,omitempty" doc:"true if this template is a featured template, false otherwise"`
|
||
|
IsPublic bool `json:"ispublic,omitempty" doc:"true if this template is a public template, false otherwise"`
|
||
|
IsReady bool `json:"isready,omitempty" doc:"true if the template is ready to be deployed from, false otherwise."`
|
||
|
Name string `json:"name,omitempty" doc:"the template name"`
|
||
|
OsCategoryID *UUID `json:"oscategoryid,omitempty" doc:"the ID of the OS category for this template"`
|
||
|
OsCategoryName string `json:"oscategoryname,omitempty" doc:"the name of the OS category for this template"`
|
||
|
OsTypeID *UUID `json:"ostypeid,omitempty" doc:"the ID of the OS type for this template"`
|
||
|
OsTypeName string `json:"ostypename,omitempty" doc:"the name of the OS type for this template"`
|
||
|
PasswordEnabled bool `json:"passwordenabled,omitempty" doc:"true if the reset password feature is enabled, false otherwise"`
|
||
|
Removed string `json:"removed,omitempty" doc:"the date this template was removed"`
|
||
|
Size int64 `json:"size,omitempty" doc:"the size of the template"`
|
||
|
SourceTemplateID *UUID `json:"sourcetemplateid,omitempty" doc:"the template ID of the parent template if present"`
|
||
|
SSHKeyEnabled bool `json:"sshkeyenabled,omitempty" doc:"true if template is sshkey enabled, false otherwise"`
|
||
|
Status string `json:"status,omitempty" doc:"the status of the template"`
|
||
|
Tags []ResourceTag `json:"tags,omitempty" doc:"the list of resource tags associated with tempate"`
|
||
|
TemplateDirectory string `json:"templatedirectory,omitempty" doc:"Template directory"`
|
||
|
TemplateTag string `json:"templatetag,omitempty" doc:"the tag of this template"`
|
||
|
TemplateType string `json:"templatetype,omitempty" doc:"the type of the template"`
|
||
|
URL string `json:"url,omitempty" doc:"Original URL of the template where it was downloaded"`
|
||
|
ZoneID *UUID `json:"zoneid,omitempty" doc:"the ID of the zone for this template"`
|
||
|
ZoneName string `json:"zonename,omitempty" doc:"the name of the zone for this template"`
|
||
|
}
|
||
|
|
||
|
// ResourceType returns the type of the resource
|
||
|
func (Template) ResourceType() string {
|
||
|
return "Template"
|
||
|
}
|
||
|
|
||
|
// ListRequest builds the ListTemplates request
|
||
|
func (template Template) ListRequest() (ListCommand, error) {
|
||
|
req := &ListTemplates{
|
||
|
ID: template.ID,
|
||
|
Name: template.Name,
|
||
|
ZoneID: template.ZoneID,
|
||
|
}
|
||
|
if template.IsFeatured {
|
||
|
req.TemplateFilter = "featured"
|
||
|
}
|
||
|
if template.Removed != "" {
|
||
|
*req.ShowRemoved = true
|
||
|
}
|
||
|
|
||
|
for i := range template.Tags {
|
||
|
req.Tags = append(req.Tags, template.Tags[i])
|
||
|
}
|
||
|
|
||
|
return req, nil
|
||
|
}
|
||
|
|
||
|
//go:generate go run generate/main.go -interface=Listable ListTemplates
|
||
|
|
||
|
// ListTemplates represents a template query filter
|
||
|
type ListTemplates struct {
|
||
|
TemplateFilter string `json:"templatefilter" doc:"Possible values are \"featured\", \"self\", \"selfexecutable\",\"sharedexecutable\",\"executable\", and \"community\". * featured : templates that have been marked as featured and public. * self : templates that have been registered or created by the calling user. * selfexecutable : same as self, but only returns templates that can be used to deploy a new VM. * sharedexecutable : templates ready to be deployed that have been granted to the calling user by another user. * executable : templates that are owned by the calling user, or public templates, that can be used to deploy a VM. * community : templates that have been marked as public but not featured."`
|
||
|
ID *UUID `json:"id,omitempty" doc:"the template ID"`
|
||
|
Keyword string `json:"keyword,omitempty" doc:"List by keyword"`
|
||
|
Name string `json:"name,omitempty" doc:"the template name"`
|
||
|
Page int `json:"page,omitempty"`
|
||
|
PageSize int `json:"pagesize,omitempty"`
|
||
|
ShowRemoved *bool `json:"showremoved,omitempty" doc:"Show removed templates as well"`
|
||
|
Tags []ResourceTag `json:"tags,omitempty" doc:"List resources by tags (key/value pairs)"`
|
||
|
ZoneID *UUID `json:"zoneid,omitempty" doc:"list templates by zoneid"`
|
||
|
_ bool `name:"listTemplates" description:"List all public, private, and privileged templates."`
|
||
|
}
|
||
|
|
||
|
// ListTemplatesResponse represents a list of templates
|
||
|
type ListTemplatesResponse struct {
|
||
|
Count int `json:"count"`
|
||
|
Template []Template `json:"template"`
|
||
|
}
|
||
|
|
||
|
// OSCategory represents an OS category
|
||
|
type OSCategory struct {
|
||
|
ID *UUID `json:"id,omitempty" doc:"the ID of the OS category"`
|
||
|
Name string `json:"name,omitempty" doc:"the name of the OS category"`
|
||
|
}
|
||
|
|
||
|
// ListRequest builds the ListOSCategories request
|
||
|
func (osCat OSCategory) ListRequest() (ListCommand, error) {
|
||
|
req := &ListOSCategories{
|
||
|
Name: osCat.Name,
|
||
|
ID: osCat.ID,
|
||
|
}
|
||
|
|
||
|
return req, nil
|
||
|
}
|
||
|
|
||
|
//go:generate go run generate/main.go -interface=Listable ListOSCategories
|
||
|
|
||
|
// ListOSCategories lists the OS categories
|
||
|
type ListOSCategories struct {
|
||
|
ID *UUID `json:"id,omitempty" doc:"list Os category by id"`
|
||
|
Keyword string `json:"keyword,omitempty" doc:"List by keyword"`
|
||
|
Name string `json:"name,omitempty" doc:"list os category by name"`
|
||
|
Page int `json:"page,omitempty"`
|
||
|
PageSize int `json:"pagesize,omitempty"`
|
||
|
_ bool `name:"listOsCategories" description:"Lists all supported OS categories for this cloud."`
|
||
|
}
|
||
|
|
||
|
// ListOSCategoriesResponse represents a list of OS categories
|
||
|
type ListOSCategoriesResponse struct {
|
||
|
Count int `json:"count"`
|
||
|
OSCategory []OSCategory `json:"oscategory"`
|
||
|
}
|
||
|
|
||
|
// DeleteTemplate deletes a template by ID
|
||
|
type DeleteTemplate struct {
|
||
|
_ bool `name:"deleteTemplate" description:"Deletes a template"`
|
||
|
ID *UUID `json:"id" doc:"the ID of the template"`
|
||
|
}
|
||
|
|
||
|
// Response returns the struct to unmarshal
|
||
|
func (DeleteTemplate) Response() interface{} {
|
||
|
return new(AsyncJobResult)
|
||
|
}
|
||
|
|
||
|
// AsyncResponse returns the struct to unmarshal the async job
|
||
|
func (DeleteTemplate) AsyncResponse() interface{} {
|
||
|
return new(BooleanResponse)
|
||
|
}
|
||
|
|
||
|
// RegisterCustomTemplate registers a new template
|
||
|
type RegisterCustomTemplate struct {
|
||
|
_ bool `name:"registerCustomTemplate" description:"Register a new template."`
|
||
|
Checksum string `json:"checksum" doc:"the MD5 checksum value of this template"`
|
||
|
Details map[string]string `json:"details,omitempty" doc:"Template details in key/value pairs"`
|
||
|
Displaytext string `json:"displaytext" doc:"the display text of the template"`
|
||
|
Name string `json:"name" doc:"the name of the template"`
|
||
|
PasswordEnabled *bool `json:"passwordenabled,omitempty" doc:"true if the template supports the password reset feature; default is false"`
|
||
|
SSHKeyEnabled *bool `json:"sshkeyenabled,omitempty" doc:"true if the template supports the sshkey upload feature; default is false"`
|
||
|
TemplateTag string `json:"templatetag,omitempty" doc:"the tag for this template"`
|
||
|
URL string `json:"url" doc:"the URL of where the template is hosted"`
|
||
|
ZoneID *UUID `json:"zoneid" doc:"the ID of the zone the template is to be hosted on"`
|
||
|
}
|
||
|
|
||
|
// Response returns the struct to unmarshal
|
||
|
func (RegisterCustomTemplate) Response() interface{} {
|
||
|
return new(AsyncJobResult)
|
||
|
}
|
||
|
|
||
|
// AsyncResponse returns the struct to unmarshal the async job
|
||
|
func (RegisterCustomTemplate) AsyncResponse() interface{} {
|
||
|
return new([]Template)
|
||
|
}
|