awsup

package
v1.4.1 Latest Latest
Warning

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

Go to latest
Published: Oct 10, 2016 License: Apache-2.0 Imports: 16 Imported by: 0

Documentation

Index

Constants

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 MaxCreateTagsAttempts = 60
View Source
const MaxDescribeTagsAttempts = 60
View Source
const TagClusterName = "KubernetesCluster"

Variables

View Source
var MachineTypes []AWSMachineTypeInfo = []AWSMachineTypeInfo{

	{
		Name:           "t2.nano",
		MemoryGB:       0.5,
		ECU:            3 * BurstableCreditsToECUS,
		Cores:          1,
		EphemeralDisks: nil,
		Burstable:      true,
	},
	{
		Name:           "t2.micro",
		MemoryGB:       1,
		ECU:            6 * BurstableCreditsToECUS,
		Cores:          1,
		EphemeralDisks: nil,
		Burstable:      true,
	},
	{
		Name:           "t2.small",
		MemoryGB:       2,
		ECU:            12 * BurstableCreditsToECUS,
		Cores:          1,
		EphemeralDisks: nil,
		Burstable:      true,
	},
	{
		Name:           "t2.medium",
		MemoryGB:       4,
		ECU:            24 * BurstableCreditsToECUS,
		Cores:          2,
		EphemeralDisks: nil,
		Burstable:      true,
	},
	{
		Name:           "t2.large",
		MemoryGB:       8,
		ECU:            36 * BurstableCreditsToECUS,
		Cores:          2,
		EphemeralDisks: nil,
		Burstable:      true,
	},

	{
		Name:           "m3.medium",
		MemoryGB:       3.75,
		ECU:            3,
		Cores:          1,
		EphemeralDisks: []int{4},
	},
	{
		Name:           "m3.large",
		MemoryGB:       7.5,
		ECU:            6.5,
		Cores:          2,
		EphemeralDisks: []int{32},
	},
	{
		Name:           "m3.xlarge",
		MemoryGB:       15,
		ECU:            13,
		Cores:          4,
		EphemeralDisks: []int{40, 40},
	},
	{
		Name:           "m3.2xlarge",
		MemoryGB:       30,
		ECU:            26,
		Cores:          8,
		EphemeralDisks: []int{80, 80},
	},

	{
		Name:           "m4.large",
		MemoryGB:       8,
		ECU:            6.5,
		Cores:          2,
		EphemeralDisks: nil,
	},
	{
		Name:           "m4.xlarge",
		MemoryGB:       16,
		ECU:            13,
		Cores:          4,
		EphemeralDisks: nil,
	},
	{
		Name:           "m4.2xlarge",
		MemoryGB:       32,
		ECU:            26,
		Cores:          8,
		EphemeralDisks: nil,
	},
	{
		Name:           "m4.4xlarge",
		MemoryGB:       64,
		ECU:            53.5,
		Cores:          16,
		EphemeralDisks: nil,
	},
	{
		Name:           "m4.10xlarge",
		MemoryGB:       160,
		ECU:            124.5,
		Cores:          40,
		EphemeralDisks: nil,
	},

	{
		Name:           "c3.large",
		MemoryGB:       3.75,
		ECU:            7,
		Cores:          2,
		EphemeralDisks: []int{16, 16},
	},
	{
		Name:           "c3.xlarge",
		MemoryGB:       7.5,
		ECU:            14,
		Cores:          4,
		EphemeralDisks: []int{40, 40},
	},
	{
		Name:           "c3.2xlarge",
		MemoryGB:       15,
		ECU:            28,
		Cores:          8,
		EphemeralDisks: []int{80, 80},
	},
	{
		Name:           "c3.4xlarge",
		MemoryGB:       30,
		ECU:            55,
		Cores:          16,
		EphemeralDisks: []int{160, 160},
	},
	{
		Name:           "c3.8xlarge",
		MemoryGB:       60,
		ECU:            108,
		Cores:          32,
		EphemeralDisks: []int{320, 320},
	},

	{
		Name:           "c4.large",
		MemoryGB:       3.75,
		ECU:            8,
		Cores:          2,
		EphemeralDisks: nil,
	},
	{
		Name:           "c4.xlarge",
		MemoryGB:       7.5,
		ECU:            16,
		Cores:          4,
		EphemeralDisks: nil,
	},
	{
		Name:           "c4.2xlarge",
		MemoryGB:       15,
		ECU:            31,
		Cores:          8,
		EphemeralDisks: nil,
	},
	{
		Name:           "c4.4xlarge",
		MemoryGB:       30,
		ECU:            62,
		Cores:          16,
		EphemeralDisks: nil,
	},
	{
		Name:           "c4.8xlarge",
		MemoryGB:       60,
		ECU:            132,
		Cores:          32,
		EphemeralDisks: nil,
	},

	{
		Name:           "cc2.8xlarge",
		MemoryGB:       60.5,
		ECU:            88,
		Cores:          32,
		EphemeralDisks: []int{840, 840, 840, 840},
	},

	{
		Name:           "cg1.4xlarge",
		MemoryGB:       22.5,
		ECU:            33.5,
		Cores:          16,
		EphemeralDisks: []int{840, 840},
	},

	{
		Name:           "cr1.8xlarge",
		MemoryGB:       244.0,
		ECU:            88,
		Cores:          32,
		EphemeralDisks: []int{120, 120},
	},

	{
		Name:           "d2.xlarge",
		MemoryGB:       30.5,
		ECU:            14,
		Cores:          4,
		EphemeralDisks: []int{2000, 2000, 2000},
	},
	{
		Name:           "d2.2xlarge",
		MemoryGB:       61.0,
		ECU:            28,
		Cores:          8,
		EphemeralDisks: []int{2000, 2000, 2000, 2000, 2000, 2000},
	},
	{
		Name:     "d2.4xlarge",
		MemoryGB: 122.0,
		ECU:      56,
		Cores:    16,
		EphemeralDisks: []int{
			2000, 2000, 2000, 2000, 2000, 2000,
			2000, 2000, 2000, 2000, 2000, 2000,
		},
	},
	{
		Name:     "d2.8xlarge",
		MemoryGB: 244.0,
		ECU:      116,
		Cores:    36,
		EphemeralDisks: []int{
			2000, 2000, 2000, 2000, 2000, 2000,
			2000, 2000, 2000, 2000, 2000, 2000,
			2000, 2000, 2000, 2000, 2000, 2000,
			2000, 2000, 2000, 2000, 2000, 2000,
		},
	},

	{
		Name:           "g2.2xlarge",
		MemoryGB:       15,
		ECU:            26,
		Cores:          8,
		EphemeralDisks: []int{60},
	},
	{
		Name:           "g2.8xlarge",
		MemoryGB:       60,
		ECU:            104,
		Cores:          32,
		EphemeralDisks: []int{120, 120},
	},

	{
		Name:           "hi1.4xlarge",
		MemoryGB:       60.5,
		ECU:            35,
		Cores:          16,
		EphemeralDisks: []int{1024, 1024},
	},

	{
		Name:           "i2.xlarge",
		MemoryGB:       30.5,
		ECU:            14,
		Cores:          4,
		EphemeralDisks: []int{800},
	},
	{
		Name:           "i2.2xlarge",
		MemoryGB:       61,
		ECU:            27,
		Cores:          8,
		EphemeralDisks: []int{800, 800},
	},
	{
		Name:           "i2.4xlarge",
		MemoryGB:       122,
		ECU:            53,
		Cores:          16,
		EphemeralDisks: []int{800, 800, 800, 800},
	},
	{
		Name:           "i2.8xlarge",
		MemoryGB:       244,
		ECU:            104,
		Cores:          32,
		EphemeralDisks: []int{800, 800, 800, 800, 800, 800, 800, 800},
	},

	{
		Name:           "r3.large",
		MemoryGB:       15.25,
		ECU:            6.5,
		Cores:          2,
		EphemeralDisks: []int{32},
	},
	{
		Name:           "r3.xlarge",
		MemoryGB:       30.5,
		ECU:            13,
		Cores:          4,
		EphemeralDisks: []int{80},
	},
	{
		Name:           "r3.2xlarge",
		MemoryGB:       61,
		ECU:            26,
		Cores:          8,
		EphemeralDisks: []int{160},
	},
	{
		Name:           "r3.4xlarge",
		MemoryGB:       122,
		ECU:            52,
		Cores:          16,
		EphemeralDisks: []int{320},
	},
	{
		Name:           "r3.8xlarge",
		MemoryGB:       244,
		ECU:            104,
		Cores:          32,
		EphemeralDisks: []int{320, 320},
	},

	{
		Name:           "x1.32xlarge",
		MemoryGB:       1952,
		ECU:            349,
		Cores:          128,
		EphemeralDisks: []int{1920, 1920},
	},
}

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 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 InstallMockAWSCloud

func InstallMockAWSCloud(region string, zoneLetters string)

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) Finish

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

func (*AWSAPITarget) WaitForInstanceRunning

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

type AWSCloud

type AWSCloud interface {
	fi.Cloud

	Region() string

	EC2() *ec2.EC2
	IAM() *iam.IAM
	ELB() *elb.ELB
	Autoscaling() *autoscaling.AutoScaling
	Route53() *route53.Route53

	// 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

	// 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
}

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
}

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 MockAWSCloud

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

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() *autoscaling.AutoScaling

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) CreateELBTags

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

func (*MockAWSCloud) CreateTags

func (c *MockAWSCloud) CreateTags(resourceId 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() *ec2.EC2

func (*MockAWSCloud) ELB

func (c *MockAWSCloud) ELB() *elb.ELB

func (*MockAWSCloud) GetELBTags

func (c *MockAWSCloud) GetELBTags(loadBalancerName 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() *iam.IAM

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() *route53.Route53

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 {
}

func (*MockCloud) DNS

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

func (*MockCloud) FindDNSHostedZone

func (c *MockCloud) FindDNSHostedZone(dnsName string) (string, error)

func (*MockCloud) ProviderID

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

Jump to

Keyboard shortcuts

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