Documentation
¶
Index ¶
- Constants
- Variables
- func AttachVolumeBadRequest(err error) bool
- func AztoRegion(az string) string
- func CheckInstanceTypeValid(ctx context.Context, d distro.Distro, requestedType string, ...) error
- func CreateSpawnHost(ctx context.Context, so SpawnOptions, settings *evergreen.Settings) (*host.Host, error)
- func CreateVolume(ctx context.Context, env evergreen.Environment, volume *host.Volume, ...) (*host.Volume, error)
- func GetEC2Key(region string, s *evergreen.Settings) (string, string, error)
- func GetMockClient() *dockerClientMock
- func IsDockerProvider(provider string) bool
- func IsEc2Provider(provider string) bool
- func MakeExtendedSpawnHostExpiration(host *host.Host, extendBy time.Duration) (time.Time, error)
- func ModifySpawnHost(ctx context.Context, env evergreen.Environment, host *host.Host, ...) error
- func ModifyVolumeBadRequest(err error) bool
- func NewUserData(opts userdata.Options) (*userData, error)
- func SetHostRDPPassword(ctx context.Context, env evergreen.Environment, host *host.Host, ...) error
- func TerminateSpawnHost(ctx context.Context, env evergreen.Environment, host *host.Host, ...) error
- func ValidVolumeOptions(v *host.Volume, s *evergreen.Settings) error
- type AWSClient
- type BatchManager
- type CloudHost
- func (cloudHost *CloudHost) GetDNSName(ctx context.Context) (string, error)
- func (cloudHost *CloudHost) GetInstanceStatus(ctx context.Context) (CloudStatus, error)
- func (cloudHost *CloudHost) IsUp(ctx context.Context) (bool, error)
- func (cloudHost *CloudHost) ModifyHost(ctx context.Context, opts host.HostModifyOptions) error
- func (cloudHost *CloudHost) StartInstance(ctx context.Context, user string) error
- func (cloudHost *CloudHost) StopInstance(ctx context.Context, user string) error
- func (cloudHost *CloudHost) TerminateInstance(ctx context.Context, user, reason string) error
- type CloudStatus
- type ContainerManager
- type ContainerStatus
- type CostCalculator
- type DockerClient
- type EC2FleetManagerOptions
- type EC2ManagerOptions
- type EC2ProviderSettings
- type GCESettings
- type Manager
- type ManagerOpts
- type MockInstance
- type MockProvider
- type MockProviderSettings
- type MockVolume
- type MountPoint
- type ProviderSettings
- type SpawnOptions
- type StaticHost
- type StaticSettings
- type Terms
Constants ¶
const ( //Catch-all for unrecognized status codes StatusUnknown = CloudStatus(iota) //StatusPending indicates that it is not yet clear if the instance //has been successfully started or not (e.g., pending spot request) StatusPending //StatusInitializing means the instance request has been successfully //fulfilled, but it's not yet done booting up StatusInitializing //StatusFailed indicates that an attempt to start the instance has failed; //Could be due to billing, lack of capacity, etc. StatusFailed //StatusRunning means the machine is done booting, and active StatusRunning StatusStopping StatusStopped StatusTerminated )
const ( SpotStatusOpen = "open" SpotStatusActive = "active" SpotStatusClosed = "closed" SpotStatusCanceled = "cancelled" SpotStatusFailed = "failed" EC2ErrorSpotRequestNotFound = "InvalidSpotInstanceRequestID.NotFound" )
const ( VolumeTypeStandard = "standard" VolumeTypeIo2 = "io1" VolumeTypeGp2 = "gp2" VolumeTypeSc1 = "sc1" VolumeTypeSt1 = "st1" )
const ( EC2ErrorNotFound = "InvalidInstanceID.NotFound" EC2DuplicateKeyPair = "InvalidKeyPair.Duplicate" EC2InsufficientCapacity = "InsufficientInstanceCapacity" EC2InvalidParam = "InvalidParameterValue" EC2VolumeNotFound = "InvalidVolume.NotFound" EC2VolumeResizeRate = "VolumeModificationRateExceeded" )
const ( // MinUptime is the minimum time to run a host before shutting it down. MinUptime = 30 * time.Minute // BufferTime is the time to leave an idle host running after it has completed // a task before shutting it down, given that it has already run for MinUptime. BufferTime = 10 * time.Minute )
const ( // OSStatusActive means the instance is currently running. OSStatusActive = "ACTIVE" // OSStatusInProgress means the instance is currently running and processing a request. OSStatusInProgress = "IN_PROGRESS" // OSStatusShutOff means the instance has been temporarily stopped. OSStatusShutOff = "SHUTOFF" // OSStatusBuilding means the instance is starting up. OSStatusBuilding = "BUILD" )
const MockIPV6 = "abcd:1234:459c:2d00:cfe4:843b:1d60:8e47"
const (
// ProviderName is used to distinguish between different cloud providers.
ProviderName = "gce"
)
Variables ¶
var ( // bson fields for the EC2ProviderSettings struct AMIKey = bsonutil.MustHaveTag(EC2ProviderSettings{}, "AMI") InstanceTypeKey = bsonutil.MustHaveTag(EC2ProviderSettings{}, "InstanceType") SecurityGroupsKey = bsonutil.MustHaveTag(EC2ProviderSettings{}, "SecurityGroupIDs") KeyNameKey = bsonutil.MustHaveTag(EC2ProviderSettings{}, "KeyName") MountPointsKey = bsonutil.MustHaveTag(EC2ProviderSettings{}, "MountPoints") )
var ( // bson fields for the MountPoint struct VirtualNameKey = bsonutil.MustHaveTag(MountPoint{}, "VirtualName") DeviceNameKey = bsonutil.MustHaveTag(MountPoint{}, "DeviceName") SizeKey = bsonutil.MustHaveTag(MountPoint{}, "Size") VolumeTypeKey = bsonutil.MustHaveTag(MountPoint{}, "VolumeType") )
var ( // bson fields for the StaticSettings struct HostsKey = bsonutil.MustHaveTag(StaticSettings{}, "Hosts") // bson fields for the Host struct NameKey = bsonutil.MustHaveTag(StaticHost{}, "Name") )
var ( // bson fields for the EC2SpotSettings struct BidPriceKey = bsonutil.MustHaveTag(EC2ProviderSettings{}, "BidPrice") )
var ( ValidVolumeTypes = []string{ VolumeTypeStandard, VolumeTypeIo2, VolumeTypeGp2, VolumeTypeSc1, VolumeTypeSt1, } )
Functions ¶
func AttachVolumeBadRequest ¶
func AztoRegion ¶
AztoRegion takes an availability zone and returns the region id.
func CheckInstanceTypeValid ¶
func CheckInstanceTypeValid(ctx context.Context, d distro.Distro, requestedType string, allowedTypes []string) error
assumes distro already modified to have one region
func CreateSpawnHost ¶
func CreateSpawnHost(ctx context.Context, so SpawnOptions, settings *evergreen.Settings) (*host.Host, error)
CreateSpawnHost spawns a host with the given options.
func CreateVolume ¶
func GetMockClient ¶
func GetMockClient() *dockerClientMock
func IsDockerProvider ¶
func IsEc2Provider ¶
func ModifySpawnHost ¶
func ModifySpawnHost(ctx context.Context, env evergreen.Environment, host *host.Host, opts host.HostModifyOptions) error
func ModifyVolumeBadRequest ¶
func NewUserData ¶
func SetHostRDPPassword ¶
func TerminateSpawnHost ¶
Types ¶
type AWSClient ¶
type AWSClient interface {
// Create a new aws-sdk-client or mock if one does not exist, otherwise no-op.
Create(*credentials.Credentials, string) error
// Close an aws-sdk-client or mock.
Close()
// RunInstances is a wrapper for ec2.RunInstances.
RunInstances(context.Context, *ec2.RunInstancesInput) (*ec2.Reservation, error)
// DescribeInstances is a wrapper for ec2.DescribeInstances.
DescribeInstances(context.Context, *ec2.DescribeInstancesInput) (*ec2.DescribeInstancesOutput, error)
// ModifyInstanceAttribute is a wrapper for ec2.ModifyInstanceAttribute
ModifyInstanceAttribute(context.Context, *ec2.ModifyInstanceAttributeInput) (*ec2.ModifyInstanceAttributeOutput, error)
// DescribeInstanceTypeOfferings is a wrapper for ec2.DescribeInstanceTypeOfferings.
DescribeInstanceTypeOfferings(context.Context, *ec2.DescribeInstanceTypeOfferingsInput) (*ec2.DescribeInstanceTypeOfferingsOutput, error)
// CreateTags is a wrapper for ec2.CreateTags.
CreateTags(context.Context, *ec2.CreateTagsInput) (*ec2.CreateTagsOutput, error)
// DeleteTags is a wrapper for ec2.DeleteTags.
DeleteTags(context.Context, *ec2.DeleteTagsInput) (*ec2.DeleteTagsOutput, error)
// TerminateInstances is a wrapper for ec2.TerminateInstances.
TerminateInstances(context.Context, *ec2.TerminateInstancesInput) (*ec2.TerminateInstancesOutput, error)
// StopInstances is a wrapper for ec2.StopInstances.
StopInstances(context.Context, *ec2.StopInstancesInput) (*ec2.StopInstancesOutput, error)
// StartInstances is a wrapper for ec2.StartInstances.
StartInstances(context.Context, *ec2.StartInstancesInput) (*ec2.StartInstancesOutput, error)
// RequestSpotInstances is a wrapper for ec2.RequestSpotInstances.
RequestSpotInstances(context.Context, *ec2.RequestSpotInstancesInput) (*ec2.RequestSpotInstancesOutput, error)
// DescribeSpotInstanceRequests is a wrapper for ec2.DescribeSpotInstanceRequests.
DescribeSpotInstanceRequests(ctx context.Context, input *ec2.DescribeSpotInstanceRequestsInput) (*ec2.DescribeSpotInstanceRequestsOutput, error)
// DescribeSpotRequestsAndSave is a wrapper for DescribeSpotInstanceRequests that also saves instance IDs to the db.
DescribeSpotRequestsAndSave(context.Context, []*host.Host) (*ec2.DescribeSpotInstanceRequestsOutput, error)
// GetSpotInstanceId returns the instance ID if already saved, otherwise looks it up.
GetSpotInstanceId(context.Context, *host.Host) (string, error)
// CancelSpotInstanceRequests is a wrapper for ec2.CancelSpotInstanceRequests.
CancelSpotInstanceRequests(context.Context, *ec2.CancelSpotInstanceRequestsInput) (*ec2.CancelSpotInstanceRequestsOutput, error)
// CreateVolume is a wrapper for ec2.CreateVolume.
CreateVolume(context.Context, *ec2.CreateVolumeInput) (*ec2.Volume, error)
// DeleteVolume is a wrapper for ec2.DeleteWrapper.
DeleteVolume(context.Context, *ec2.DeleteVolumeInput) (*ec2.DeleteVolumeOutput, error)
// AttachVolume is a wrapper for ec2.AttachVolume. Generates device name on error if applicable.
AttachVolume(context.Context, *ec2.AttachVolumeInput, generateDeviceNameOptions) (*ec2.VolumeAttachment, error)
// DetachVolume is a wrapper for ec2.DetachVolume.
DetachVolume(context.Context, *ec2.DetachVolumeInput) (*ec2.VolumeAttachment, error)
// ModifyVolume is a wrapper for ec2.ModifyVolume.
ModifyVolume(context.Context, *ec2.ModifyVolumeInput) (*ec2.ModifyVolumeOutput, error)
// DescribeVolumes is a wrapper for ec2.DescribeVolumes.
DescribeVolumes(context.Context, *ec2.DescribeVolumesInput) (*ec2.DescribeVolumesOutput, error)
// DescribeSpotPriceHistory is a wrapper for ec2.DescribeSpotPriceHistory.
DescribeSpotPriceHistory(context.Context, *ec2.DescribeSpotPriceHistoryInput) (*ec2.DescribeSpotPriceHistoryOutput, error)
// DescribeSubnets is a wrapper for ec2.DescribeSubnets.
DescribeSubnets(context.Context, *ec2.DescribeSubnetsInput) (*ec2.DescribeSubnetsOutput, error)
// DescribeVpcs is a wrapper for ec2.DescribeVpcs.
DescribeVpcs(context.Context, *ec2.DescribeVpcsInput) (*ec2.DescribeVpcsOutput, error)
// GetInstanceInfo returns info about an ec2 instance.
GetInstanceInfo(context.Context, string) (*ec2.Instance, error)
// CreateKeyPair is a wrapper for ec2.CreateKeyPairWithContext.
CreateKeyPair(context.Context, *ec2.CreateKeyPairInput) (*ec2.CreateKeyPairOutput, error)
// ImportKeyPair is a wrapper for ec2.ImportKeyPairWithContext.
ImportKeyPair(context.Context, *ec2.ImportKeyPairInput) (*ec2.ImportKeyPairOutput, error)
// DeleteKeyPair is a wrapper for ec2.DeleteKeyPairWithContext.
DeleteKeyPair(context.Context, *ec2.DeleteKeyPairInput) (*ec2.DeleteKeyPairOutput, error)
// GetProducts is a wrapper for pricing.GetProducts.
GetProducts(context.Context, *pricing.GetProductsInput) (*pricing.GetProductsOutput, error)
// CreateLaunchTemplate is a wrapper for ec2.CreateLaunchTemplateWithContext
CreateLaunchTemplate(context.Context, *ec2.CreateLaunchTemplateInput) (*ec2.CreateLaunchTemplateOutput, error)
// DeleteLaunchTemplate is a wrapper for ec2.DeleteLaunchTemplateWithContext
DeleteLaunchTemplate(context.Context, *ec2.DeleteLaunchTemplateInput) (*ec2.DeleteLaunchTemplateOutput, error)
// CreateFleet is a wrapper for ec2.CreateFleetWithContext
CreateFleet(context.Context, *ec2.CreateFleetInput) (*ec2.CreateFleetOutput, error)
GetKey(context.Context, *host.Host) (string, error)
SetTags(context.Context, []string, *host.Host) error
GetInstanceBlockDevices(context.Context, *host.Host) ([]*ec2.InstanceBlockDeviceMapping, error)
GetVolumeIDs(context.Context, *host.Host) ([]string, error)
GetPublicDNSName(ctx context.Context, h *host.Host) (string, error)
}
AWSClient is a wrapper for aws-sdk-go so we can use a mock in testing.
type BatchManager ¶
type BatchManager interface {
// GetInstanceStatuses gets the status of a slice of instances.
GetInstanceStatuses(context.Context, []host.Host) ([]CloudStatus, error)
}
BatchManager is an interface for cloud providers that support batch operations.
type CloudHost ¶
CloudHost is a provider-agnostic host object that delegates methods like status checks, ssh options, DNS name checks, termination, etc. to the underlying provider's implementation.
func GetCloudHost ¶
func GetCloudHost(ctx context.Context, host *host.Host, env evergreen.Environment) (*CloudHost, error)
GetCloudHost returns an instance of CloudHost wrapping the given model.Host, giving access to the provider-specific methods to manipulate on the host.
func (*CloudHost) GetDNSName ¶
func (*CloudHost) GetInstanceStatus ¶
func (cloudHost *CloudHost) GetInstanceStatus(ctx context.Context) (CloudStatus, error)
func (*CloudHost) ModifyHost ¶
func (*CloudHost) StartInstance ¶
func (*CloudHost) StopInstance ¶
type CloudStatus ¶
type CloudStatus int
func (CloudStatus) String ¶
func (stat CloudStatus) String() string
type ContainerManager ¶
type ContainerManager interface {
Manager
// GetContainers returns the IDs of all running containers on a specified host
GetContainers(context.Context, *host.Host) ([]string, error)
// RemoveOldestImage removes the earliest created image on a specified host
RemoveOldestImage(ctx context.Context, h *host.Host) error
// CalculateImageSpaceUsage returns the total space taken up by docker images on a specified host
CalculateImageSpaceUsage(ctx context.Context, h *host.Host) (int64, error)
// GetContainerImage downloads a container image onto parent specified by URL, and builds evergreen agent unless otherwise specified
GetContainerImage(ctx context.Context, parent *host.Host, options host.DockerOptions) error
}
func ConvertContainerManager ¶
func ConvertContainerManager(m Manager) (ContainerManager, error)
ConvertContainerManager converts a regular manager into a container manager, errors if type conversion not possible.
type ContainerStatus ¶
type CostCalculator ¶
type CostCalculator interface {
CostForDuration(context.Context, *host.Host, time.Time, time.Time) (float64, error)
}
CostCalculator is an interface for cloud providers that can estimate what a span of time on a given host costs.
type DockerClient ¶
type DockerClient interface {
Init(string) error
EnsureImageDownloaded(context.Context, *host.Host, host.DockerOptions) (string, error)
BuildImageWithAgent(context.Context, *host.Host, string) (string, error)
CreateContainer(context.Context, *host.Host, *host.Host) error
GetContainer(context.Context, *host.Host, string) (*types.ContainerJSON, error)
GetDockerLogs(context.Context, string, *host.Host, types.ContainerLogsOptions) (io.Reader, error)
GetDockerStatus(context.Context, string, *host.Host) (*ContainerStatus, error)
ListContainers(context.Context, *host.Host) ([]types.Container, error)
RemoveImage(context.Context, *host.Host, string) error
RemoveContainer(context.Context, *host.Host, string) error
StartContainer(context.Context, *host.Host, string) error
ListImages(context.Context, *host.Host) ([]types.ImageSummary, error)
}
The DockerClient interface wraps the Docker dockerClient interaction.
func GetDockerClient ¶
func GetDockerClient(s *evergreen.Settings) DockerClient
type EC2FleetManagerOptions ¶
type EC2FleetManagerOptions struct {
// contains filtered or unexported fields
}
type EC2ManagerOptions ¶
type EC2ManagerOptions struct {
// contains filtered or unexported fields
}
EC2ManagerOptions are used to construct a new ec2Manager.
type EC2ProviderSettings ¶
type EC2ProviderSettings struct {
// Region is the EC2 region in which the instance will start. Empty is equivalent to the Evergreen default region.
// This should remain one of the first fields to speed up the birch document iterator.
Region string `mapstructure:"region" json:"region" bson:"region,omitempty"`
// AMI is the AMI ID.
AMI string `mapstructure:"ami" json:"ami,omitempty" bson:"ami,omitempty"`
// If set, overrides key from credentials
AWSKeyID string `mapstructure:"aws_access_key_id" json:"aws_access_key_id,omitempty" bson:"aws_access_key_id,omitempty"`
// If set, overrides secret from credentials
AWSSecret string `mapstructure:"aws_secret_access_key" json:"aws_access_key,omitempty" bson:"aws_secret_access_key,omitempty"`
// InstanceType is the EC2 instance type.
InstanceType string `mapstructure:"instance_type" json:"instance_type,omitempty" bson:"instance_type,omitempty"`
// IPv6 is set to true if the instance should have only an IPv6 address.
IPv6 bool `mapstructure:"ipv6" json:"ipv6,omitempty" bson:"ipv6,omitempty"`
// KeyName is the AWS SSH key name.
KeyName string `mapstructure:"key_name" json:"key_name,omitempty" bson:"key_name,omitempty"`
// MountPoints are the disk mount points for EBS volumes.
MountPoints []MountPoint `mapstructure:"mount_points" json:"mount_points,omitempty" bson:"mount_points,omitempty"`
// SecurityGroupIDs is a list of security group IDs.
SecurityGroupIDs []string `mapstructure:"security_group_ids" json:"security_group_ids,omitempty" bson:"security_group_ids,omitempty"`
// SubnetId is only set in a VPC. Either subnet id or vpc name must set.
SubnetId string `mapstructure:"subnet_id" json:"subnet_id,omitempty" bson:"subnet_id,omitempty"`
// VpcName is used to get the subnet ID automatically. Either subnet id or vpc name must set.
VpcName string `mapstructure:"vpc_name" json:"vpc_name,omitempty" bson:"vpc_name,omitempty"`
// IsVpc is set to true if the security group is part of a VPC.
IsVpc bool `mapstructure:"is_vpc" json:"is_vpc,omitempty" bson:"is_vpc,omitempty"`
// BidPrice is the price we are willing to pay for a spot instance.
BidPrice float64 `mapstructure:"bid_price" json:"bid_price,omitempty" bson:"bid_price,omitempty"`
// UserData specifies configuration that runs after the instance starts.
UserData string `mapstructure:"user_data" json:"user_data,omitempty" bson:"user_data,omitempty"`
// MergeUserDataParts specifies whether multiple user data parts should be
// merged into a single user data part.
// EVG-7760: This is primarily a workaround for a problem with Windows not
// allowing multiple scripts of the same type as part of a multipart user
// data upload.
MergeUserDataParts bool `mapstructure:"merge_user_data_parts" json:"merge_user_data_parts,omitempty" bson:"merge_user_data_parts,omitempty"`
}
EC2ProviderSettings describes properties of managed instances.
func (*EC2ProviderSettings) FromDistroSettings ¶
func (s *EC2ProviderSettings) FromDistroSettings(d distro.Distro, region string) error
region is only provided if we want to filter by region
func (*EC2ProviderSettings) ToDocument ¶
func (s *EC2ProviderSettings) ToDocument() (*birch.Document, error)
func (*EC2ProviderSettings) Validate ¶
func (s *EC2ProviderSettings) Validate() error
Validate that essential EC2ProviderSettings fields are not empty.
type GCESettings ¶
type GCESettings struct {
Project string `mapstructure:"project_id" json:"project_id" bson:"project_id"`
Zone string `mapstructure:"zone" json:"zone" bson:"zone"`
ImageName string `mapstructure:"image_name" json:"image_name" bson:"image_name"`
ImageFamily string `mapstructure:"image_family" json:"image_family" bson:"image_family"`
MachineName string `mapstructure:"instance_type" json:"instance_type" bson:"instance_type"`
NumCPUs int64 `mapstructure:"num_cpus" json:"num_cpus" bson:"num_cpus"`
MemoryMB int64 `mapstructure:"memory_mb" json:"memory_mb" bson:"memory_mb"`
DiskType string `mapstructure:"disk_type" json:"disk_type" bson:"disk_type"`
DiskSizeGB int64 `mapstructure:"disk_size_gb" json:"disk_size_gb" bson:"disk_size_gb"`
// Network tags are used to configure network firewalls.
NetworkTags []string `mapstructure:"network_tags" json:"network_tags" bson:"network_tags"`
// By default, GCE uses project-wide SSH keys. Project-wide keys should be manually
// added to the project metadata. These SSH keys are optional instance-wide keys.
SSHKeys sshKeyGroup `mapstructure:"ssh_keys" json:"ssh_keys" bson:"ssh_keys"`
}
GCESettings specifies the settings used to configure a host instance.
func (*GCESettings) FromDistroSettings ¶
func (opts *GCESettings) FromDistroSettings(d distro.Distro, _ string) error
func (*GCESettings) Validate ¶
func (opts *GCESettings) Validate() error
Validate verifies a set of GCESettings.
type Manager ¶
type Manager interface {
// Returns a pointer to the manager's configuration settings struct
GetSettings() ProviderSettings
// Load credentials or other settings from the config file
Configure(context.Context, *evergreen.Settings) error
// SpawnHost attempts to create a new host by requesting one from the
// provider's API.
SpawnHost(context.Context, *host.Host) (*host.Host, error)
// ModifyHost modifies an existing host
ModifyHost(context.Context, *host.Host, host.HostModifyOptions) error
// Get the status of an instance
GetInstanceStatus(context.Context, *host.Host) (CloudStatus, error)
// SetPortMappings sets the port mappings for the container
SetPortMappings(context.Context, *host.Host, *host.Host) error
// TerminateInstance destroys the host in the underlying provider
TerminateInstance(context.Context, *host.Host, string, string) error
// StopInstance stops an instance.
StopInstance(context.Context, *host.Host, string) error
// StartInstance starts a stopped instance.
StartInstance(context.Context, *host.Host, string) error
// IsUp returns true if the underlying provider has not destroyed the
// host (in other words, if the host "should" be reachable. This does not
// necessarily mean that the host actually *is* reachable via SSH
IsUp(context.Context, *host.Host) (bool, error)
// Called by the hostinit process when the host is actually up. Used
// to set additional provider-specific metadata
OnUp(context.Context, *host.Host) error
// GetDNSName returns the DNS name of a host.
GetDNSName(context.Context, *host.Host) (string, error)
// AttachVolume attaches a volume to a host.
AttachVolume(context.Context, *host.Host, *host.VolumeAttachment) error
// DetachVolume detaches a volume from a host.
DetachVolume(context.Context, *host.Host, string) error
// CreateVolume creates a new volume for attaching to a host.
CreateVolume(context.Context, *host.Volume) (*host.Volume, error)
// DeleteVolume deletes a volume.
DeleteVolume(context.Context, *host.Volume) error
// ModifyVolume modifies an existing volume.
ModifyVolume(context.Context, *host.Volume, *model.VolumeModifyOptions) error
// GetVolumeAttachment gets a volume's attachment
GetVolumeAttachment(context.Context, string) (*host.VolumeAttachment, error)
// CheckInstanceType determines if the given instance type is available in the current region.
CheckInstanceType(context.Context, string) error
// TimeTilNextPayment returns how long there is until the next payment
// is due for a particular host
TimeTilNextPayment(*host.Host) time.Duration
// AddSSHKey adds an SSH key for this manager's hosts. Adding an existing
// key is a no-op.
AddSSHKey(context.Context, evergreen.SSHKeyPair) error
}
Manager is an interface which handles creating new hosts or modifying them via some third-party API.
func GetManager ¶
func GetManager(ctx context.Context, env evergreen.Environment, mgrOpts ManagerOpts) (Manager, error)
GetManager returns an implementation of Manager for the given manager options. It returns an error if the provider name doesn't have a known implementation.
type ManagerOpts ¶
ManagerOpts is a struct containing the fields needed to get a new cloud manager of the proper type.
func GetManagerOptions ¶
func GetManagerOptions(d distro.Distro) (ManagerOpts, error)
GetManagerOptions gets the manager options from the provider settings object for a given provider name.
type MockInstance ¶
type MockInstance struct {
IsUp bool
IsSSHReachable bool
Status CloudStatus
SSHOptions []string
TimeTilNextPayment time.Duration
DNSName string
OnUpRan bool
Tags []host.Tag
Type string
BlockDevices []string
}
MockInstance mocks a running server that Evergreen knows about. It contains fields that can be set to change the response the cloud manager returns when this mock instance is queried for.
type MockProvider ¶
type MockProvider interface {
Len() int
Reset()
Get(string) MockInstance
Set(string, MockInstance)
IterIDs() <-chan string
IterInstances() <-chan MockInstance
}
func GetMockProvider ¶
func GetMockProvider() MockProvider
type MockProviderSettings ¶
type MockProviderSettings struct {
Region string `mapstructure:"region" json:"region" bson:"region,omitempty"`
}
func (*MockProviderSettings) FromDistroSettings ¶
func (_ *MockProviderSettings) FromDistroSettings(_ distro.Distro, _ string) error
func (*MockProviderSettings) Validate ¶
func (_ *MockProviderSettings) Validate() error
type MockVolume ¶
type MountPoint ¶
type MountPoint struct {
VirtualName string `mapstructure:"virtual_name" json:"virtual_name,omitempty" bson:"virtual_name,omitempty"`
DeviceName string `mapstructure:"device_name" json:"device_name,omitempty" bson:"device_name,omitempty"`
Size int64 `mapstructure:"size" json:"size,omitempty" bson:"size,omitempty"`
Iops int64 `mapstructure:"iops" json:"iops,omitempty" bson:"iops,omitempty"`
SnapshotID string `mapstructure:"snapshot_id" json:"snapshot_id,omitempty" bson:"snapshot_id,omitempty"`
VolumeType string `mapstructure:"volume_type" json:"volume_type,omitempty" bson:"volume_type,omitempty"`
}
type ProviderSettings ¶
type ProviderSettings interface {
Validate() error
// If zone is specified, returns the provider settings for that region.
// This is currently only being implemented for EC2 hosts.
FromDistroSettings(distro.Distro, string) error
}
ProviderSettings exposes provider-specific configuration settings for a Manager.
func GetSettings ¶
func GetSettings(provider string) (ProviderSettings, error)
type SpawnOptions ¶
type SpawnOptions struct {
DistroId string
Userdata string
UserName string
PublicKey string
TaskId string
TaskSync bool
Owner *user.DBUser
InstanceTags []host.Tag
InstanceType string
Region string
NoExpiration bool
IsVirtualWorkstation bool
IsCluster bool
HomeVolumeSize int
HomeVolumeID string
}
Options holds the required parameters for spawning a host.
type StaticHost ¶
type StaticHost struct {
Name string `mapstructure:"name" json:"name" bson:"name"`
}
type StaticSettings ¶
type StaticSettings struct {
Hosts []StaticHost `mapstructure:"hosts" json:"hosts" bson:"hosts"`
}
func (*StaticSettings) FromDistroSettings ¶
func (s *StaticSettings) FromDistroSettings(d distro.Distro, _ string) error
func (*StaticSettings) Validate ¶
func (s *StaticSettings) Validate() error
Validate checks that the settings from the configuration are valid.
Source Files
¶
- cloud.go
- cloud_host.go
- cloud_status.go
- docker.go
- docker_client.go
- docker_mock.go
- docker_util.go
- ec2.go
- ec2_client.go
- ec2_fleet.go
- ec2_price.go
- ec2_util.go
- gce.go
- gce_client.go
- gce_costs.go
- gce_util.go
- mock.go
- openstack.go
- openstack_client.go
- openstack_util.go
- spawn.go
- static.go
- userdata.go
- vsphere.go
- vsphere_client.go
- vsphere_util.go