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) 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) ResolveImage(name string) (*ec2.Image, error)
- func (c *MockAWSCloud) Route53() route53iface.Route53API
- func (c *MockAWSCloud) Spotinst() spotinst.Service
- 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{}/* 166 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 ¶ added in v1.10.0
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 ¶ added in v1.11.0
FindELBV2Tag find the value of the tag with the specified key
func FindRegion ¶ added in v1.10.0
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 ¶ added in v1.10.0
func (t *AWSAPITarget) DeleteTags(id string, tags map[string]string) error
func (*AWSAPITarget) ProcessDeletions ¶ added in v1.10.0
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) }
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 ¶ added in v1.10.0
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 ¶ added in v1.10.0
func (l LoggingRetryer) RetryRules(r *request.Request) time.Duration
type MockAWSCloud ¶
type MockAWSCloud struct { MockCloud // contains filtered or unexported fields }
func BuildMockAWSCloud ¶ added in v1.10.0
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 ¶ added in v1.10.0
func (c *MockAWSCloud) CloudFormation() *cloudformation.CloudFormation
func (*MockAWSCloud) CreateELBTags ¶
func (c *MockAWSCloud) CreateELBTags(loadBalancerName string, tags map[string]string) error
func (*MockAWSCloud) CreateELBV2Tags ¶ added in v1.11.0
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 ¶ added in v1.10.0
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 ¶ added in v1.10.0
func (c *MockAWSCloud) DeleteGroup(g *cloudinstances.CloudInstanceGroup) error
func (*MockAWSCloud) DeleteInstance ¶ added in v1.10.0
func (c *MockAWSCloud) DeleteInstance(i *cloudinstances.CloudInstanceGroupMember) error
func (*MockAWSCloud) DeleteTags ¶ added in v1.10.0
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 ¶ added in v1.11.0
func (c *MockAWSCloud) ELBV2() elbv2iface.ELBV2API
func (*MockAWSCloud) FindClusterStatus ¶ added in v1.10.0
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 ¶ added in v1.10.0
func (c *MockAWSCloud) FindVPCInfo(id string) (*fi.VPCInfo, error)
func (*MockAWSCloud) GetCloudGroups ¶ added in v1.10.0
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 ¶ added in v1.11.0
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 ¶ added in v1.11.0
func (c *MockAWSCloud) Spotinst() spotinst.Service
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.Service }
func (*MockCloud) ProviderID ¶
func (c *MockCloud) ProviderID() kops.CloudProviderID
type RegionDelayers ¶ added in v1.10.0
type RegionDelayers struct {
// contains filtered or unexported fields
}
type RequestLogger ¶ added in v1.10.0
type RequestLogger struct {
// contains filtered or unexported fields
}
RequestLogger logs every AWS request