func additionalCreateInstanceArgs()

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
}