in integration_test/gce-testing-internal/gce/gce_testing.go [1297:1337]
func additionalCreateInstanceArgs(options VMOptions, vm *VM) ([]string, error) {
args := []string{}
newMetadata, err := addFrameworkMetadata(vm.ImageSpec, options.Metadata)
if err != nil {
return nil, fmt.Errorf("additionalCreateInstanceArgs() could not construct valid metadata: %v", err)
}
newLabels, err := addFrameworkLabels(options.Labels)
if err != nil {
return nil, fmt.Errorf("additionalCreateInstanceArgs() could not construct valid labels: %v", err)
}
image_flags, err := gcloudFlagsFromImageSpec(vm.ImageSpec)
if err != nil {
return nil, err
}
args = append(args, image_flags...)
if len(newMetadata) > 0 {
// The --metadata flag can't be empty, so we have to have a special case
// to omit the flag completely when the newMetadata map is empty.
args = append(args, "--metadata="+MapToCommaSeparatedList(newMetadata))
}
if len(newLabels) > 0 {
args = append(args, "--labels="+MapToCommaSeparatedList(newLabels))
}
if email := os.Getenv("SERVICE_EMAIL"); email != "" {
args = append(args, "--service-account="+email)
}
if internalIP := os.Getenv("USE_INTERNAL_IP"); internalIP == "true" {
// Don't assign an external IP address. This is to avoid using up
// a very limited budget of external IPv4 addresses. The instances
// will talk to the external internet by routing through a Cloud NAT
// gateway that is configured in our testing project.
args = append(args, "--no-address")
}
if options.TimeToLive != "" {
args = append(args, "--max-run-duration="+options.TimeToLive, "--instance-termination-action=DELETE", "--provisioning-model=STANDARD")
}
args = append(args, options.ExtraCreateArguments...)
return args, nil
}