package compute

// Access Control List
type RecordACL struct {
	// Account ACL list
	AccountACL ListACL `json:"accountACL"`

	// Compute ACL list
	ComputeACL []ItemComputeACL `json:"computeACL"`

	// Resource group ACL list
	RGACL ListACL `json:"rgACL"`
}

type ListUsers struct {
	// Data
	Data RecordACL `json:"data"`

	// Entry count
	EntryCount uint64 `json:"entryCount"`
}

// ACL information
type ItemACL struct {
	// Explicit
	Explicit bool `json:"explicit"`

	// GUID
	GUID string `json:"guid"`

	// Right
	Right string `json:"right"`

	// Status
	Status string `json:"status"`

	// Type
	Type string `json:"type"`

	// User group ID
	UserGroupID string `json:"userGroupId"`
}

// ACL compute information
type ItemComputeACL struct {
	// Explicit
	Explicit bool `json:"explicit"`

	// GUID
	GUID string `json:"guid"`

	// Right
	Right string `json:"right"`

	// Status
	Status string `json:"status"`

	// Type
	Type string `json:"type"`

	// User group ID
	UserGroupID string `json:"userGroupId"`
}

// List ACL
type ListACL []ItemACL

// Main information about snapshot
type ItemSnapshot struct {
	// Compute info
	Compute SnapRecordCompute `json:"compute"`

	// List of disk IDs
	Disks []uint64 `json:"disks"`

	// GUID
	GUID string `json:"guid"`

	// Label
	Label string `json:"label"`

	// Memory dump image ID
	MemoryDumpImage uint64 `json:"memory_dump_image"`

	// Timestamp
	Timestamp uint64 `json:"timestamp"`
}

// List of snapshots
type ListSnapshots []ItemSnapshot

// List of snapshots
type ListSnapShot struct {
	// Data
	Data []ItemSnapshot `json:"data"`

	// Entry count
	EntryCount uint64 `json:"entryCount"`
}

// Main information about snapshot usage
type ItemSnapshotUsage struct {
	// Count
	Count uint64 `json:"count,omitempty"`

	// Stored
	Stored float64 `json:"stored"`

	// Label
	Label string `json:"label,omitempty"`

	// Timestamp
	Timestamp uint64 `json:"timestamp,omitempty"`
}

// List of snapshot usage
type ListSnapshotUsage []ItemSnapshotUsage

// QOS
type QOS struct {
	// ERate
	ERate uint64 `json:"eRate"`

	// GUID
	GUID string `json:"guid"`

	// InBurst
	InBurst uint64 `json:"inBurst"`

	// InRate
	InRate uint64 `json:"inRate"`
}

// Main information about attached network
type RecordNetAttach struct {
	// Bus number
	BusNumber uint64 `json:"bus_number"`

	// Connection ID
	ConnID uint64 `json:"connId"`

	// Connection type
	ConnType string `json:"connType"`

	// Default GW
	DefGW string `json:"defGw"`

	// Enabled
	Enabled bool `json:"enabled"`

	// Enable default gateway
	EnableDefaultGateway bool `json:"enable_default_gateway"`

	// Enable security groups
	EnableSecGroups bool `json:"enable_secgroups"`

	// FLIPGroup ID
	FLIPGroupID uint64 `json:"flipgroupId"`

	// GUID
	GUID string `json:"guid"`

	// IP address
	IPAddress string `json:"ipAddress"`

	// Libvirt Settings
	LibvirtSettings LibvirtSettings `json:"libvirtSettings"`

	// Listen SSH
	ListenSSH bool `json:"listenSsh"`

	// MAC
	MAC string `json:"mac"`

	// Maximum transmission unit
	MTU uint64 `json:"mtu"`

	// Name
	Name string `json:"name"`

	// Network ID
	NetID uint64 `json:"netId"`

	// Network mask
	NetMask uint64 `json:"netMask"`

	// Network type
	NetType string `json:"netType"`

	// Node id
	NodeID int `json:"nodeId"`

	// PCI slot
	PCISlot int64 `json:"pciSlot"`

	// SDN interface ID
	SDNInterfaceID string `json:"sdn_interface_id"`

	// List of security groups
	SecurityGroups []uint64 `json:"security_groups"`

	// QOS
	QOS QOS `json:"qos"`

	// Target
	Target string `json:"target"`

	// Type
	Type string `json:"type"`

	// List of trunk tags
	TrunkTags []uint64 `json:"trunk_tags"`

	// List VNF IDs
	VNFs []uint64 `json:"vnfs"`
}

// Main information about affinity relations
type RecordAffinityRelations struct {
	// Other node
	OtherNode []interface{} `json:"otherNode"`

	// Other node indirect
	OtherNodeIndirect []interface{} `json:"otherNodeIndirect"`

	// Other node indirect soft
	OtherNodeIndirectSoft []interface{} `json:"otherNodeIndirectSoft"`

	// Other node soft
	OtherNodeSoft []interface{} `json:"otherNodeSoft"`

	// Same node
	SameNode []interface{} `json:"sameNode"`

	// Same node soft
	SameNodeSoft []interface{} `json:"sameNodeSoft"`
}

// Detailed information about audit
type ItemDetailedAudit struct {
	// Call
	Call string `json:"call"`

	// Response time
	ResponseTime float64 `json:"responsetime"`

	// Status code
	StatusCode uint64 `json:"statuscode"`

	// Timestamp
	Timestamp float64 `json:"timestamp"`

	// User
	User string `json:"user"`
}

// List Detailed audits
type ListDetailedAudits struct {
	// Data
	Data []ItemDetailedAudit `json:"data"`

	// Entry count
	EntryCount uint64 `json:"entryCount"`
}

// Main information about port forward
type ItemPFW struct {
	// ID
	ID uint64 `json:"id"`

	// Local IP
	LocalIP string `json:"localIp"`

	// Local port
	LocalPort uint64 `json:"localPort"`

	// Protocol
	Protocol string `json:"protocol"`

	// Public port end
	PublicPortEnd uint64 `json:"publicPortEnd"`

	// Public port start
	PublicPortStart uint64 `json:"publicPortStart"`

	// Virtuel machine ID
	VMID uint64 `json:"vmId"`
}

// List port forwards
type ListPFW struct {
	// Data
	Data []ItemPFW `json:"data"`

	// Entry count
	EntryCount uint64 `json:"entryCount"`
}

// Main information about rule
type ItemRule struct {
	// GUID
	GUID string `json:"guid"`

	// Key
	Key string `json:"key"`

	// Mode
	Mode string `json:"mode"`

	// Policy
	Policy string `json:"policy"`

	// Topology
	Topology string `json:"topology"`

	// Value
	Value string `json:"value"`
}

