2018-05-30 22:28:41 +00:00
package egoscale
import (
"fmt"
2018-09-08 10:09:59 +00:00
"net"
2018-05-30 22:28:41 +00:00
)
2018-09-08 10:09:59 +00:00
// Zone represents a data center
//
// TODO: represent correctly the capacity field.
type Zone struct {
AllocationState string ` json:"allocationstate,omitempty" doc:"the allocation state of the cluster" `
Description string ` json:"description,omitempty" doc:"Zone description" `
DhcpProvider string ` json:"dhcpprovider,omitempty" doc:"the dhcp Provider for the Zone" `
DisplayText string ` json:"displaytext,omitempty" doc:"the display text of the zone" `
DNS1 net . IP ` json:"dns1,omitempty" doc:"the first DNS for the Zone" `
DNS2 net . IP ` json:"dns2,omitempty" doc:"the second DNS for the Zone" `
Domain string ` json:"domain,omitempty" doc:"Network domain name for the networks in the zone" `
DomainID * UUID ` json:"domainid,omitempty" doc:"the UUID of the containing domain, null for public zones" `
DomainName string ` json:"domainname,omitempty" doc:"the name of the containing domain, null for public zones" `
GuestCIDRAddress * CIDR ` json:"guestcidraddress,omitempty" doc:"the guest CIDR address for the Zone" `
ID * UUID ` json:"id,omitempty" doc:"Zone id" `
InternalDNS1 net . IP ` json:"internaldns1,omitempty" doc:"the first internal DNS for the Zone" `
InternalDNS2 net . IP ` json:"internaldns2,omitempty" doc:"the second internal DNS for the Zone" `
IP6DNS1 net . IP ` json:"ip6dns1,omitempty" doc:"the first IPv6 DNS for the Zone" `
IP6DNS2 net . IP ` json:"ip6dns2,omitempty" doc:"the second IPv6 DNS for the Zone" `
LocalStorageEnabled * bool ` json:"localstorageenabled,omitempty" doc:"true if local storage offering enabled, false otherwise" `
Name string ` json:"name,omitempty" doc:"Zone name" `
NetworkType string ` json:"networktype,omitempty" doc:"the network type of the zone; can be Basic or Advanced" `
ResourceDetails map [ string ] string ` json:"resourcedetails,omitempty" doc:"Meta data associated with the zone (key/value pairs)" `
SecurityGroupsEnabled * bool ` json:"securitygroupsenabled,omitempty" doc:"true if security groups support is enabled, false otherwise" `
Tags [ ] ResourceTag ` json:"tags,omitempty" doc:"the list of resource tags associated with zone." `
Vlan string ` json:"vlan,omitempty" doc:"the vlan range of the zone" `
ZoneToken string ` json:"zonetoken,omitempty" doc:"Zone Token" `
2018-05-30 22:28:41 +00:00
}
// ListRequest builds the ListZones request
2018-09-08 10:09:59 +00:00
func ( zone Zone ) ListRequest ( ) ( ListCommand , error ) {
2018-05-30 22:28:41 +00:00
req := & ListZones {
DomainID : zone . DomainID ,
ID : zone . ID ,
Name : zone . Name ,
}
return req , nil
}
2018-09-08 10:09:59 +00:00
// ListZones represents a query for zones
type ListZones struct {
Available * bool ` json:"available,omitempty" doc:"true if you want to retrieve all available Zones. False if you only want to return the Zones from which you have at least one VM. Default is false." `
DomainID * UUID ` json:"domainid,omitempty" doc:"the ID of the domain associated with the zone" `
ID * UUID ` json:"id,omitempty" doc:"the ID of the zone" `
Keyword string ` json:"keyword,omitempty" doc:"List by keyword" `
Name string ` json:"name,omitempty" doc:"the name of the zone" `
Page int ` json:"page,omitempty" `
PageSize int ` json:"pagesize,omitempty" `
ShowCapacities * bool ` json:"showcapacities,omitempty" doc:"flag to display the capacity of the zones" `
Tags [ ] ResourceTag ` json:"tags,omitempty" doc:"List zones by resource tags (key/value pairs)" `
_ bool ` name:"listZones" description:"Lists zones" `
}
// ListZonesResponse represents a list of zones
type ListZonesResponse struct {
Count int ` json:"count" `
Zone [ ] Zone ` json:"zone" `
2018-05-30 22:28:41 +00:00
}
2018-09-08 10:09:59 +00:00
func ( ListZones ) response ( ) interface { } {
2018-05-30 22:28:41 +00:00
return new ( ListZonesResponse )
}
// SetPage sets the current page
func ( ls * ListZones ) SetPage ( page int ) {
ls . Page = page
}
// SetPageSize sets the page size
func ( ls * ListZones ) SetPageSize ( pageSize int ) {
ls . PageSize = pageSize
}
2018-09-08 10:09:59 +00:00
func ( ListZones ) each ( resp interface { } , callback IterateItemFunc ) {
2018-05-30 22:28:41 +00:00
zones , ok := resp . ( * ListZonesResponse )
if ! ok {
2018-09-08 10:09:59 +00:00
callback ( nil , fmt . Errorf ( "wrong type. ListZonesResponse was expected, got %T" , resp ) )
2018-05-30 22:28:41 +00:00
return
}
for i := range zones . Zone {
if ! callback ( & zones . Zone [ i ] , nil ) {
break
}
}
}