Documentation ¶
Index ¶
- Constants
- Variables
- func AWSErrorCode(err error) string
- func AWSErrorMessage(err error) string
- func FindASGTag(tags []*autoscaling.TagDescription, key string) (string, bool)
- func FindAutoscalingGroups(c AWSCloud, tags map[string]string) ([]*autoscaling.Group, error)
- func FindEC2Tag(tags []*ec2.Tag, key string) (string, bool)
- func FindELBTag(tags []*elb.Tag, key string) (string, bool)
- func FindELBV2Tag(tags []*elbv2.Tag, key string) (string, bool)
- func FindRegion(cluster *kops.Cluster) (string, error)
- func NewEC2Filter(name string, values ...string) *ec2.Filter
- func ValidateRegion(region string) error
- func ValidateZones(zones []string, cloud AWSCloud) error
- type AWSAPITarget
- func (t *AWSAPITarget) AddAWSTags(id string, expected map[string]string) error
- func (t *AWSAPITarget) AddELBTags(loadBalancerName string, expected map[string]string) error
- func (t *AWSAPITarget) DeleteTags(id string, tags map[string]string) error
- func (t *AWSAPITarget) Finish(taskMap map[string]fi.Task) error
- func (t *AWSAPITarget) ProcessDeletions() bool
- func (t *AWSAPITarget) RemoveELBTags(loadBalancerName string, expected map[string]string) error
- func (t *AWSAPITarget) WaitForInstanceRunning(instanceID string) error
- type AWSCloud
- type AWSMachineTypeInfo
- type EphemeralDevice
- type LoggingRetryer
- type MockAWSCloud
- func (c *MockAWSCloud) AddAWSTags(id string, expected map[string]string) error
- func (c *MockAWSCloud) AddTags(name *string, tags map[string]string)
- func (c *MockAWSCloud) Autoscaling() autoscalingiface.AutoScalingAPI
- func (c *MockAWSCloud) BuildFilters(name *string) []*ec2.Filter
- func (c *MockAWSCloud) BuildTags(name *string) map[string]string
- func (c *MockAWSCloud) CloudFormation() *cloudformation.CloudFormation
- func (c *MockAWSCloud) CreateELBTags(loadBalancerName string, tags map[string]string) error
- func (c *MockAWSCloud) CreateELBV2Tags(ResourceArn string, tags map[string]string) error
- func (c *MockAWSCloud) CreateTags(resourceId string, tags map[string]string) error
- func (c *MockAWSCloud) DefaultInstanceType(cluster *kops.Cluster, ig *kops.InstanceGroup) (string, error)
- func (c *MockAWSCloud) DeleteGroup(g *cloudinstances.CloudInstanceGroup) error
- func (c *MockAWSCloud) DeleteInstance(i *cloudinstances.CloudInstanceGroupMember) error
- func (c *MockAWSCloud) DeleteTags(id string, tags map[string]string) error
- func (c *MockAWSCloud) DescribeAvailabilityZones() ([]*ec2.AvailabilityZone, error)
- func (c *MockAWSCloud) DescribeInstance(instanceID string) (*ec2.Instance, error)
- func (c *MockAWSCloud) DescribeVPC(vpcID string) (*ec2.Vpc, error)
- func (c *MockAWSCloud) EC2() ec2iface.EC2API
- func (c *MockAWSCloud) ELB() elbiface.ELBAPI
- func (c *MockAWSCloud) ELBV2() elbv2iface.ELBV2API
- func (c *MockAWSCloud) FindClusterStatus(cluster *kops.Cluster) (*kops.ClusterStatus, error)
- func (c *MockAWSCloud) FindVPCInfo(id string) (*fi.VPCInfo, error)
- func (c *MockAWSCloud) GetCloudGroups(cluster *kops.Cluster, instancegroups []*kops.InstanceGroup, ...) (map[string]*cloudinstances.CloudInstanceGroup, error)
- func (c *MockAWSCloud) GetELBTags(loadBalancerName string) (map[string]string, error)
- func (c *MockAWSCloud) GetELBV2Tags(ResourceArn string) (map[string]string, error)
- func (c *MockAWSCloud) GetTags(resourceID string) (map[string]string, error)
- func (c *MockAWSCloud) IAM() iamiface.IAMAPI
- func (c *MockAWSCloud) Region() string
- func (c *MockAWSCloud) RemoveELBTags(loadBalancerName string, tags map[string]string) error
- func (c *MockAWSCloud) ResolveImage(name string) (*ec2.Image, error)
- func (c *MockAWSCloud) Route53() route53iface.Route53API
- func (c *MockAWSCloud) Spotinst() spotinst.Cloud
- func (c *MockAWSCloud) Tags() map[string]string
- func (c *MockAWSCloud) WithTags(tags map[string]string) AWSCloud
- type MockCloud
- type RegionDelayers
- type RequestLogger
Constants ¶
const ( WellKnownAccountKopeio = "383156758163" WellKnownAccountRedhat = "309956199498" WellKnownAccountCoreOS = "595879546273" WellKnownAccountAmazonSystemLinux2 = "137112412989" WellKnownAccountUbuntu = "099720109477" )
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
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.
const CreateTagsLogInterval = 10 // this is in "retry intervals"
const CreateTagsMaxAttempts = 120
const CreateTagsRetryInterval = 2 * time.Second
const DeleteTagsLogInterval = 10 // this is in "retry intervals"
const DeleteTagsMaxAttempts = 120
const DeleteTagsRetryInterval = 2 * time.Second
const DescribeTagsLogInterval = 10 // this is in "retry intervals"
const DescribeTagsMaxAttempts = 120
const DescribeTagsRetryInterval = 2 * time.Second
const TagClusterName = "KubernetesCluster"
const TagNameClusterOwnershipPrefix = "kubernetes.io/cluster/"
TagNameClusterOwnershipPrefix is the AWS tag used for ownership
const TagNameEtcdClusterPrefix = "k8s.io/etcd/"
const TagNameKopsRole = "kubernetes.io/kops/role"
TagNameKopsRole is the AWS tag used to identify the role an object plays for a cluster
const TagNameRolePrefix = "k8s.io/role/"
const TagRoleMaster = "master"
Variables ¶
var MachineTypes []AWSMachineTypeInfo = []AWSMachineTypeInfo{}/* 214 elements not displayed */
Functions ¶
func AWSErrorCode ¶
AWSErrorCode returns the aws error code, if it is an awserr.Error, otherwise ""
func AWSErrorMessage ¶
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 ¶
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 ¶
FindEC2Tag find the value of the tag with the specified key
func FindELBTag ¶
FindELBTag find the value of the tag with the specified key
func FindELBV2Tag ¶
FindELBV2Tag find the value of the tag with the specified key
func FindRegion ¶
FindRegion determines the region from the zones specified in the cluster
func ValidateRegion ¶
ValidateRegion checks that an AWS region name is valid
func ValidateZones ¶
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) 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) }
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 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) Autoscaling ¶
func (c *MockAWSCloud) Autoscaling() autoscalingiface.AutoScalingAPI
func (*MockAWSCloud) BuildFilters ¶
func (c *MockAWSCloud) BuildFilters(name *string) []*ec2.Filter
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 (c *MockAWSCloud) DeleteGroup(g *cloudinstances.CloudInstanceGroup) error
func (*MockAWSCloud) DeleteInstance ¶
func (c *MockAWSCloud) DeleteInstance(i *cloudinstances.CloudInstanceGroupMember) error
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
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) 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