// List rules
type ListRules []ItemRule

// Main information about IO tune
type IOTune struct {
	// ReadBytesSec
	ReadBytesSec uint64 `json:"read_bytes_sec"`

	// ReadBytesSecMax
	ReadBytesSecMax uint64 `json:"read_bytes_sec_max"`

	// ReadIOPSSec
	ReadIOPSSec uint64 `json:"read_iops_sec"`

	// ReadIOPSSecMax
	ReadIOPSSecMax uint64 `json:"read_iops_sec_max"`

	// SizeIOPSSec
	SizeIOPSSec uint64 `json:"size_iops_sec"`

	// TotalBytesSec
	TotalBytesSec uint64 `json:"total_bytes_sec"`

	// TotalBytesSecMax
	TotalBytesSecMax uint64 `json:"total_bytes_sec_max"`

	// TotalIOPSSec
	TotalIOPSSec uint64 `json:"total_iops_sec"`

	// TotalIOPSSecMax
	TotalIOPSSecMax uint64 `json:"total_iops_sec_max"`

	// WriteBytesSec
	WriteBytesSec uint64 `json:"write_bytes_sec"`

	// WriteBytesSecMax
	WriteBytesSecMax uint64 `json:"write_bytes_sec_max"`

	// WriteIOPSSec
	WriteIOPSSec uint64 `json:"write_iops_sec"`

	// WriteIOPSSecMax
	WriteIOPSSecMax uint64 `json:"write_iops_sec_max"`
}

// Detailed information about snapshot
type ItemSnapshotDetailed struct {
	// GUID
	GUID string `json:"guid"`

	// Label
	Label string `json:"label"`

	// Pool name
	PoolName string `json:"poolName"`

	// Resource ID
	ResID string `json:"resId"`

	// SnapSetGUID
	SnapSetGUID string `json:"snapSetGuid"`

	// SnapSetTime
	SnapSetTime uint64 `json:"snapSetTime"`

	// TimeStamp
	TimeStamp uint64 `json:"timestamp"`
}

// List detailed snapshots
type ListDetailedSnapshots []ItemSnapshotDetailed

// Main information about disk
type ItemDisk struct {
	// CKey
	CKey string `json:"_ckey"`

	// Meta
	Meta []interface{} `json:"_meta"`

	// Account ID
	AccountID uint64 `json:"accountId"`

	// Access Control List
	ACL ItemACL `json:"acl"`

	// Discard
	Discard string `json:"discard"`

	// Block Size
	BlockSize string `json:"block_size"`

	// Boot partition
	BootPartition uint64 `json:"bootPartition"`

	// Bus number
	BusNumber uint64 `json:"bus_number"`

	// Chache
	Cache string `json:"cache"`

	// Created by
	CreatedBy string `json:"createdBy"`

	// Created time
	CreatedTime uint64 `json:"createdTime"`

	// Device name
	DeviceName string `json:"devicename"`

	// Deleted by
	DeletedBy string `json:"deletedBy"`

	// Deleted time
	DeletedTime uint64 `json:"deletedTime"`

	// Description
	Description string `json:"desc"`

	// Destruction time
	DestructionTime uint64 `json:"destructionTime"`

	// Disk path
	DiskPath string `json:"diskPath"`

	// Grid ID
	GID uint64 `json:"gid"`

	// GUID
	GUID uint64 `json:"guid"`

	// ID
	ID uint64 `json:"id"`

	// Image ID
	ImageID uint64 `json:"imageId"`

	// Independent
	Independent bool `json:"independent"`

	// List image IDs
	Images []uint64 `json:"images"`

	// IOTune
	IOTune IOTune `json:"iotune"`

	// IQN
	IQN string `json:"iqn"`

	// Login
	Login string `json:"login"`

	// Milestones
	Milestones uint64 `json:"milestones"`

	// Name
	Name string `json:"name"`

	// Params
	Params string `json:"params"`

	// Parent ID
	ParentID uint64 `json:"parentId"`

	// Password
	Password string `json:"passwd"`

	// PCI slot
	PCISlot int64 `json:"pci_slot"`

	// Pool
	Pool string `json:"pool"`

	// Present to
	PresentTo map[string]uint64 `json:"presentTo"`

	// Provision
	Provision string `json:"provision"`

	// Purge attempts
	PurgeAttempts uint64 `json:"purgeAttempts"`

	// Purge time
	PurgeTime uint64 `json:"purgeTime"`

	// Reality device number
	RealityDeviceNumber uint64 `json:"realityDeviceNumber"`

	// Replication
	Replication ItemReplication `json:"replication"`

	// Reference ID
	ReferenceID string `json:"referenceId"`

	// Resource ID
	ResID string `json:"resId"`

	// Resource name
	ResName string `json:"resName"`

	// Role
	Role string `json:"role"`

	// SEP ID
	SEPID uint64 `json:"sepId"`

	// Shareable
	Shareable bool `json:"shareable"`

	// Size max
	SizeMax uint64 `json:"sizeMax"`

	// Size used
	SizeUsed float64 `json:"sizeUsed"`

	// Size available
	SizeAvailable float64 `json:"sizeAvailable"`

	// List detailed snapshots
	Snapshots ListDetailedSnapshots `json:"snapshots"`

	// Status
	Status string `json:"status"`

	// Storage policy id of disk.
	StoragePolicyID uint64 `json:"storage_policy_id"`

	// Tech status
	TechStatus string `json:"techStatus"`

	// Need to clean before destroy
	ToClean bool `json:"to_clean"`

	// Type
	Type string `json:"type"`

	// Updated by
	UpdatedBy string `json:"updatedBy"`

	// UpdatedTime
	UpdatedTime uint64 `json:"updatedTime"`

	// Read-only
	ReadOnly bool `json:"read_only"`
}

type ItemReplication struct {
	// DiskID
	DiskID uint64 `json:"diskId"`

	// PoolID
	PoolID string `json:"poolId"`

	// Role
	Role string `json:"role"`

	// SelfVolumeID
	SelfVolumeID string `json:"selfVolumeId"`

	// StorageID
	StorageID string `json:"storageId"`

	// VolumeID
	VolumeID string `json:"volumeId"`
}

// List disks
type ListDisks []ItemDisk

