blob: 529553bf2b7ad90dcc1257a8dc2018d55f81b3f4 [file] [log] [blame]
package main
import (
"context"
"flag"
"path"
"runtime"
"go.skia.org/infra/go/common"
"go.skia.org/infra/go/gce"
"go.skia.org/infra/go/sklog"
)
const (
IMAGE_DESCRIPTION = "Base image for Skia Swarming bots."
IMAGE_FAMILY = "skia-swarming-base"
INSTANCE_NAME = "skia-swarming-base-maker"
SETUP_SCRIPT = "~/setup_script.sh"
)
var (
// Flags.
internal = flag.Bool("internal", false, "Whether to create an image for internal bots.")
)
func BaseConfig(serviceAccount string) *gce.Instance {
_, filename, _, _ := runtime.Caller(0)
dir := path.Dir(filename)
vm := &gce.Instance{
BootDisk: &gce.Disk{
Name: INSTANCE_NAME,
SourceImage: "projects/debian-cloud/global/images/debian-9-stretch-v20180401",
Type: gce.DISK_TYPE_PERSISTENT_STANDARD,
},
MachineType: gce.MACHINE_TYPE_STANDARD_4,
Name: INSTANCE_NAME,
Os: gce.OS_LINUX,
Scopes: []string{
"https://www.googleapis.com/auth/cloud-platform",
},
ServiceAccount: serviceAccount,
SetupScript: path.Join(dir, "setup-script.sh"),
User: gce.USER_CHROME_BOT,
}
return vm
}
func main() {
common.Init()
// Create the GCloud object.
project := gce.PROJECT_ID_SWARMING
serviceAccount := gce.SERVICE_ACCOUNT_CHROMIUM_SWARM
if *internal {
project = gce.PROJECT_ID_SERVER
serviceAccount = gce.SERVICE_ACCOUNT_DEFAULT
}
g, err := gce.NewLocalGCloud(project, gce.ZONE_DEFAULT)
if err != nil {
sklog.Fatal(err)
}
if err := g.CheckSsh(); err != nil {
sklog.Fatal(err)
}
vm := BaseConfig(serviceAccount)
// Delete the instance if it already exists, to ensure that we're in a
// clean state.
if err := g.Delete(vm, true, true); err != nil {
sklog.Fatal(err)
}
// Create/Setup the instance.
if err := g.CreateAndSetup(context.Background(), vm, false); err != nil {
sklog.Fatal(err)
}
// Capture the image.
if err := g.CaptureImage(vm, IMAGE_FAMILY, IMAGE_DESCRIPTION); err != nil {
sklog.Fatal(err)
}
}