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{}/* 166 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) 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.Service
                              
                              	// 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
                              
                              	// 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) 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.Service

                                    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.Service
                                    }

                                    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