Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
var (
// Identifier for the creator of reservations.
Creator = "commitments syncer"
)
Functions ¶
This section is empty.
Types ¶
type Commitment ¶
type Commitment struct {
// A unique numerical identifier for this commitment. This API uses this
// numerical ID to refer to the commitment in other API calls.
ID int `json:"id"`
// A unique string identifier for this commitment. The next major version of
// this API will use this UUID instead of the numerical ID to refer to
// commitments in API calls.
UUID string `json:"uuid"`
// The resource for which usage is committed.
ServiceType string `json:"service_type"`
ResourceName string `json:"resource_name"`
// The availability zone in which usage is committed.
AvailabilityZone string `json:"availability_zone"`
// The amount of usage that was committed to.
Amount uint64 `json:"amount"`
// For measured resources, the unit for this resource. The value from the
// amount field is measured in this unit.
Unit string `json:"unit"`
// The requested duration of this commitment, expressed as a comma-separated
// sequence of positive integer multiples of time units like "1 year,
// 3 months". Acceptable time units include "second", "minute", "hour",
// "day", "month" and "year".
Duration string `json:"duration"`
// UNIX timestamp when this commitment was created.
CreatedAt uint64 `json:"created_at"`
// UNIX timestamp when this commitment should be confirmed. Only shown if
// this was given when creating the commitment, to delay confirmation into
// the future.
ConfirmBy *uint64 `json:"confirm_by,omitempty"`
// UNIX timestamp when this commitment was confirmed. Only shown after
// confirmation.
ConfirmedAt *uint64 `json:"confirmed_at,omitempty"`
// UNIX timestamp when this commitment is set to expire. Note that the
// duration counts from confirmBy (or from createdAt for immediately-
// confirmed commitments) and is calculated at creation time, so this is
// also shown on unconfirmed commitments.
ExpiresAt uint64 `json:"expires_at"`
// Whether the commitment is marked for transfer to a different project.
// Transferable commitments do not count towards quota calculation in their
// project, but still block capacity and still count towards billing. Not
// shown if false.
Transferable bool `json:"transferable"`
// The current status of this commitment. If provided, one of "planned",
// "pending", "guaranteed", "confirmed", "superseded", or "expired".
Status string `json:"status,omitempty"`
// Whether a mail notification should be sent if a created commitment is
// confirmed. Can only be set if the commitment contains a confirmBy value.
NotifyOnConfirm bool `json:"notify_on_confirm"`
// The openstack project ID this commitment is for.
ProjectID string `json:"project_id"`
// The openstack domain ID this commitment is for.
DomainID string `json:"domain_id"`
}
Commitment model from the limes API. See: https://github.com/sapcc/limes/blob/5ea068b/docs/users/api-spec-resources.md?plain=1#L493 See: https://github.com/sapcc/go-api-declarations/blob/94ee3e5/limes/resources/commitment.go#L19
type CommitmentsClient ¶
type CommitmentsClient interface {
// Init the client.
Init(ctx context.Context)
// List all projects to resolve commitments.
ListProjects(ctx context.Context) ([]Project, error)
// List all flavors by their name to resolve instance commitments.
ListFlavorsByName(ctx context.Context) (map[string]Flavor, error)
// List all commitments with resolved metadata (e.g. project, flavor, ...).
ListCommitmentsByID(ctx context.Context, projects ...Project) (map[string]Commitment, error)
// List all servers for the given projects from nova.
// The result is a map from project ID to the list of servers.
ListServersByProjectID(ctx context.Context, projects ...Project) (map[string][]Server, error)
}
Client to fetch commitments.
func NewCommitmentsClient ¶
func NewCommitmentsClient(conf conf.KeystoneConfig) CommitmentsClient
Create a new commitments client. By default, this client will fetch commitments from the limes API.
type Config ¶
type Config struct {
// Keystone config.
Keystone conf.KeystoneConfig `json:"keystone"`
}
Configuration for the commitments module.
type Flavor ¶
type Flavor struct {
ID string `json:"id"`
Disk int `json:"disk"` // in GB.
RAM int `json:"ram"` // in MB.
Name string `json:"name"`
RxTxFactor float64 `json:"rxtx_factor"`
VCPUs int `json:"vcpus"`
IsPublic bool `json:"os-flavor-access:is_public"`
Ephemeral int `json:"OS-FLV-EXT-DATA:ephemeral"`
Description string `json:"description"`
// JSON string of extra specifications used when scheduling the flavor.
ExtraSpecs map[string]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
type Project ¶
type Project struct {
// DomainID is the domain ID the project belongs to.
DomainID string `json:"domain_id"`
// ID is the unique ID of the project.
ID string `json:"id"`
// Name is the name of the project.
Name string `json:"name"`
// ParentID is the parent_id of the project.
ParentID string `json:"parent_id"`
}
OpenStack project model as returned by the Keystone API under /projects. See: https://docs.openstack.org/api-ref/identity/v3/#projects
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.