awsup

package
v1.15.1 Latest Latest
Warning

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

Go to latest
Published: Feb 17, 2020 License: Apache-2.0 Imports: 38 Imported by: 0

Documentation

Index

Constants

View Source
const (
	WellKnownAccountKopeio             = "383156758163"
	WellKnownAccountRedhat             = "309956199498"
	WellKnownAccountCoreOS             = "595879546273"
	WellKnownAccountAmazonSystemLinux2 = "137112412989"
	WellKnownAccountUbuntu             = "099720109477"
)
View Source
const BurstableCreditsToECUS float32 = 3.0 / 60.0

I believe one vCPU ~ 3 ECUS, and 60 CPU credits would be needed to use one vCPU for an hour

View Source
const ClientMaxRetries = 13

By default, aws-sdk-go only retries 3 times, which doesn't give much time for exponential backoff to work for serious issues. At 13 retries, we'll try a given request for up to ~6m with exponential backoff along the way.

View Source
const CreateTagsLogInterval = 10 // this is in "retry intervals"
View Source
const CreateTagsMaxAttempts = 120
View Source
const CreateTagsRetryInterval = 2 * time.Second
View Source
const DeleteTagsLogInterval = 10 // this is in "retry intervals"
View Source
const DeleteTagsMaxAttempts = 120
View Source
const DeleteTagsRetryInterval = 2 * time.Second
View Source
const DescribeTagsLogInterval = 10 // this is in "retry intervals"
View Source
const DescribeTagsMaxAttempts = 120
View Source
const DescribeTagsRetryInterval = 2 * time.Second
View Source
const TagClusterName = "KubernetesCluster"
View Source
const TagNameClusterOwnershipPrefix = "kubernetes.io/cluster/"

TagNameClusterOwnershipPrefix is the AWS tag used for ownership

View Source
const TagNameEtcdClusterPrefix = "k8s.io/etcd/"
View Source
const TagNameKopsRole = "kubernetes.io/kops/role"

TagNameKopsRole is the AWS tag used to identify the role an object plays for a cluster

View Source
const TagNameRolePrefix = "k8s.io/role/"
View Source
const TagRoleMaster = "master"

Variables

View Source
var MachineTypes []AWSMachineTypeInfo = []AWSMachineTypeInfo{}/* 214 elements not displayed */

Functions

func AWSErrorCode

func AWSErrorCode(err error) string

AWSErrorCode returns the aws error code, if it is an awserr.Error, otherwise ""

func AWSErrorMessage

func AWSErrorMessage(err error) string

AWSErrorMessage returns the aws error message, if it is an awserr.Error, otherwise ""

func FindASGTag

func FindASGTag(tags []*autoscaling.TagDescription, key string) (string, bool)

FindASGTag find the value of the tag with the specified key

func FindAutoscalingGroups

func FindAutoscalingGroups(c AWSCloud, tags map[string]string) ([]*autoscaling.Group, error)

FindAutoscalingGroups finds autoscaling groups matching the specified tags This isn't entirely trivial because autoscaling doesn't let us filter with as much precision as we would like

func FindEC2Tag

func FindEC2Tag(tags []*ec2.Tag, key string) (string, bool)

FindEC2Tag find the value of the tag with the specified key

func FindELBTag

func FindELBTag(tags []*elb.Tag, key string) (string, bool)

FindELBTag find the value of the tag with the specified key

func FindELBV2Tag

func FindELBV2Tag(tags []*elbv2.Tag, key string) (string, bool)

FindELBV2Tag find the value of the tag with the specified key

func FindRegion

func FindRegion(cluster *kops.Cluster) (string, error)

FindRegion determines the region from the zones specified in the cluster

func NewEC2Filter

func NewEC2Filter(name string, values ...string) *ec2.Filter

func ValidateRegion

func ValidateRegion(region string) error

ValidateRegion checks that an AWS region name is valid

func ValidateZones

func ValidateZones(zones []string, cloud AWSCloud) error

ValidateZones checks that every zone in the sliced passed is recognized

Types

type AWSAPITarget

type AWSAPITarget struct {
	Cloud AWSCloud
}

func NewAWSAPITarget

func NewAWSAPITarget(cloud AWSCloud) *AWSAPITarget

func (*AWSAPITarget) AddAWSTags

func (t *AWSAPITarget) AddAWSTags(id string, expected map[string]string) error

func (*AWSAPITarget) AddELBTags

func (t *AWSAPITarget) AddELBTags(loadBalancerName string, expected map[string]string) error

func (*AWSAPITarget) DeleteTags

func (t *AWSAPITarget) DeleteTags(id string, tags map[string]string) error

func (*AWSAPITarget) Finish

func (t *AWSAPITarget) Finish(taskMap map[string]fi.Task) error

func (*AWSAPITarget) ProcessDeletions

func (t *AWSAPITarget) ProcessDeletions() bool

func (*AWSAPITarget) RemoveELBTags

func (t *AWSAPITarget) RemoveELBTags(loadBalancerName string, expected map[string]string) error

func (*AWSAPITarget) WaitForInstanceRunning