// Main information about interface
type ItemInterface struct {
	// Bus number
	BusNumber uint64 `json:"bus_number"`

	// Connection ID
	ConnID uint64 `json:"connId"`

	// Connection type
	ConnType string `json:"connType"`

	// Default GW
	DefGW string `json:"defGw"`

	// Enabled
	Enabled bool `json:"enabled"`

	// Enable default gateway
	EnableDefaultGateway bool `json:"enable_default_gateway"`

	// Enable security groups
	EnableSecGroups bool `json:"enable_secgroups"`

	// FLIPGroup ID
	FLIPGroupID uint64 `json:"flipgroupId"`

	// GUID
	GUID string `json:"guid"`

	// IP address
	IPAddress string `json:"ipAddress"`

	// Listen SSH or not
	ListenSSH bool `json:"listenSsh"`

	// Maximum transmission unit
	MTU uint64 `json:"mtu"`

	// Libvirt Settings
	LibvirtSettings LibvirtSettings `json:"libvirtSettings"`

	// MAC
	MAC string `json:"mac"`

	// Name
	Name string `json:"name"`

	// Network ID
	NetID uint64 `json:"netId"`

	// Network mask
	NetMask uint64 `json:"netMask"`

	// Network type
	NetType string `json:"netType"`

	// NodeID
	NodeID int64 `json:"nodeId"`

	// PCI slot
	PCISlot int64 `json:"pciSlot"`

	// QOS
	QOS QOS `json:"qos"`

	// List of QoS Policy IDs
	QoSPolicies []uint64 `json:"qos_policies"`

	// List of security groups
	SecGroups []uint64 `json:"security_groups"`

	// SDN interface ID
	SDNInterfaceID string `json:"sdn_interface_id"`

	// Target
	Target string `json:"target"`

	// Trunk tags
	TrunkTags string `json:"trunk_tags"`

	// Type
	Type string `json:"type"`

	// List VNF IDs
	VNFs []uint64 `json:"vnfs"`
}

// List interfaces
type ListInterfaces []ItemInterface

// Main information about OS user
type ItemOSUser struct {
	// GUID
	GUID string `json:"guid"`

	// Login
	Login string `json:"login"`

	// Password
	Password string `json:"password"`

	// Public key
	PubKey string `json:"pubkey"`
}

// List OS users
type ListOSUsers []ItemOSUser

// Information about compute
type InfoCompute struct {
	// Account ID
	AccountID uint64 `json:"accountId"`

	// Account name
	AccountName string `json:"accountName"`

	// Access Control List
	ACL []interface{} `json:"acl"`

	// Affinity label
	AffinityLabel string `json:"affinityLabel"`

	// Affinity rules
	AffinityRules ListRules `json:"affinityRules"`

	// Affinity weight
	AffinityWeight uint64 `json:"affinityWeight"`

	// Anti affinity rules
	AntiAffinityRules ListRules `json:"antiAffinityRules"`

	// Auto start when node restarted
	AutoStart bool `json:"autoStart"`

	// Architecture
	Arch string `json:"arch"`

	// Boot image ID
	BootImageID uint64 `json:"boot_image_id"`

	// Boot order
	BootOrder []string `json:"bootOrder"`

	// Boot type
	BootType string `json:"bootType"`

	// Boot disk size
	BootDiskSize uint64 `json:"bootdiskSize"`

	// CD Image Id
	CdImageId uint64 `json:"cdImageId"`

	// Chipset
	Chipset string `json:"chipset"`

	// Clone reference
	CloneReference uint64 `json:"cloneReference"`

	// Clock
	Clock string `json:"clock"`

	// List clone IDs
	Clones []uint64 `json:"clones"`

	// Compute CI ID
	ComputeCIID uint64 `json:"computeciId"`

	// CPU Pin
	CPUPin bool `json:"cpupin"`

	// Number of CPU
	CPUs uint64 `json:"cpus"`

	// Created by
	CreatedBy string `json:"createdBy"`

	// Created time
	CreatedTime uint64 `json:"createdTime"`

	// Custom fields
	CustomFields map[string]interface{} `json:"customFields"`

	// Deleted by
	DeletedBy string `json:"deletedBy"`

	// Deleted time
	DeletedTime uint64 `json:"deletedTime"`

	// Description
	Description string `json:"desc"`

	// Devices
	Devices interface{} `json:"devices"`

	// Driver
	Driver string `json:"driver"`

	// Grid ID
	GID uint64 `json:"gid"`

	// GUID
	GUID uint64 `json:"guid"`

	// HPBacked
	HPBacked bool `json:"hpBacked"`

	// Hot resize
	HotResize bool `json:"hotResize"`

	// ID
	ID uint64 `json:"id"`

	// List interfaces
	Interfaces ListInterfaces `json:"interfaces"`

	// Live migration job ID
	LiveMigrationJobID uint64 `json:"live_migration_job_id"`

	// Loader type
	LoaderType string `json:"loaderType"`

	// Lock status
	LockStatus string `json:"lockStatus"`

	// Manager ID
	ManagerID uint64 `json:"managerId"`

	// Manager type
	ManagerType string `json:"managerType"`

	// Memory balloon mode
	MemoryBalloonMode string `json:"memory_balloon_mode"`

	// Migration job
	MigrationJob uint64 `json:"migrationjob"`

	// Milestones
	Milestones uint64 `json:"milestones"`

	// Name
	Name string `json:"name"`

	// Need reboot
	NeedReboot bool `json:"needReboot"`

	// network interface naming
	NetworkInterfaceNaming string `json:"networkInterfaceNaming"`

	// Numa Affinity
	NumaAffinity string `json:"numaAffinity"`

	//NumaNodeId
	NumaNodeId int64 `json:"numaNodeId"`

	// List OS users
	OSUsers ListOSUsers `json:"osUsers"`

	// Name of OS
	OSVersion string `json:"os_version"`

	// Pinned to node
	PinnedToNode int64 `json:"pinnedToNode"`

	// PreferredCPU
	PreferredCPU []int64 `json:"preferredCpu"`

	// CPU alignment profile
	CPUAlignmentProfile CPUAlignmentProfile `json:"cpu_alignment_profile"`

	// Qemu_quest
	QemuQuest QemuQuest `json:"qemu_guest"`

	// ReadOnly indicates read-only mode state
	ReadOnly bool `json:"read_only"`

	// Number of RAM
	RAM uint64 `json:"ram"`

	// Reference ID
	ReferenceID string `json:"referenceId"`

	// Registered
	Registered bool `json:"registered"`

	// Whether a compute has been resized online
	ResizedOnline bool `json:"resizedOnline"`

	// Resource name
	ResName string `json:"resName"`

	// Reserved Node Cpus
	ReservedNodeCpus []uint64 `json:"reservedNodeCpus"`

	// Resource group ID
	RGID uint64 `json:"rgId"`

	// Resource group name
	RGName string `json:"rgName"`

	// SnapSets
	SnapSets ListSnapshots `json:"snapSets"`

	// Node ID
	NodeID uint64 `json:"node_id"`

	// Node name
	NodeName string `json:"nodeName"`

	// Stateless SEP ID
	StatelessSEPID int64 `json:"statelessSepId"`

	// Stateless SEP Type
	StatelessSEPType string `json:"statelessSepType"`

	// Status
	Status string `json:"status"`

	// Tags
	Tags map[string]interface{} `json:"tags"`

	// Tech status
	TechStatus string `json:"techStatus"`

	// Total disk size
	TotalDiskSize uint64 `json:"totalDisksSize"`

	// Updated by
	UpdatedBy string `json:"updatedBy"`

	// Updated time
	UpdatedTime uint64 `json:"updatedTime"`

	// User managed
	UserManaged bool `json:"userManaged"`

	// Userdata
	Userdata interface{} `json:"userdata"`

	// List VGPU IDs
	VGPUs []uint64 `json:"vgpus"`

	// VINS connected
	VINSConnected uint64 `json:"vinsConnected"`

	// Watchdog action
	WatchdogAction string `json:"watchdog_action"`

	// Weight
	Weight uint64 `json:"weight"`

	// Zone ID
	ZoneID uint64 `json:"zoneId"`
}

