selector

package
v2.4.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 27, 2023 License: Apache-2.0 Imports: 28 Imported by: 31

Documentation

Overview

Package selector provides filtering logic for Amazon EC2 Instance Types based on declarative resource specfications.

Index

Constants

View Source
const (
	// AggregateLowPercentile is the default lower percentile for resource ranges on similar instance type comparisons
	AggregateLowPercentile = 0.9
	// AggregateHighPercentile is the default upper percentile for resource ranges on similar instance type comparisons
	AggregateHighPercentile = 1.2
)

Variables

This section is empty.

Functions

This section is empty.

Types

type ByteQuantityRangeFilter

type ByteQuantityRangeFilter struct {
	UpperBound bytequantity.ByteQuantity
	LowerBound bytequantity.ByteQuantity
}

ByteQuantityRangeFilter holds an upper and lower bound byte quantity The lower and upper bound are used to range filter resource specs

type EKS added in v2.0.3

type EKS struct {
	AMIRepoURL string
}

EKS is a Service type for a custom service filter transform

func (*EKS) Filters added in v2.0.3

func (e *EKS) Filters(version string) (Filters, error)

Filters implements the Service interface contract for EKS

type EMR added in v2.0.3

type EMR struct{}

EMR is a Service type for a custom service filter transform

func (EMR) Filters added in v2.0.3

func (e EMR) Filters(version string) (Filters, error)

Filters implements the Service interface contract for EMR

type Filters

type Filters struct {
	// AvailabilityZones is the AWS Availability Zones where instances will be provisioned.
	// Instance type capacity can vary between availability zones.
	// Will accept zone names or ids
	// Example: us-east-1a, us-east-1b, us-east-2a, etc. OR use1-az1, use2-az2, etc.
	AvailabilityZones *[]string

	// BareMetal is used to only return bare metal instance type results
	BareMetal *bool

	// Burstable is used to only return burstable instance type results like the t* series
	Burstable *bool

	// AutoRecovery is used to filter by instance types that support auto recovery
	AutoRecovery *bool

	// FreeTier is used to filter by instance types that can be used as part of the EC2 free tier
	FreeTier *bool

	// CPUArchitecture of the EC2 instance type
	// Possible values are: x86_64/amd64 or arm64
	CPUArchitecture *string

	// CPUManufacturer is used to filter instance types with a specific CPU manufacturer
	CPUManufacturer *string

	// CurrentGeneration returns the latest generation of instance types
	CurrentGeneration *bool

	// EnaSupport returns instances that can support an Elastic Network Adapter.
	EnaSupport *bool

	// EfaSupport returns instances that can support an Elastic Fabric Adapter.
	EfaSupport *bool

	// FPGA is used to only return FPGA instance type results
	Fpga *bool

	// GpusRange filter is a range of acceptable GPU count available to an EC2 instance type
	GpusRange *IntRangeFilter

	// GpuMemoryRange filter is a range of acceptable GPU memory in Gibibytes (GiB) available to an EC2 instance type in aggreagte across all GPUs.
	GpuMemoryRange *ByteQuantityRangeFilter

	// GPUManufacturer filters by GPU manufacturer
	GPUManufacturer *string

	// GPUModel filter by the GPU model name
	GPUModel *string

	// InferenceAcceleratorsRange filters inference accelerators available to the instance type
	InferenceAcceleratorsRange *IntRangeFilter

	// InferenceAcceleratorManufacturer filters by inference acceleartor manufacturer
	InferenceAcceleratorManufacturer *string

	// InferenceAcceleratorModel filters by inference accelerator model name
	InferenceAcceleratorModel *string

	// HibernationSupported denotes whether EC2 hibernate is supported
	// Possible values are: true or false
	HibernationSupported *bool

	// Hypervisor is used to return only a specific hypervisor backed instance type
	// Possibly values are: xen or nitro
	Hypervisor *string

	// MaxResults is the maximum number of instance types to return that match the filter criteria
	MaxResults *int

	// MemoryRange filter is a range of acceptable DRAM memory in Gibibytes (GiB) for the instance type
	MemoryRange *ByteQuantityRangeFilter

	// NetworkInterfaces filter is a range of the number of ENI attachments an instance type can support
	NetworkInterfaces *IntRangeFilter

	// NetworkPerformance filter is a range of network bandwidth an instance type can support
	NetworkPerformance *IntRangeFilter

	// NetworkEncryption filters for instance types that automatically encrypt network traffic in-transit
	NetworkEncryption *bool

	// IPv6 filters for instance types that support IPv6
	IPv6 *bool

	// PlacementGroupStrategy is used to return instance types based on its support
	// for a specific placement group strategy
	// Possible values are: cluster, spread, or partition
	PlacementGroupStrategy *string

	// Region is the AWS Region where instances will be provisioned.
	// Instance type availability can vary between AWS Regions.
	// Example: us-east-1, us-east-2, eu-west-1, etc.
	Region *string

	// RootDeviceType is the backing device of the root storage volume
	// Possible values are: instance-store or ebs
	RootDeviceType *string

	// UsageClass of the instance EC2 instance type
	// Possible values are: spot or on-demand
	UsageClass *string

	// VCpusRange filter is a range of acceptable VCpus for the instance type
	VCpusRange *IntRangeFilter

	// VcpusToMemoryRatio is a ratio of vcpus to memory expressed as a floating point
	VCpusToMemoryRatio *float64

	// AllowList is a regex of allowed instance types
	AllowList *regexp.Regexp

	// DenyList is a regex of excluded instance types
	DenyList *regexp.Regexp

	// InstanceTypeBase is a base instance type which is used to retrieve similarly spec'd instance types
	InstanceTypeBase *string

	// Flexible finds an opinionated set of general (c, m, r, t, a, etc.) instance types that match a criteria specified
	// or defaults to 4 vcpus
	Flexible *bool

	// Service filters instance types based on a service's supported list of instance types
	// Example: eks or emr
	Service *string

	// InstanceTypes filters instance types and only allows instance types in this slice
	InstanceTypes *[]string

	// VirtualizationType is used to return instance types that match either hvm or pv virtualization types
	VirtualizationType *string

	// PricePerHour is used to return instance types that are equal to or cheaper than the specified price
	PricePerHour *Float64RangeFilter

	// InstanceStorageRange filters on a range of storage available as local disk
	InstanceStorageRange *ByteQuantityRangeFilter

	// DiskType is the backing storage medium
	// Possible values are: hdd or ssd
	DiskType *string

	// NVME filters for NVME disks, including both EBS and local instance storage
	NVME *bool

	// EBSOptimized filters for instance types that support EBS Optimized
	EBSOptimized *bool

	// DiskEncryption filters for instance types that support EBS Encryption or local storage encryption
	DiskEncryption *bool

	// EBSOptimizedBaselineBandwidth filters on a range of bandwidth that an EBS Optimized volume supports
	EBSOptimizedBaselineBandwidth *ByteQuantityRangeFilter

	// EBSOptimizedBaselineThroughput filters on a range of throughput that an EBS Optimized volume supports
	EBSOptimizedBaselineThroughput *ByteQuantityRangeFilter

	// EBSOptimizedBaselineIOPS filters on a range of IOPS that an EBS Optimized volume supports
	EBSOptimizedBaselineIOPS *IntRangeFilter

	// DedicatedHosts filters on instance types that support dedicated hosts tenancy
	DedicatedHosts *bool
}