func (t *AWSAPITarget) WaitForInstanceRunning(instanceID string) error

type AWSCloud

type AWSCloud interface {
	fi.Cloud

	Region() string

	CloudFormation() *cloudformation.CloudFormation
	EC2() ec2iface.EC2API
	IAM() iamiface.IAMAPI
	ELB() elbiface.ELBAPI
	ELBV2() elbv2iface.ELBV2API
	Autoscaling() autoscalingiface.AutoScalingAPI
	Route53() route53iface.Route53API
	Spotinst() spotinst.Cloud

	// TODO: Document and rationalize these tags/filters methods
	AddTags(name *string, tags map[string]string)
	BuildFilters(name *string) []*ec2.Filter
	BuildTags(name *string) map[string]string
	Tags() map[string]string

	// GetTags will fetch the tags for the specified resource, retrying (up to MaxDescribeTagsAttempts) if it hits an eventual-consistency type error
	GetTags(resourceId string) (map[string]string, error)

	// CreateTags will add tags to the specified resource, retrying up to MaxCreateTagsAttempts times if it hits an eventual-consistency type error
	CreateTags(resourceId string, tags map[string]string) error

	AddAWSTags(id string, expected map[string]string) error
	GetELBTags(loadBalancerName string) (map[string]string, error)

	// CreateELBTags will add tags to the specified loadBalancer, retrying up to MaxCreateTagsAttempts times if it hits an eventual-consistency type error
	CreateELBTags(loadBalancerName string, tags map[string]string) error
	// RemoveELBTags will remove tags from the specified loadBalancer, retrying up to MaxCreateTagsAttempts times if it hits an eventual-consistency type error
	RemoveELBTags(loadBalancerName string, tags map[string]string) error

	// DeleteTags will delete tags from the specified resource, retrying up to MaxCreateTagsAttempts times if it hits an eventual-consistency type error
	DeleteTags(id string, tags map[string]string) error

	// DescribeInstance is a helper that queries for the specified instance by id
	DescribeInstance(instanceID string) (*ec2.Instance, error)

	// DescribeVPC is a helper that queries for the specified vpc by id
	DescribeVPC(vpcID string) (*ec2.Vpc, error)

	DescribeAvailabilityZones() ([]*ec2.AvailabilityZone, error)

	// ResolveImage finds an AMI image based on the given name.
	// The name can be one of:
	// `ami-...` in which case it is presumed to be an id
	// owner/name in which case we find the image with the specified name, owned by owner
	// name in which case we find the image with the specified name, with the current owner
	ResolveImage(name string) (*ec2.Image, error)

	// WithTags created a copy of AWSCloud with the specified default-tags bound
	WithTags(tags map[string]string) AWSCloud

	// DefaultInstanceType determines a suitable instance type for the specified instance group
	DefaultInstanceType(cluster *kops.Cluster, ig *kops.InstanceGroup) (string, error)

	// FindClusterStatus gets the status of the cluster as it exists in AWS, inferred from volumes
	FindClusterStatus(cluster *kops.Cluster) (*kops.ClusterStatus, error)
}

func NewAWSCloud

func NewAWSCloud(region string, tags map[string]string) (AWSCloud, error)

type AWSMachineTypeInfo

type AWSMachineTypeInfo struct {
	Name              string
	MemoryGB          float32
	ECU               float32
	Cores             int
	EphemeralDisks    []int
	Burstable         bool
	GPU               bool
	MaxPods           int
	InstanceENIs      int
	InstanceIPsPerENI int
}

func GetMachineTypeInfo

func GetMachineTypeInfo(machineType string) (*AWSMachineTypeInfo, error)

func (*AWSMachineTypeInfo) EphemeralDevices

func (m *AWSMachineTypeInfo) EphemeralDevices() []*EphemeralDevice

type EphemeralDevice

type EphemeralDevice struct {
	DeviceName  string
	VirtualName string
	SizeGB      int
}

type LoggingRetryer

type LoggingRetryer struct {
	client.DefaultRetryer
}