type QemuQuest struct {
	Enabled              bool     `json:"enabled"`
	EnabledAgentFeatures []string `json:"enabled_agent_features"`
	GUID                 string   `json:"guid"`
	LastUpdate           uint64   `json:"last_update"`
	User                 string   `json:"user"`
}

type CPUAlignmentProfile struct {
	Model  string `json:"model"`
	Name   string `json:"name"`
	Vendor string `json:"vendor"`
}

// Information about libvirt settings
type LibvirtSettings struct {
	// TX mode
	TXMode string `json:"txmode"`

	// IO event
	IOEventFD string `json:"ioeventfd"`

	// Event ID
	EventIDx string `json:"event_idx"`

	// Number of queues
	Queues uint64 `json:"queues"`

	// RX queue size
	RXQueueSize uint64 `json:"rx_queue_size"`

	// TX queue size
	TXQueueSize uint64 `json:"tx_queue_size"`

	// GUID
	GUID string `json:"guid"`
}

// Detailed information about compute
type RecordCompute struct {
	// Account ID
	AccountID uint64 `json:"accountId"`

	// Account name
	AccountName string `json:"accountName"`

	// Access Control List
	ACL []interface{} `json:"acl"`

	// Affinity label
	AffinityLabel string `json:"affinityLabel"`

	// Affinity rules
	AffinityRules ListRules `json:"affinityRules"`

	// Affinity weight
	AffinityWeight uint64 `json:"affinityWeight"`

	// Anti affinity rules
	AntiAffinityRules ListRules `json:"antiAffinityRules"`

	// Auto start when node restarted
	AutoStart bool `json:"autoStart"`

	// Architecture
	Arch string `json:"arch"`

	// Boot image ID
	BootImageID uint64 `json:"boot_image_id"`

	// Boot order
	BootOrder []string `json:"bootOrder"`

	// Boot type
	BootType string `json:"bootType"`

	// Boot disk size
	BootDiskSize uint64 `json:"bootdiskSize"`

	// CD Image Id
	CdImageId uint64 `json:"cdImageId"`

	// Chipset
	Chipset string `json:"chipset"`

	// Clone reference
	CloneReference uint64 `json:"cloneReference"`

	// Clock
	Clock string `json:"clock"`

	// List clone IDs
	Clones []uint64 `json:"clones"`

	// Compute CI ID
	ComputeCIID uint64 `json:"computeciId"`

	// CPU Pin
	CPUPin bool `json:"cpupin"`

	// Number of CPU
	CPUs uint64 `json:"cpus"`

	// Created by
	CreatedBy string `json:"createdBy"`

	// Created time
	CreatedTime uint64 `json:"createdTime"`

	// Custom fields
	CustomFields map[string]interface{} `json:"customFields"`

	// Deleted by
	DeletedBy string `json:"deletedBy"`

	// Deleted time
	DeletedTime uint64 `json:"deletedTime"`

	// Description
	Description string `json:"desc"`

	// Devices
	Devices interface{} `json:"devices"`

	// List disks
	Disks ListDisks `json:"disks"`

	// Driver
	Driver string `json:"driver"`

	// Grid ID
	GID uint64 `json:"gid"`

	// GUID
	GUID uint64 `json:"guid"`

	// HPBacked
	HPBacked bool `json:"hpBacked"`

	// Hot resize
	HotResize bool `json:"hotResize"`

	// ID
	ID uint64 `json:"id"`

	// Image ID
	ImageID uint64 `json:"imageId"`

	// Image name
	ImageName string `json:"imageName"`

	// List interfaces
	Interfaces ListInterfaces `json:"interfaces"`

	// Loader meta iso information
	LoaderMetaIso LoaderMetaIso `json:"loaderMetaIso"`

	// Live migration job ID
	LiveMigrationJobID uint64 `json:"live_migration_job_id"`

	// Loader type
	LoaderType string `json:"loaderType"`

	// Lock status
	LockStatus string `json:"lockStatus"`

	// Manager ID
	ManagerID uint64 `json:"managerId"`

	// Manager type
	ManagerType string `json:"managerType"`

	// Memory balloon mode
	MemoryBalloonMode string `json:"memory_balloon_mode"`

	// Migration job
	MigrationJob uint64 `json:"migrationjob"`

	// Milestones
	Milestones uint64 `json:"milestones"`

	// Name
	Name string `json:"name"`

	// Natable VINS ID
	NatableVINSID uint64 `json:"natableVinsId"`

	// Natable VINS IP
	NatableVINSIP string `json:"natableVinsIp"`

	// Natable VINS Name
	NatableVINSName string `json:"natableVinsName"`

	// Natable VINS network
	NatableVINSNetwork string `json:"natableVinsNetwork"`

	// Natable VINS network name
	NatableVINSNetworkName string `json:"natableVinsNetworkName"`

	// Need reboot
	NeedReboot bool `json:"needReboot"`

	// network interface naming
	NetworkInterfaceNaming string `json:"networkInterfaceNaming"`

	// NumaAffinity
	NumaAffinity string `json:"numaAffinity"`

	//NumaNodeId
	NumaNodeId int64 `json:"numaNodeId"`

	// List OS users
	OSUsers ListOSUsers `json:"osUsers"`

	// Name of OS
	OSVersion string `json:"os_version"`

	// Pinned to node
	PinnedToNode int64 `json:"pinnedToNode"`

	// PreferredCPU
	PreferredCPU []int64 `json:"preferredCpu"`

	// CPU alignment profile
	CPUAlignmentProfile CPUAlignmentProfile `json:"cpu_alignment_profile"`

	// Qemu_quest
	QemuQuest QemuQuest `json:"qemu_guest"`

	// ReadOnly indicates read-only mode state
	ReadOnly bool `json:"read_only"`

	// Number of RAM
	RAM uint64 `json:"ram"`

	// Reference ID
	ReferenceID string `json:"referenceId"`

	// Registered
	Registered bool `json:"registered"`

	// Whether a compute has been resized online
	ResizedOnline bool `json:"resizedOnline"`

	// Resource name
	ResName string `json:"resName"`

	// Reserved Node Cpus
	ReservedNodeCpus []uint64 `json:"reservedNodeCpus"`

	// Resource group ID
	RGID uint64 `json:"rgId"`

	// Resource group name
	RGName string `json:"rgName"`

	// SnapSets
	SnapSets ListSnapshots `json:"snapSets"`

	// Node ID
	NodeID uint64 `json:"node_id"`

	// Node name
	NodeName string `json:"nodeName"`

	// Stateless SEP ID
	StatelessSEPID int64 `json:"statelessSepId"`

	// Stateless SEP Type
	StatelessSEPType string `json:"statelessSepType"`

	// Status
	Status string `json:"status"`

	// Tags
	Tags map[string]interface{} `json:"tags"`

	// Tech status
	TechStatus string `json:"techStatus"`

	// Total disk size
	TotalDiskSize uint64 `json:"totalDisksSize"`

	// Updated by
	UpdatedBy string `json:"updatedBy"`

	// Updated time
	UpdatedTime uint64 `json:"updatedTime"`

	// User managed
	UserManaged bool `json:"userManaged"`

	// Userdata
	Userdata interface{} `json:"userdata"`

	// List VGPU
	VGPUs []ItemVGPU `json:"vgpus"`

	// VNC password
	VNCPassword string `json:"vncPasswd"`

	// Watchdog action
	WatchdogAction string `json:"watchdog_action"`

	// Weight
	Weight uint64 `json:"weight"`

	// Zone ID
	ZoneID uint64 `json:"zoneId"`

	//todo
	_ uint64 `json:"nodeId"`
}

