Documentation
¶
Index ¶
- Constants
- type Aggregate
- type Flavor
- type Hypervisor
- type Migration
- type NovaAPI
- type NovaConf
- type NovaSyncer
- func (s *NovaSyncer) Init(ctx context.Context)
- func (s *NovaSyncer) Sync(ctx context.Context) error
- func (s *NovaSyncer) SyncAllAggregates(ctx context.Context) ([]Aggregate, error)
- func (s *NovaSyncer) SyncChangedFlavors(ctx context.Context) ([]Flavor, error)
- func (s *NovaSyncer) SyncChangedHypervisors(ctx context.Context) ([]Hypervisor, error)
- func (s *NovaSyncer) SyncChangedMigrations(ctx context.Context) ([]Migration, error)
- func (s *NovaSyncer) SyncChangedServers(ctx context.Context) ([]Server, error)
- type RawAggregate
- type Server
Constants ¶
const TriggerNovaAggregatesSynced = "triggers/sync/openstack/nova/types/aggregates"
Trigger executed when new aggregates are available.
const TriggerNovaFlavorsSynced = "triggers/sync/openstack/nova/types/flavors"
Trigger executed when new flavors are available.
const TriggerNovaHypervisorsSynced = "triggers/sync/openstack/nova/types/hypervisors"
Trigger executed when new hypervisors are available.
const TriggerNovaMigrationsSynced = "triggers/sync/openstack/nova/types/migrations"
Trigger executed when new migrations are available.
const TriggerNovaServersSynced = "triggers/sync/openstack/nova/types/servers"
Trigger executed when new servers are available.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Aggregate ¶
type Aggregate struct { UUID string `json:"uuid" db:"uuid"` Name string `json:"name" db:"name"` AvailabilityZone *string `json:"availability_zone" db:"availability_zone"` ComputeHost *string `json:"compute_host" db:"compute_host"` // Host that the aggregate is associated with. Metadata string `json:"metadata" db:"metadata"` // JSON string of properties. }
Aggregate as converted to be handled efficiently in a database.
type Flavor ¶
type Flavor struct { ID string `json:"id" db:"id,primarykey"` Disk uint64 `json:"disk" db:"disk"` // in GB. RAM uint64 `json:"ram" db:"ram"` // in MB. Name string `json:"name" db:"name"` RxTxFactor float64 `json:"rxtx_factor" db:"rxtx_factor"` VCPUs uint64 `json:"vcpus" db:"vcpus"` IsPublic bool `json:"os-flavor-access:is_public" db:"is_public"` Ephemeral uint64 `json:"OS-FLV-EXT-DATA:ephemeral" db:"ephemeral"` Description string `json:"description" db:"description"` // JSON string of extra specifications used when scheduling the flavor. ExtraSpecs string `json:"extra_specs" db:"extra_specs"` }
OpenStack flavor model as returned by the Nova API under /flavors/detail. See: https://docs.openstack.org/api-ref/compute/#list-flavors
func (*Flavor) MarshalJSON ¶
Custom marshaler for OpenStackFlavor to handle nested JSON.
func (*Flavor) UnmarshalJSON ¶
Custom unmarshaler for OpenStackFlavor to handle nested JSON.
type Hypervisor ¶
type Hypervisor struct { ID string `json:"id" db:"id,primarykey"` Hostname string `json:"hypervisor_hostname" db:"hostname"` State string `json:"state" db:"state"` Status string `json:"status" db:"status"` HypervisorType string `json:"hypervisor_type" db:"hypervisor_type"` HypervisorVersion int `json:"hypervisor_version" db:"hypervisor_version"` HostIP string `json:"host_ip" db:"host_ip"` // From nested JSON ServiceID string `json:"service_id" db:"service_id"` ServiceHost string `json:"service_host" db:"service_host"` // Used by the scheduler. ServiceDisabledReason *string `json:"service_disabled_reason" db:"service_disabled_reason"` VCPUs int `json:"vcpus" db:"vcpus"` MemoryMB int `json:"memory_mb" db:"memory_mb"` LocalGB int `json:"local_gb" db:"local_gb"` VCPUsUsed int `json:"vcpus_used" db:"vcpus_used"` MemoryMBUsed int `json:"memory_mb_used" db:"memory_mb_used"` LocalGBUsed int `json:"local_gb_used" db:"local_gb_used"` FreeRAMMB int `json:"free_ram_mb" db:"free_ram_mb"` FreeDiskGB int `json:"free_disk_gb" db:"free_disk_gb"` CurrentWorkload int `json:"current_workload" db:"current_workload"` RunningVMs int `json:"running_vms" db:"running_vms"` DiskAvailableLeast *int `json:"disk_available_least" db:"disk_available_least"` CPUInfo string `json:"cpu_info" db:"cpu_info"` }
OpenStack hypervisor model as returned by the Nova API under /os-hypervisors/detail. See: https://docs.openstack.org/api-ref/compute/#list-hypervisors-details
func (*Hypervisor) MarshalJSON ¶
func (h *Hypervisor) MarshalJSON() ([]byte, error)
Custom marshaler for OpenStackHypervisor to handle nested JSON. Specifically, we wrap the "service" field into a separate JSON object. This is the reverse operation of the UnmarshalJSON method.
func (Hypervisor) TableName ¶
func (Hypervisor) TableName() string
Table in which the openstack model is stored.
func (*Hypervisor) UnmarshalJSON ¶
func (h *Hypervisor) UnmarshalJSON(data []byte) error
Custom unmarshaler for OpenStackHypervisor to handle nested JSON. Specifically, we unwrap the "service" field into separate fields. Flattening these fields makes querying the data easier.
type Migration ¶
type Migration struct { ID int `json:"id" db:"id,primarykey"` UUID string `json:"uuid" db:"uuid"` SourceCompute string `json:"source_compute" db:"source_compute"` DestCompute string `json:"dest_compute" db:"dest_compute"` SourceNode string `json:"source_node" db:"source_node"` DestNode string `json:"dest_node" db:"dest_node"` DestHost string `json:"dest_host" db:"dest_host"` OldInstanceTypeID int `json:"old_instance_type_id" db:"old_instance_type_id"` NewInstanceTypeID int `json:"new_instance_type_id" db:"new_instance_type_id"` InstanceUUID string `json:"instance_uuid" db:"instance_uuid"` Status string `json:"status" db:"status"` MigrationType string `json:"migration_type" db:"migration_type"` UserID string `json:"user_id" db:"user_id"` ProjectID string `json:"project_id" db:"project_id"` CreatedAt string `json:"created_at" db:"created_at"` UpdatedAt string `json:"updated_at" db:"updated_at"` }
OpenStack migration model as returned by the Nova API under /os-migrations. See: https://docs.openstack.org/api-ref/compute/#list-migrations
type NovaAPI ¶
type NovaAPI interface { // Init the nova API. Init(ctx context.Context) // Get all changed nova servers since the timestamp. GetChangedServers(ctx context.Context, changedSince *time.Time) ([]Server, error) // Get all nova hypervisors since the timestamp. GetAllHypervisors(ctx context.Context) ([]Hypervisor, error) // Get all changed nova flavors since the timestamp. GetChangedFlavors(ctx context.Context, changedSince *time.Time) ([]Flavor, error) // Get all changed nova migrations since the timestamp. GetChangedMigrations(ctx context.Context, changedSince *time.Time) ([]Migration, error) // Get all changed aggregates since the timestamp. GetAllAggregates(ctx context.Context) ([]Aggregate, error) }
func NewNovaAPI ¶
Create a new OpenStack server syncer.
type NovaConf ¶
type NovaConf = conf.SyncOpenStackNovaConfig
Type alias for the OpenStack nova configuration.
type NovaSyncer ¶
type NovaSyncer struct { // Database to store the nova objects in. DB db.DB // Monitor to track the syncer. Mon sync.Monitor // Configuration for the nova syncer. Conf NovaConf // Nova API client to fetch the data. API NovaAPI // MQTT client to publish mqtt data. MqttClient mqtt.Client }
Syncer for OpenStack nova.
func (*NovaSyncer) Init ¶
func (s *NovaSyncer) Init(ctx context.Context)
Init the OpenStack nova syncer.
func (*NovaSyncer) Sync ¶
func (s *NovaSyncer) Sync(ctx context.Context) error
Sync the OpenStack nova objects and publish triggers.
func (*NovaSyncer) SyncAllAggregates ¶
func (s *NovaSyncer) SyncAllAggregates(ctx context.Context) ([]Aggregate, error)
func (*NovaSyncer) SyncChangedFlavors ¶
func (s *NovaSyncer) SyncChangedFlavors(ctx context.Context) ([]Flavor, error)
Sync the OpenStack flavors into the database.
func (*NovaSyncer) SyncChangedHypervisors ¶
func (s *NovaSyncer) SyncChangedHypervisors(ctx context.Context) ([]Hypervisor, error)
Sync the OpenStack hypervisors into the database.
func (*NovaSyncer) SyncChangedMigrations ¶
func (s *NovaSyncer) SyncChangedMigrations(ctx context.Context) ([]Migration, error)
Sync the OpenStack migrations into the database.
func (*NovaSyncer) SyncChangedServers ¶
func (s *NovaSyncer) SyncChangedServers(ctx context.Context) ([]Server, error)
Sync the OpenStack servers into the database. Return only new servers that were created since the last sync.
type RawAggregate ¶
type RawAggregate struct { UUID string `json:"uuid"` Name string `json:"name"` AvailabilityZone *string `json:"availability_zone"` Hosts []string `json:"hosts"` Metadata map[string]string `json:"metadata"` }
Raw aggregate as returned by the Nova API under /os-aggregates.
type Server ¶
type Server struct { ID string `json:"id" db:"id,primarykey"` Name string `json:"name" db:"name"` Status string `json:"status" db:"status"` TenantID string `json:"tenant_id" db:"tenant_id"` UserID string `json:"user_id" db:"user_id"` HostID string `json:"hostId" db:"host_id"` Created string `json:"created" db:"created"` Updated string `json:"updated" db:"updated"` AccessIPv4 string `json:"accessIPv4" db:"access_ipv4"` AccessIPv6 string `json:"accessIPv6" db:"access_ipv6"` OSDCFdiskConfig string `json:"OS-DCF:diskConfig" db:"os_dcf_disk_config"` Progress int `json:"progress" db:"progress"` OSEXTAvailabilityZone string `json:"OS-EXT-AZ:availability_zone" db:"os_ext_az_availability_zone"` ConfigDrive string `json:"config_drive" db:"config_drive"` KeyName string `json:"key_name" db:"key_name"` OSSRVUSGLaunchedAt string `json:"OS-SRV-USG:launched_at" db:"os_srv_usg_launched_at"` OSSRVUSGTerminatedAt *string `json:"OS-SRV-USG:terminated_at" db:"os_srv_usg_terminated_at"` OSEXTSRVATTRHost string `json:"OS-EXT-SRV-ATTR:host" db:"os_ext_srv_attr_host"` OSEXTSRVATTRInstanceName string `json:"OS-EXT-SRV-ATTR:instance_name" db:"os_ext_srv_attr_instance_name"` OSEXTSRVATTRHypervisorHostname string `json:"OS-EXT-SRV-ATTR:hypervisor_hostname" db:"os_ext_srv_attr_hypervisor_hostname"` OSEXTSTSTaskState *string `json:"OS-EXT-STS:task_state" db:"os_ext_sts_task_state"` OSEXTSTSVmState string `json:"OS-EXT-STS:vm_state" db:"os_ext_sts_vm_state"` OSEXTSTSPowerState int `json:"OS-EXT-STS:power_state" db:"os_ext_sts_power_state"` // From nested JSON FlavorName string `json:"-" db:"flavor_name"` }
OpenStack server model as returned by the Nova API under /servers/detail. See: https://docs.openstack.org/api-ref/compute/#list-servers-detailed
func (*Server) MarshalJSON ¶
Custom marshaler for OpenStackServer to handle nested JSON.
func (*Server) UnmarshalJSON ¶
Custom unmarshaler for OpenStackServer to handle nested JSON.