Documentation
¶
Index ¶
- Constants
- type Config
- type DedicatedPoolRecord
- type Driver
- func (d *Driver) Allocate(def types.LabelDefinition, metadata map[string]any) (*types.Resource, error)
- func (d *Driver) AvailableCapacity(node_usage types.Resources, def types.LabelDefinition) int64
- func (d *Driver) Deallocate(res *types.Resource) error
- func (d *Driver) GetTask(name, options string) drivers.ResourceDriverTask
- func (d *Driver) IsRemote() bool
- func (d *Driver) Name() string
- func (d *Driver) Prepare(config []byte) error
- func (d *Driver) Status(res *types.Resource) (string, error)
- func (d *Driver) ValidateDefinition(def types.LabelDefinition) error
- type Factory
- type Options
- type TaskSnapshot
Constants ¶
View Source
const HOST_RESERVED = "reserved"
Custom status to set in the host for simplifying parallel ops in between the updates
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct {
Region string `json:"region"` // AWS Region to connect to
KeyID string `json:"key_id"` // AWS AMI Key ID
SecretKey string `json:"secret_key"` // AWS AMI Secret Key
// Optional
AccountIDs []string `json:"account_ids"` // AWS Trusted account IDs to filter vpc, subnet, sg, images, snapshots...
InstanceTags map[string]string `json:"instance_tags"` // AWS Instance tags to use when this node provision them
// Manage the AWS dedicated hosts to keep them busy and deallocate when not needed
// Key of the map is name of the pool - will be used for identification of the pool
DedicatedPool map[string]DedicatedPoolRecord `json:"dedicated_pool"`
}
type DedicatedPoolRecord ¶ added in v0.7.3
type DedicatedPoolRecord struct {
Type string `json:"type"` // Instance type handled by the dedicated hosts pool (example: "mac2.metal")
Zone string `json:"zone"` // Where to allocate the dedicated host (example: "us-west-2c")
Max uint `json:"max"` // Maximum dedicated hosts to allocate (they sometimes can handle more than 1 capacity slot)
// Is a special optimization for the Mac dedicated hosts to send them in [scrubbing process] to
// save money when we can't release the host due to Apple's license of [24 hours] min limit.
//
// Details:
//
// Apple forces AWS and any of their customers to keep the Mac dedicated hosts allocated for at
// least [24 hours]. So after allocation you have no way to release the dedicated host even if
// you don't need it. This makes the mac hosts very pricey for any kind of dynamic allocation.
// In order to workaround this issue - Aquarium implements optimization to keep the Mac hosts
// busy with [scrubbing process], which is triggered after the instance stop or termination and
// puts Mac host in pending state for 1-2hr. That's the downside of optimization, because you
// not be able to use the machine until it will become available again.
//
// That's why this ScrubbingDelay config exists - we need to give Mac host some time to give
// the workload a chance to utilize the host. If it will not be utilized in this duration - the
// manager will start the scrubbing process. When the host become old enough - the manager will
// release it to clean up space for new fresh mac in the roster.
//
// * When this option is unset or 0 - no optimization is enabled.
// * When it's set - then it's a duration to stay idle and then allocate and terminate empty
// instance to trigger scrubbing.
//
// Current implementation is attached to state update, which could be API consuming, so this
// duration should be >= 1 min, otherwise API requests will be too often.
//
// [24 hours]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-mac-instances.html#mac-instance-considerations
// [scrubbing process]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mac-instance-stop.html
ScrubbingDelay util.Duration `json:"scrubbing_delay"`
}
Stores the configuration of AWS dedicated pool of particular type to manage aws ec2 allocate-hosts --availability-zone "us-west-2c" --auto-placement "on" --host-recovery "off" --host-maintenance "off" --quantity 1 --instance-type "mac2.metal"
type Driver ¶
type Driver struct {
// contains filtered or unexported fields
}
Implements drivers.ResourceDriver interface
func (*Driver) Allocate ¶
func (d *Driver) Allocate(def types.LabelDefinition, metadata map[string]any) (*types.Resource, error)
*
- Allocate Instance with provided image *
- It selects the AMI and run instance
- Uses metadata to fill EC2 instance userdata
func (*Driver) AvailableCapacity ¶ added in v0.6.0
Allow Fish to ask the driver about it's capacity (free slots) of a specific definition
func (*Driver) GetTask ¶ added in v0.6.0
func (d *Driver) GetTask(name, options string) drivers.ResourceDriverTask
func (*Driver) ValidateDefinition ¶
func (d *Driver) ValidateDefinition(def types.LabelDefinition) error
type Factory ¶ added in v0.7.3
type Factory struct{}
Implements drivers.ResourceDriverFactory interface
func (*Factory) NewResourceDriver ¶ added in v0.7.3
func (f *Factory) NewResourceDriver() drivers.ResourceDriver
type Options ¶ added in v0.6.0
type Options struct {
Image string `json:"image"` // ID/Name of the image to use
InstanceType string `json:"instance_type"` // Type of the instance from aws available list
SecurityGroup string `json:"security_group"` // ID/Name of the security group to use for the instance
Tags map[string]string `json:"tags"` // Tags to add during instance creation
EncryptKey string `json:"encrypt_key"` // Use specific encryption key for the new disks
Pool string `json:"pool"` // Use machine from dedicated pool, otherwise will try to use one with auto-placement
UserDataFormat string `json:"userdata_format"` // If not empty - will store the resource metadata to userdata in defined format
UserDataPrefix string `json:"userdata_prefix"` // Optional if need to add custom prefix to the metadata key during formatting
}
*
- Options example:
- image: ami-abcdef123456
- instance_type: c6a.4xlarge
- security_group: sg-abcdef123456
- tags:
- somekey: somevalue
type TaskSnapshot ¶ added in v0.6.0
type TaskSnapshot struct {
*types.ApplicationTask `json:"-"` // Info about the requested task
*types.Resource `json:"-"` // Info about the processed resource
Full bool `json:"full"` // Make full (all disks including OS image), or just the additional disks snapshot
// contains filtered or unexported fields
}
func (*TaskSnapshot) Clone ¶ added in v0.6.0
func (t *TaskSnapshot) Clone() drivers.ResourceDriverTask
func (*TaskSnapshot) Execute ¶ added in v0.6.0
func (t *TaskSnapshot) Execute() (result []byte, err error)
Snapshot could be executed during ALLOCATED & DEALLOCATE ApplicationStatus
func (*TaskSnapshot) Name ¶ added in v0.6.0
func (t *TaskSnapshot) Name() string
func (*TaskSnapshot) SetInfo ¶ added in v0.6.0
func (t *TaskSnapshot) SetInfo(task *types.ApplicationTask, res *types.Resource)
Click to show internal directories.
Click to hide internal directories.