Filters is used to group instance type resource attributes for filtering

func (*Filters) MarshalIndent

func (f *Filters) MarshalIndent(prefix, indent string) ([]byte, error)

MarshalIndent is used to return a pretty-print json representation of a Filters struct

type FiltersTransform

type FiltersTransform interface {
	Transform(Filters) (Filters, error)
}

FiltersTransform can be implemented to provide custom transforms

type Float64RangeFilter added in v2.0.3

type Float64RangeFilter struct {
	UpperBound float64
	LowerBound float64
}

Float64RangeFilter holds an upper and lower bound float64 The lower and upper bound are used to range filter resource specs

type InstanceTypesOutput

type InstanceTypesOutput interface {
	Output([]*instancetypes.Details) []string
}

InstanceTypesOutput can be implemented to provide custom output to instance type results

type InstanceTypesOutputFn

type InstanceTypesOutputFn func([]*instancetypes.Details) []string

InstanceTypesOutputFn is the func type definition for InstanceTypesOuput

func (InstanceTypesOutputFn) Output

func (fn InstanceTypesOutputFn) Output(instanceTypes []*instancetypes.Details) []string

Output implements InstanceTypesOutput interface on InstanceTypesOutputFn This allows any InstanceTypesOutputFn to be passed into funcs accepting InstanceTypesOutput interface

type IntRangeFilter

type IntRangeFilter struct {
	UpperBound int
	LowerBound int
}

IntRangeFilter holds an upper and lower bound int The lower and upper bound are used to range filter resource specs

type Selector

type Selector struct {
	EC2                   ec2iface.EC2API
	EC2Pricing            ec2pricing.EC2PricingIface
	InstanceTypesProvider *instancetypes.Provider
	ServiceRegistry       ServiceRegistry
}

Selector is used to filter instance type resource specs

func New

func New(sess *session.Session) *Selector

New creates an instance of Selector provided an aws session

func NewWithCache added in v2.1.0

func NewWithCache(sess *session.Session, ttl time.Duration, cacheDir string) *Selector

func (Selector) AggregateFilterTransform