// Detailed information about ACL Access in a compute
type RecordComputeACLAccess struct {
	// Data
	Data DataACL `json:"data"`

	// Entry count
	EntryCount uint64 `json:"entryCount"`
}

// Data ACL
type DataACL struct {
	// RG ACL list
	RGACLList []RGACL `json:"rgACL"`

	// Account ACL list
	AccountACLList []AccountACL `json:"accountACL"`

	// Compute ACL list
	ComputeACLList []ComputeACL `json:"computeACL"`
}

// RG ACL info
type RGACL struct {
	Right       string `json:"right"`
	GUID        string `json:"guid"`
	UserGroupID string `json:"userGroupId"`
	Status      string `json:"status"`
	Type        string `json:"type"`
	Explicit    bool   `json:"explicit"`
}

// Account ACL info
type AccountACL struct {
	Right       string `json:"right"`
	GUID        string `json:"guid"`
	UserGroupID string `json:"userGroupId"`
	Status      string `json:"status"`
	Type        string `json:"type"`
	Explicit    bool   `json:"explicit"`
}

// Compute ACL info
type ComputeACL struct {
	Right       string `json:"right"`
	GUID        string `json:"guid"`
	UserGroupID string `json:"userGroupId"`
	Status      string `json:"status"`
	Type        string `json:"type"`
	Explicit    bool   `json:"explicit"`
}

// SnapRecordCompute is RecordCompute but without the SnapSets field
type SnapRecordCompute struct {
	// Account ID
	AccountID uint64 `json:"accountId"`

	// Account name
	AccountName string `json:"accountName"`

	// Access Control List
	ACL []interface{} `json:"acl"`

	// Affinity label
	AffinityLabel string `json:"affinityLabel"`

	// Affinity rules
	AffinityRules ListRules `json:"affinityRules"`

	// Affinity weight
	AffinityWeight uint64 `json:"affinityWeight"`

	// Anti affinity rules
	AntiAffinityRules ListRules `json:"antiAffinityRules"`

	// Auto start when node restarted
	AutoStart bool `json:"autoStart"`

	// Architecture
	Arch string `json:"arch"`

	// Boot image ID
	BootImageID uint64 `json:"boot_image_id"`

	// Boot order
	BootOrder []string `json:"bootOrder"`

	// Boot type
	BootType string `json:"bootType"`

	// Boot disk size
	BootDiskSize uint64 `json:"bootdiskSize"`

	// CD Image Id
	CdImageId uint64 `json:"cdImageId"`

	// Chipset
	Chipset string `json:"chipset"`

	// Clone reference
	CloneReference uint64 `json:"cloneReference"`

	// Clock
	Clock string `json:"clock"`

	// List clone IDs
	Clones []uint64 `json:"clones"`

	// Compute CI ID
	ComputeCIID uint64 `json:"computeciId"`

	// CPU Pin
	CPUPin bool `json:"cpupin"`

	// Number of CPU
	CPUs uint64 `json:"cpus"`

	// Created by
	CreatedBy string `json:"createdBy"`

	// Created time
	CreatedTime uint64 `json:"createdTime"`

	// Custom fields
	CustomFields map[string]interface{} `json:"customFields"`

	// Deleted by
	DeletedBy string `json:"deletedBy"`

	// Deleted time
	DeletedTime uint64 `json:"deletedTime"`

	// Description
	Description string `json:"desc"`

	// Devices
	Devices interface{} `json:"devices"`

	// List disks
	Disks ListDisks `json:"disks"`

	// Driver
	Driver string `json:"driver"`

	// Grid ID
	GID uint64 `json:"gid"`

	// GUID
	GUID uint64 `json:"guid"`

	// HPBacked
	HPBacked bool `json:"hpBacked"`

	// Hot resize
	HotResize bool `json:"hotResize"`

	// ID
	ID uint64 `json:"id"`

	// Image ID
	ImageID uint64 `json:"imageId"`

	// Image name
	ImageName string `json:"imageName"`

	// List interfaces
	Interfaces ListInterfaces `json:"interfaces"`

	// Loader meta iso information
	LoaderMetaIso LoaderMetaIso `json:"loaderMetaIso"`

	// Live migration job ID
	LiveMigrationJobID uint64 `json:"live_migration_job_id"`

	// Loader type
	LoaderType string `json:"loaderType"`

	// Lock status
	LockStatus string `json:"lockStatus"`

	// Manager ID
	ManagerID uint64 `json:"managerId"`

	// Manager type
	ManagerType string `json:"managerType"`

	// Migration job
	MigrationJob uint64 `json:"migrationjob"`

	// Milestones
	Milestones uint64 `json:"milestones"`

	// Name
	Name string `json:"name"`

	// Natable VINS ID
	NatableVINSID uint64 `json:"natableVinsId"`

	// Natable VINS IP
	NatableVINSIP string `json:"natableVinsIp"`

	// Natable VINS Name
	NatableVINSName string `json:"natableVinsName"`

	// Natable VINS network
	NatableVINSNetwork string `json:"natableVinsNetwork"`

	// Natable VINS network name
	NatableVINSNetworkName string `json:"natableVinsNetworkName"`

	// Need reboot
	NeedReboot bool `json:"needReboot"`

	// network interface naming
	NetworkInterfaceNaming string `json:"networkInterfaceNaming"`

	// NumaAffinity
	NumaAffinity string `json:"numaAffinity"`

	//NumaNodeId
	NumaNodeId int64 `json:"numaNodeId"`

	// List OS users
	OSUsers ListOSUsers `json:"osUsers"`

	// Name of OS
	OSVersion string `json:"os_version"`

	// Pinned to node
	PinnedToNode int64 `json:"pinnedToNode"`

	// PreferredCPU
	PreferredCPU []int64 `json:"preferredCpu"`

	// CPU alignment profile
	CPUAlignmentProfile CPUAlignmentProfile `json:"cpu_alignment_profile"`

	// Qemu_quest
	QemuQuest QemuQuest `json:"qemu_guest"`

	// ReadOnly indicates read-only mode state
	ReadOnly bool `json:"read_only"`

	// Number of RAM
	RAM uint64 `json:"ram"`

	// Reference ID
	ReferenceID string `json:"referenceId"`

	// Registered
	Registered bool `json:"registered"`

	// Whether a compute has been resized online
	ResizedOnline bool `json:"resizedOnline"`

	// Resource name
	ResName string `json:"resName"`

	// Reserved Node Cpus
	ReservedNodeCpus []uint64 `json:"reservedNodeCpus"`

	// Resource group ID
	RGID uint64 `json:"rgId"`

	// Resource group name
	RGName string `json:"rgName"`

	// Node ID
	NodeID uint64 `json:"node_id"`

	// Node name
	NodeName string `json:"nodeName"`

	// Stateless SEP ID
	StatelessSEPID int64 `json:"statelessSepId"`

	// Stateless SEP Type
	StatelessSEPType string `json:"statelessSepType"`

	// Status
	Status string `json:"status"`

	// Tags
	Tags map[string]interface{} `json:"tags"`

	// Tech status
	TechStatus string `json:"techStatus"`

	// Total disk size
	TotalDiskSize uint64 `json:"totalDisksSize"`

	// Updated by
	UpdatedBy string `json:"updatedBy"`

	// Updated time
	UpdatedTime uint64 `json:"updatedTime"`

	// User managed
	UserManaged bool `json:"userManaged"`

	// Userdata
	Userdata interface{} `json:"userdata"`

	// List VGPU
	VGPUs []ItemVGPU `json:"vgpus"`

	// VNC password
	VNCPassword string `json:"vncPasswd"`

	// Weight
	Weight uint64 `json:"weight"`

	// Zone ID
	ZoneID uint64 `json:"zoneId"`
}

type LoaderMetaIso struct {
	// Name
	DeviceName string `json:"devicename"`

	// Path
	Path string `json:"path"`
}

// Information about of disk IDs
type ListInfoDisks []InfoDisk

// Main information about compute for list
type ItemCompute struct {
	// List of disk IDs
	Disks ListInfoDisks `json:"disks"`

	// Main information about compute
	InfoCompute

	// NID
	NID uint64 `json:"nid"`

	// Total disk size
	TotalDiskSize uint64 `json:"totalDisksSize"`

	// VINS connected
	VINSConnected uint64 `json:"vinsConnected"`
}

// Main information about compute for list
type ItemDeletedCompute struct {
	// List of disk IDs
	Disks ListInfoDisks `json:"disks"`

	// Main information about compute
	InfoCompute

	// Total disk size
	TotalDiskSize uint64 `json:"totalDisksSize"`

	// VINS connected
	VINSConnected uint64 `json:"vinsConnected"`
}

// Information Disk
type InfoDisk struct {
	// ID
	ID uint64 `json:"id"`

	// SEP ID
	SepID int64 `json:"sepId"`

	// Image ID
	ImageID uint64 `json:"imageId"`

	// Read-only
	ReadOnly bool `json:"read_only"`
}

// List computes
type ListComputes struct {
	// Data
	Data []ItemCompute `json:"data"`

	// EntryCount
	EntryCount uint64 `json:"entryCount"`
}

// List computes
type ListDeletedComputes struct {
	// Data
	Data []ItemDeletedCompute `json:"data"`

	// EntryCount
	EntryCount uint64 `json:"entryCount"`
}

// Short information about audit
type ItemAudit struct {
	// Epoch
	Epoch float64 `json:"epoch"`

	// Message
	Message string `json:"message"`
}

// List audits
type ListAudits []ItemAudit

// Main information about PCI device
type ItemPCIDevice struct {
	// CKey
	CKey string `json:"_ckey"`

	// Meta
	Meta []interface{} `json:"_meta"`

	// Compute ID
	ComputeID uint64 `json:"computeId"`

	// Description
	Description string `json:"description"`

	// GUID
	GUID uint64 `json:"guid"`

	// HwPath
	HwPath string `json:"hwPath"`

	// ID
	ID uint64 `json:"id"`

	// Name
	Name string `json:"name"`

	// Account IDs
	AccountIDs []uint64 `json:"account_ids"`

	// Node ID
	NodeID uint64 `json:"nodeId"`

	// Status
	Status string `json:"status"`

	// System name
	SystemName string `json:"systemName"`
}

// List PCI devices
type ListPCIDevices struct {
	// Data
	Data []ItemPCIDevice `json:"data"`

	// Entry count
	EntryCount uint64 `json:"entryCount"`
}

// List VGPUs
type ListVGPUs struct {
	// Data
	Data []ItemVGPU `json:"data"`

	// Entry count
	EntryCount uint64 `json:"entryCount"`
}

