in cli_tools/gce_ovf_import/ovf_importer/ovf_param_validator.go [78:201]
func (p *ParamValidatorAndPopulator) ValidateAndPopulate(params *ovfdomain.OVFImportParams) (err error) {
params.BuildID = p.generateBuildIDIfMissing(params.BuildID)
if params.Project, err = p.lookupProjectIfMissing(*params.Project); err != nil {
return err
}
if params.Zone, err = p.lookupZoneIfMissing(*params.Project, params.Zone); err != nil {
return err
}
if params.Region, err = p.getRegionFromZone(params.Zone); err != nil {
return err
}
if params.Network, params.Subnet, err = p.NetworkResolver.Resolve(
params.Network, params.Subnet, params.Region, *params.Project); err != nil {
return err
}
if len(params.WorkerMachineSeries) == 0 {
params.WorkerMachineSeries, err = p.workerMachineSeriesDetector.Detect(*params.Project, params.Zone)
if err != nil {
return err
}
}
if params.ReleaseTrack, err = p.resolveReleaseTrack(params.ReleaseTrack); err != nil {
return err
}
if params.Deadline, err = p.calculateDeadlineFromTimeout(params.Timeout); err != nil {
return err
}
if params.ScratchBucketGcsPath, err = p.createScratchBucketIfMissing(
params.ScratchBucketGcsPath, *params.Project, params.Region, params.BuildID); err != nil {
return err
}
params.InstanceNames = strings.ToLower(strings.TrimSpace(params.InstanceNames))
params.MachineImageName = strings.ToLower(strings.TrimSpace(params.MachineImageName))
params.Description = strings.TrimSpace(params.Description)
params.PrivateNetworkIP = strings.TrimSpace(params.PrivateNetworkIP)
params.NetworkTier = strings.TrimSpace(params.NetworkTier)
params.ComputeServiceAccount = strings.TrimSpace(params.ComputeServiceAccount)
params.InstanceServiceAccount = strings.TrimSpace(params.InstanceServiceAccount)
params.InstanceAccessScopesFlag = strings.TrimSpace(params.InstanceAccessScopesFlag)
if params.InstanceAccessScopesFlag != "" {
params.InstanceAccessScopes = strings.Split(params.InstanceAccessScopesFlag, ",")
for _, scope := range params.InstanceAccessScopes {
if !strings.HasPrefix(scope, instanceAccessScopePrefix) {
return daisy.Errf("Scope `%v` is invalid because it doesn't start with `%v`", scope, instanceAccessScopePrefix)
}
}
} else {
params.InstanceAccessScopes = []string{}
}
if params.InstanceNames == "" && params.MachineImageName == "" {
return daisy.Errf("Either the flag -%v or -%v must be provided", InstanceNameFlagKey, MachineImageNameFlagKey)
}
if params.InstanceNames != "" && params.MachineImageName != "" {
return daisy.Errf("-%v and -%v can't be provided at the same time", InstanceNameFlagKey, MachineImageNameFlagKey)
}
if params.IsInstanceImport() {
// instance import specific validation
instanceNameSplits := strings.Split(params.InstanceNames, ",")
if len(instanceNameSplits) > 1 {
return daisy.Errf("OVF import doesn't support multi instance import at this time")
}
if params.MachineImageStorageLocation != "" {
return daisy.Errf("-%v can't be provided when importing an instance", MachineImageStorageLocationFlagKey)
}
}
if err := validation.ValidateStringFlagNotEmpty(params.OvfOvaGcsPath, OvfGcsPathFlagKey); err != nil {
return err
}
if _, err := storageutils.GetBucketNameFromGCSPath(params.OvfOvaGcsPath); err != nil {
return daisy.Errf("%v should be a path to OVF or OVA package in Cloud Storage", OvfGcsPathFlagKey)
}
if params.Labels != "" {
var err error
params.UserLabels, err = param.ParseKeyValues(params.Labels)
if err != nil {
return err
}
}
if params.Tags != "" {
params.UserTags = strings.Split(params.Tags, ",")
for _, tag := range params.UserTags {
if tag == "" {
return errors.New("tags cannot be empty")
}
if err := validation.ValidateRfc1035Label(tag); err != nil {
return fmt.Errorf("tag `%v` is not RFC1035 compliant", tag)
}
}
}
if params.NodeAffinityLabelsFlag != nil {
var err error
params.NodeAffinities, params.NodeAffinitiesBeta, err = compute.ParseNodeAffinityLabels(params.NodeAffinityLabelsFlag)
if err != nil {
return err
}
}
if params.Hostname != "" {
err := validation.ValidateFqdn(params.Hostname, HostnameFlagKey)
if err != nil {
return err
}
}
return nil
}