LoggingRetryer adds some logging when we are retrying, so we have some idea what is happening Right now it is very basic - e.g. it only logs when we retry (so doesn't log when we fail due to too many retries)

func (LoggingRetryer) RetryRules

func (l LoggingRetryer) RetryRules(r *request.Request) time.Duration

type MockAWSCloud

type MockAWSCloud struct {
	MockCloud
	// contains filtered or unexported fields
}

func BuildMockAWSCloud

func BuildMockAWSCloud(region string, zoneLetters string) *MockAWSCloud

func InstallMockAWSCloud

func InstallMockAWSCloud(region string, zoneLetters string) *MockAWSCloud

func (*MockAWSCloud) AddAWSTags

func (c *MockAWSCloud) AddAWSTags(id string, expected map[string]string) error

func (*MockAWSCloud) AddTags

func (c *MockAWSCloud) AddTags(name *string, tags map[string]string)

func (*MockAWSCloud) Autoscaling

func (c *MockAWSCloud) Autoscaling() autoscalingiface.AutoScalingAPI

func (*MockAWSCloud) BuildFilters

func (c *MockAWSCloud) BuildFilters(name *string) []*ec2.Filter

func (*MockAWSCloud) BuildTags

func (c *MockAWSCloud) BuildTags(name *string) map[string]string

func (*MockAWSCloud) CloudFormation

func (c *MockAWSCloud) CloudFormation() *cloudformation.CloudFormation

func (*MockAWSCloud) CreateELBTags

func (c *MockAWSCloud) CreateELBTags(loadBalancerName string, tags map[string]string) error

func (*MockAWSCloud) CreateELBV2Tags

func (c *MockAWSCloud) CreateELBV2Tags(ResourceArn string, tags map[string]string) error

func (*MockAWSCloud) CreateTags

func (c *MockAWSCloud) CreateTags(resourceId string, tags map[string]string) error

func (*MockAWSCloud) DefaultInstanceType

func (c *MockAWSCloud) DefaultInstanceType(cluster *kops.Cluster, ig *kops.InstanceGroup) (string, error)

DefaultInstanceType determines an instance type for the specified cluster & instance group

func (*MockAWSCloud) DeleteGroup

func (*MockAWSCloud) DeleteInstance

func (*MockAWSCloud) DeleteTags

func (c *MockAWSCloud) DeleteTags(id string, tags map[string]string) error

func (*MockAWSCloud) DescribeAvailabilityZones

func (c *MockAWSCloud) DescribeAvailabilityZones() ([]*ec2.AvailabilityZone, error)

func (*MockAWSCloud) DescribeInstance

func (c *MockAWSCloud) DescribeInstance(instanceID string) (*ec2.Instance, error)

func (*MockAWSCloud) DescribeVPC

func (c *MockAWSCloud) DescribeVPC(vpcID string) (*ec2.Vpc, error)

func (*MockAWSCloud) EC2

func (c *MockAWSCloud) EC2() ec2iface.EC2API

func (*MockAWSCloud) ELB

func (c *MockAWSCloud) ELB() elbiface.ELBAPI

func (*MockAWSCloud) ELBV2

func (c *MockAWSCloud) ELBV2() elbv2iface.ELBV2API

func (*MockAWSCloud) FindClusterStatus

func (c *MockAWSCloud) FindClusterStatus(cluster *kops.Cluster) (*kops.ClusterStatus, error)

FindEtcdStatus discovers the status of the cluster, by looking for the tagged etcd volumes

func (*MockAWSCloud) FindVPCInfo

func (c *MockAWSCloud) FindVPCInfo(id string) (*fi.VPCInfo, error)

func (*MockAWSCloud) GetCloudGroups

func (c *MockAWSCloud) GetCloudGroups(cluster *kops.Cluster, instancegroups []*kops.InstanceGroup, warnUnmatched bool, nodes []v1.Node) (map[string]*cloudinstances.CloudInstanceGroup, error)

func (*MockAWSCloud) GetELBTags

func (c *MockAWSCloud) GetELBTags(loadBalancerName string) (map[string]string, error)

func (*MockAWSCloud) GetELBV2Tags

func (c *MockAWSCloud) GetELBV2Tags(ResourceArn string) (map[string]string, error)

func (*MockAWSCloud) GetTags

func (c *MockAWSCloud) GetTags(resourceID string) (map[string]string, error)

func (*MockAWSCloud) IAM

func (c *MockAWSCloud) IAM() iamiface.IAMAPI

func (*MockAWSCloud) Region

func (c *MockAWSCloud) Region() string

func (*MockAWSCloud) RemoveELBTags

func (c *MockAWSCloud) RemoveELBTags(loadBalancerName string, tags map[string]string) error

func (*MockAWSCloud) ResolveImage

func (c *MockAWSCloud) ResolveImage(name string) (*ec2.Image, error)

func (*MockAWSCloud) Route53

func (c *MockAWSCloud) Route53() route53iface.Route53API

func (*MockAWSCloud) Spotinst

func (c *MockAWSCloud) Spotinst() spotinst.Cloud

func (*MockAWSCloud) Tags

func (c *MockAWSCloud) Tags() map[string]string

func (*MockAWSCloud) WithTags

func (c *MockAWSCloud) WithTags(tags map[string]string) AWSCloud

type MockCloud

type MockCloud struct {
	MockAutoscaling    autoscalingiface.AutoScalingAPI
	MockCloudFormation *cloudformation.CloudFormation
	MockEC2            ec2iface.EC2API
	MockIAM            iamiface.IAMAPI
	MockRoute53        route53iface.Route53API
	MockELB            elbiface.ELBAPI
	MockELBV2          elbv2iface.ELBV2API
	MockSpotinst       spotinst.Cloud
}

func (*MockCloud) DNS

func (c *MockCloud) DNS() (dnsprovider.Interface, error)

func (*MockCloud) ProviderID

func (c *MockCloud) ProviderID() kops.CloudProviderID

type RegionDelayers

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

type RequestLogger

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

RequestLogger logs every AWS request

Jump to

Keyboard shortcuts

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