// Main information about vgpu device
type ItemVGPU struct {
	// Account IDs
	AccountIDs []uint64 `json:"account_ids"`

	// Bus number
	BusNumber int `json:"bus_number"`

	// ComputeID
	ComputeID uint64 `json:"compute_id"`

	// Created time
	CreatedTime uint64 `json:"created_time"`

	// Deleted time
	DeletedTime uint64 `json:"deleted_time"`

	// Device Reference
	DeviceReference string `json:"device_reference"`

	//Grid ID
	GID uint64 `json:"gid"`

	// GUID
	GUID uint64 `json:"guid"`

	// VGPU ID
	ID uint64 `json:"id"`

	// Last Update time
	LastUpdateTime uint64 `json:"last_update_time"`

	// Mdev UUID
	MdevUUID string `json:"mdev_uuid"`

	// Parent PCI Address
	ParentPCIAddress string `json:"parent_pci_address"`

	// PCI Slot
	PCISlot uint64 `json:"pci_slot"`

	// PGPU ID
	PGPUID uint64 `json:"pgpu_id"`

	// Profile Reference
	ProfileReference string `json:"profile_reference"`

	// Profile Name
	ProfileName string `json:"profile_name"`

	// Split Mode
	SplitMode string `json:"split_mode"`

	// Status
	Status string `json:"status"`
}

type ListMigrateStorage struct {
	EntryCount uint64               `json:"entryCount"`
	Data       []MigrateStorageItem `json:"data"`
}

type MigrateStorageItem struct {
	// Migration completion status
	Completed bool `json:"completed"`

	// Domain name
	DomainName string `json:"domainName"`

	// Migration job ID
	ID uint64 `json:"id"`

	// Migration process log
	Log []string `json:"log"`

	// Source node ID
	SourceNodeID uint64 `json:"sourceNodeId"`

	// Migration status
	Status string `json:"status"`

	// Target node ID
	TargetNodeID uint64 `json:"targetNodeId"`
}

// Info about last (including ongoing) storage migration
type RecordMigrateStorageInfo struct {
	// Migration completion status
	Completed bool `json:"completed"`

	// CPU set
	CPUSet string `json:"cpu_set"`

	// Daemon address
	DaemonAddr string `json:"daemonAddr"`

	// Domain name
	DomainName string `json:"domainName"`

	// Domain UUID
	DomainUUID string `json:"domainUUID"`

	// Elapsed time
	ElapsedTime uint64 `json:"elapsedTime"`

	// GID
	GID uint64 `json:"gid"`

	// GUID
	GUID uint64 `json:"guid"`

	// ID
	ID uint64 `json:"id"`

	// List interfaces
	Interfaces []ItemShadowComputeInterface `json:"interfaces"`

	// Log
	Log []string `json:"log"`

	// New disk XMLs
	NewDiskXmls []string `json:"newDiskXmls"`

	// New disks
	NewDisks []uint64 `json:"newDisks"`

	// Old disks
	OldDisks []uint64 `json:"oldDisks"`

	// PID
	PID uint64 `json:"pid"`

	// Source node ID
	SourceNodeID uint64 `json:"sourceNodeId"`

	// Source numa node ID
	SourceNumaNodeID int64 `json:"sourceNumaNodeId"`

	// Source reserved node CPUs
	SourceReservedNodeCpus []uint64 `json:"sourceReservedNodeCpus"`

	// Source URL
	SourceURL string `json:"sourceURL"`

	// Status
	Status string `json:"status"`

	// Target shadow compute
	TargetShadowCompute ShadowCompute `json:"target_shadow_compute"`

	// Target node ID
	TargetNodeID uint64 `json:"targetNodeId"`

	// Target URL
	TargetURL string `json:"targetURL"`

	// VM log directory
	VMLogDir string `json:"vmlogDir"`
}

// Shadow compute created for the duration of a storage migration
type ShadowCompute struct {
	// Account ID
	AccountID uint64 `json:"accountId"`

	// Access Control List
	ACL []interface{} `json:"acl"`

	// Affinity label
	AffinityLabel string `json:"affinityLabel"`

	// Affinity rules
	AffinityRules ListShadowComputeRules `json:"affinityRules"`

	// Affinity weight
	AffinityWeight uint64 `json:"affinityWeight"`

	// Anti affinity rules
	AntiAffinityRules ListShadowComputeRules `json:"antiAffinityRules"`

	// Architecture
	Arch string `json:"arch"`

	// Auto start when node restarted
	AutoStart bool `json:"autoStart"`

	// Boot image ID
	BootImageID uint64 `json:"boot_image_id"`

	// Boot order
	BootOrder []string `json:"bootOrder"`

	// Boot type
	BootType string `json:"bootType"`

	// Boot disk size
	BootDiskSize uint64 `json:"bootdiskSize"`

	// CD Image ID
	CDImageID uint64 `json:"cdImageId"`

	// Chipset
	Chipset string `json:"chipset"`

	// Clock
	Clock string `json:"clock"`

	// Clone reference
	CloneReference uint64 `json:"cloneReference"`

	// List clone IDs
	Clones []uint64 `json:"clones"`

	// Compute CI ID
	ComputeCIID uint64 `json:"computeciId"`

	// CPU alignment profile
	CPUAlignmentProfile CPUAlignmentProfile `json:"cpu_alignment_profile"`

	// CPU pin
	CPUPin bool `json:"cpupin"`

	// Number of CPU
	CPUs uint64 `json:"cpus"`

	// Custom fields
	CustomFields map[string]interface{} `json:"customFields"`

	// Description
	Description string `json:"desc"`

	// Devices
	Devices interface{} `json:"devices"`

	// List disks
	Disks []ItemShadowComputeDisk `json:"disks"`

	// Driver
	Driver string `json:"driver"`

	// GID
	GID uint64 `json:"gid"`

	// GUID
	GUID uint64 `json:"guid"`

	// HPBacked
	HPBacked bool `json:"hpBacked"`

	// Hot resize
	HotResize bool `json:"hotResize"`

	// ID
	ID uint64 `json:"id"`

	// List interfaces
	Interfaces []ItemShadowComputeInterface `json:"interfaces"`

	// Live migration job ID
	LiveMigrationJobID uint64 `json:"live_migration_job_id"`

	// Loader type
	LoaderType string `json:"loaderType"`

	// Lock status
	LockStatus string `json:"lockStatus"`

	// Manager ID
	ManagerID uint64 `json:"managerId"`

	// Manager type
	ManagerType string `json:"managerType"`

	// Migration job
	MigrationJob uint64 `json:"migrationjob"`

	// Milestones
	Milestones uint64 `json:"milestones"`

	// Name
	Name string `json:"name"`

	// Need reboot
	NeedReboot bool `json:"needReboot"`

	// Network interface naming
	NetworkInterfaceNaming string `json:"networkInterfaceNaming"`

	// Node ID
	NodeID uint64 `json:"node_id"`

	// NumaAffinity
	NumaAffinity string `json:"numaAffinity"`

	// NumaNodeId
	NumaNodeID int64 `json:"numaNodeId"`

	// List OS users
	OSUsers ListOSUsers `json:"osUsers"`

	// Name of OS
	OSVersion string `json:"os_version"`

	// Pinned to node
	PinnedToNode int64 `json:"pinnedToNode"`

	// Preferred CPU
	PreferredCPU []int64 `json:"preferredCpu"`

	// Qemu guest
	QemuGuest QemuQuest `json:"qemu_guest"`

	// ReadOnly indicates read-only mode state
	ReadOnly bool `json:"read_only"`

	// Number of RAM
	RAM uint64 `json:"ram"`

	// Reference ID
	ReferenceID string `json:"referenceId"`

	// Reserved node CPUs
	ReservedNodeCpus []uint64 `json:"reservedNodeCpus"`

	// Resized online
	ResizedOnline bool `json:"resizedOnline"`

	// Resource name
	ResName string `json:"resName"`

	// Resource group ID
	RGID uint64 `json:"rgId"`

	// SnapSets
	SnapSets ListShadowComputeSnapshots `json:"snapSets"`

	// Stateless SEP ID
	StatelessSEPID int64 `json:"statelessSepId"`

	// Stateless SEP type
	StatelessSEPType string `json:"statelessSepType"`

	// Status
	Status string `json:"status"`

	// Tags
	Tags map[string]interface{} `json:"tags"`

	// Tech status
	TechStatus string `json:"techStatus"`

	// User managed
	UserManaged bool `json:"userManaged"`

	// Userdata
	Userdata interface{} `json:"userdata"`

	// List VGPU IDs
	VGPUs []uint64 `json:"vgpus"`

	// VNC password
	VNCPassword string `json:"vncPasswd"`

	// Weight
	Weight uint64 `json:"weight"`

	// Zone ID
	ZoneID uint64 `json:"zoneId"`
}

