e693d15a5b
Previously, Nomad was using a hand-made lookup table for looking up EC2 CPU performance characteristics (core count + speed = ticks). This data was incomplete and incorrect depending on region. The AWS API has the correct data but requires API keys to use (i.e. should not be queried directly from Nomad). This change introduces a lookup table generated by a small command line tool in Nomad's tools module which uses the Amazon AWS API. Running the tool requires AWS_* environment variables set. $ # in nomad/tools/cpuinfo $ go run . Going forward, Nomad can incorporate regeneration of the lookup table somewhere in the CI pipeline so that we remain up-to-date on the latest offerings from EC2. Fixes #7830
62 lines
1.5 KiB
Go
62 lines
1.5 KiB
Go
// Command ec2info provides a tool for generating a CPU performance lookup
|
|
// table indexed by EC2 instance types.
|
|
//
|
|
// By default the generated file will overwrite `env_aws_cpu.go` in Nomad's
|
|
// client/fingerprint package, when run from this directory.
|
|
//
|
|
// Requires AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN.
|
|
//
|
|
// Options
|
|
// --package : configure package name of generated output file
|
|
// --region : configure initial region from which to lookup all regions
|
|
// --outfile : configure filepath of generated output file
|
|
// --verbose : print log messages while running
|
|
//
|
|
// Usage
|
|
// $ go run .
|
|
package main
|
|
|
|
import (
|
|
"flag"
|
|
"log"
|
|
)
|
|
|
|
func args() (string, string, string, bool) {
|
|
pkg := flag.String("package", "fingerprint", "generate package name")
|
|
region := flag.String("region", "us-west-1", "initial region for listing regions")
|
|
outfile := flag.String("output", "../../client/fingerprint/env_aws_cpu.go", "output filepath")
|
|
verbose := flag.Bool("verbose", true, "print extra information while running")
|
|
flag.Parse()
|
|
return *pkg, *region, *outfile, *verbose
|
|
}
|
|
|
|
func check(err error) {
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
pkg, region, output, verbose := args()
|
|
|
|
client, err := clientForRegion(region)
|
|
check(err)
|
|
|
|
regions, err := getRegions(client)
|
|
check(err)
|
|
|
|
data, err := getData(regions, verbose)
|
|
check(err)
|
|
|
|
flat := flatten(data)
|
|
|
|
f, err := open(output)
|
|
check(err)
|
|
defer func() {
|
|
check(f.Close())
|
|
}()
|
|
|
|
check(write(f, flat, pkg))
|
|
check(format(output))
|
|
}
|