// findInstanceSpec returns an InstanceSpec satisfying the supplied instanceConstraint. func findInstanceSpec( sources []simplestreams.DataSource, stream string, ic *instances.InstanceConstraint) (*instances.InstanceSpec, error) { if ic.Constraints.CpuPower == nil { ic.Constraints.CpuPower = instances.CpuPower(defaultCpuPower) } ec2Region := allRegions[ic.Region] imageConstraint := imagemetadata.NewImageConstraint(simplestreams.LookupParams{ CloudSpec: simplestreams.CloudSpec{ic.Region, ec2Region.EC2Endpoint}, Series: []string{ic.Series}, Arches: ic.Arches, Stream: stream, }) matchingImages, _, err := imagemetadata.Fetch( sources, simplestreams.DefaultIndexPath, imageConstraint, signedImageDataOnly) if err != nil { return nil, err } if len(matchingImages) == 0 { logger.Warningf("no matching image meta data for constraints: %v", ic) } suitableImages := filterImages(matchingImages) images := instances.ImageMetadataToImages(suitableImages) // Make a copy of the known EC2 instance types, filling in the cost for the specified region. regionCosts := allRegionCosts[ic.Region] if len(regionCosts) == 0 && len(allRegionCosts) > 0 { return nil, fmt.Errorf("no instance types found in %s", ic.Region) } var itypesWithCosts []instances.InstanceType for _, itype := range allInstanceTypes { cost, ok := regionCosts[itype.Name] if !ok { continue } itWithCost := itype itWithCost.Cost = cost itypesWithCosts = append(itypesWithCosts, itWithCost) } return instances.FindInstanceSpec(images, ic, itypesWithCosts) }
both = []string{arch.AMD64, arch.I386} ) // allRegions is defined here to allow tests to override the content. var allRegions = aws.Regions // allInstanceTypes holds the relevant attributes of every known // instance type. // Note that while the EC2 root disk default is 8G, constraints on disk // for amazon will simply cause the root disk to grow to match the constraint var allInstanceTypes = []instances.InstanceType{ { // General purpose, 1st generation. Name: "m1.small", Arches: both, CpuCores: 1, CpuPower: instances.CpuPower(100), Mem: 1740, VirtType: ¶virtual, }, { Name: "m1.medium", Arches: both, CpuCores: 1, CpuPower: instances.CpuPower(200), Mem: 3840, VirtType: ¶virtual, }, { Name: "m1.large", Arches: amd64, CpuCores: 2, CpuPower: instances.CpuPower(400), Mem: 7680,