// Disk of a shadow compute
type ItemShadowComputeDisk struct {
	// ID
	ID uint64 `json:"id"`
}

// Affinity/anti-affinity rule of a shadow compute
type ItemShadowComputeRule struct {
	// Key
	Key string `json:"key"`

	// Mode
	Mode string `json:"mode"`

	// Policy
	Policy string `json:"policy"`

	// Topology
	Topology string `json:"topology"`

	// Value
	Value string `json:"value"`
}

// List of shadow compute affinity/anti-affinity rules
type ListShadowComputeRules []ItemShadowComputeRule

// Snapshot of a shadow compute
type ItemShadowComputeSnapshot struct {
	// List of disk IDs
	Disks []uint64 `json:"disks"`

	// GUID
	GUID string `json:"guid"`

	// Label
	Label string `json:"label"`

	// Timestamp
	Timestamp uint64 `json:"timestamp"`
}

// List of shadow compute snapshots
type ListShadowComputeSnapshots []ItemShadowComputeSnapshot

// Network interface of a shadow compute
type ItemShadowComputeInterface struct {
	// Name
	Name string `json:"name"`

	// Target
	Target string `json:"target"`

	// PCI slot
	PCISlot int64 `json:"pciSlot"`

	// Bus number
	BusNumber int64 `json:"bus_number"`

	// MAC
	MAC string `json:"mac"`

	// Maximum transmission unit
	MTU int64 `json:"mtu"`

	// Type
	Type string `json:"type"`

	// Connection type
	ConnType string `json:"connType"`

	// Connection ID
	ConnID uint64 `json:"connId"`

	// FLIPGroup ID
	FLIPGroupID uint64 `json:"flipgroupId"`

	// Network type
	NetType string `json:"netType"`

	// Network ID
	NetID uint64 `json:"netId"`

	// IP address
	IPAddress string `json:"ipAddress"`

	// Network mask
	NetMask int64 `json:"netMask"`

	// Default GW
	DefGW string `json:"defGw"`

	// List of VNF IDs
	VNFs []uint64 `json:"vnfs"`

	// QOS
	QOS QOS `json:"qos"`

	// List of QoS Policy IDs
	QoSPolicies []uint64 `json:"qos_policies"`

	// Libvirt settings
	LibvirtSettings LibvirtSettings `json:"libvirtSettings"`

	// GUID
	GUID string `json:"guid"`

	// Listen SSH or not
	ListenSSH bool `json:"listenSsh"`

	// Enabled
	Enabled bool `json:"enabled"`

	// Enable default gateway
	EnableDefaultGateway bool `json:"enable_default_gateway"`

	// Node ID
	NodeID uint64 `json:"nodeId"`

	// SDN interface ID
	SDNInterfaceID string `json:"sdn_interface_id"`

	// List of security groups
	SecGroups []uint64 `json:"security_groups"`

	// Enable security groups
	EnableSecGroups bool `json:"enable_secgroups"`

	// Trunk tags
	TrunkTags []int64 `json:"trunk_tags"`
}

type RecordCloneAbort struct {
	// Disk ID
	DiskID uint64 `json:"disk_id"`

	// Aborted
	Aborted bool `json:"aborted"`

	// Blockcopy abort job ID
	BlockcopyAbortJobID string `json:"blockcopy_abort_job_id"`
}

type RecordCloneStatus struct {
	// Disk ID
	DiskID int `json:"disk_id"`

	// Clone Status
	Status CloneStatus `json:"status"`
}

type CloneStatus struct {
	// Type
	Type int `json:"type"`

	// Copy speed
	Bandwidth int `json:"bandwidth"`

	// Current progress
	Cur int `json:"cur"`

	// Total size
	End int `json:"end"`

	// Operation status
	Ready bool `json:"ready"`

	// Progress percent
	ProgressPercent int `json:"progress_percent"`
}

type CheckComputePlacementError struct {
	// Code
	Code int64 `json:"code"`

	// Message
	Message string `json:"message"`
}

type CheckComputePlacementItem struct {
	// Nide IDs
	NodeIDs []uint64 `json:"node_ids"`
	// error
	Error CheckComputePlacementError `json:"error,omitempty"`
}

type CheckComputePlacementResult map[uint64]CheckComputePlacementItem