func (itf Selector) AggregateFilterTransform(filters Filters) (Filters, error)

AggregateFilterTransform takes higher level filters which are used to affect multiple raw filters in an opinionated way.

func (Selector) Filter deprecated

func (itf Selector) Filter(filters Filters) ([]string, error)

Filter accepts a Filters struct which is used to select the available instance types matching the criteria within Filters and returns a simple list of instance type strings

Deprecated: This function will be replaced with GetFilteredInstanceTypes() and OutputInstanceTypes() in the next major version.

func (Selector) FilterVerbose deprecated

func (itf Selector) FilterVerbose(filters Filters) ([]*instancetypes.Details, error)

FilterVerbose accepts a Filters struct which is used to select the available instance types matching the criteria within Filters and returns a list instanceTypeInfo

Deprecated: This function will be replaced with GetFilteredInstanceTypes() in the next major version.

func (Selector) FilterWithOutput deprecated

func (itf Selector) FilterWithOutput(filters Filters, outputFn InstanceTypesOutput) ([]string, int, error)

FilterWithOutput accepts a Filters struct which is used to select the available instance types matching the criteria within Filters and returns a list of strings based on the custom outputFn

Deprecated: This function will be replaced with GetFilteredInstanceTypes() and OutputInstanceTypes() in the next major version.

func (Selector) RetrieveInstanceTypesSupportedInLocations

func (itf Selector) RetrieveInstanceTypesSupportedInLocations(locations []string) (map[string]string, error)

RetrieveInstanceTypesSupportedInLocations returns a map of instance type -> AZ or Region for all instance types supported in the intersected locations passed in The location can be a zone-id (ie. use1-az1), a zone-name (us-east-1a), or a region name (us-east-1). Note that zone names are not necessarily the same across accounts

func (Selector) Save added in v2.1.0

func (itf Selector) Save() error

func (Selector) TransformBaseInstanceType

func (itf Selector) TransformBaseInstanceType(filters Filters) (Filters, error)

TransformBaseInstanceType transforms lower level filters based on the instanceTypeBase specs

func (Selector) TransformFlexible

func (itf Selector) TransformFlexible(filters Filters) (Filters, error)

TransformFlexible transforms lower level filters based on a set of opinions

func (Selector) TransformForService added in v2.0.3

func (itf Selector) TransformForService(filters Filters) (Filters, error)

TransformForService transforms lower level filters based on the service

type Service added in v2.0.3

type Service interface {
	Filters(version string) (Filters, error)
}

Service is used to write custom service filter transforms

type ServiceFiltersFn added in v2.0.3

type ServiceFiltersFn func(version string) (Filters, error)

ServiceFiltersFn is the func type definition for the Service interface

func (ServiceFiltersFn) Filters added in v2.0.3

func (fn ServiceFiltersFn) Filters(version string) (Filters, error)

Filters implements the Service interface on ServiceFiltersFn This allows any ServiceFiltersFn to be passed into funcs accepting the Service interface

type ServiceRegistry added in v2.0.3

type ServiceRegistry struct {
	// contains filtered or unexported fields
}

ServiceRegistry is used to register service filter transforms

func NewRegistry added in v2.0.3

func NewRegistry() ServiceRegistry

NewRegistry creates a new instance of a ServiceRegistry

func (*ServiceRegistry) ExecuteTransforms added in v2.0.3

func (sr *ServiceRegistry) ExecuteTransforms(filters Filters) (Filters, error)

ExecuteTransforms will execute the ServiceRegistry's registered service filter transforms Filters.Service will be parsed as <service-name>-<version> and passed to Service.Filters

func (*ServiceRegistry) Register added in v2.0.3

func (sr *ServiceRegistry) Register(name string, service Service)

Register takes a service name and Service implementation that will be executed on an ExecuteTransforms call

func (*ServiceRegistry) RegisterAWSServices added in v2.0.3

func (sr *ServiceRegistry) RegisterAWSServices()

RegisterAWSServices registers the built-in AWS service filter transforms

type TransformFn

type TransformFn func(Filters) (Filters, error)

TransformFn is the func type definition for a FiltersTransform

func (TransformFn) Transform

func (fn TransformFn) Transform(filters Filters) (Filters, error)

Transform implements FiltersTransform interface on TransformFn This allows any TransformFn to be passed into funcs accepting FiltersTransform interface

type Uint64RangeFilter

type Uint64RangeFilter struct {
	UpperBound uint64
	LowerBound uint64
}

Uint64RangeFilter holds an upper and lower bound uint64 The lower and upper bound are used to range filter resource specs

Directories

Path Synopsis
Package outputs provides types for implementing instance type output functions as well as prebuilt output functions.
Package outputs provides types for implementing instance type output functions as well as prebuilt output functions.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL