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.