func()

in internal/pkg/manifest/validate.go [349:405]


func (b BackendServiceConfig) validate() error {
	var err error
	if err = b.ImageConfig.validate(); err != nil {
		return fmt.Errorf(`validate "image": %w`, err)
	}
	if err = b.ImageOverride.validate(); err != nil {
		return err
	}
	if err = b.HTTP.validate(); err != nil {
		return fmt.Errorf(`validate "http": %w`, err)
	}
	if b.HTTP.IsEmpty() && (!b.Count.AdvancedCount.Requests.IsEmpty() || !b.Count.AdvancedCount.ResponseTime.IsEmpty()) {
		return &errFieldMustBeSpecified{
			missingField:      "http",
			conditionalFields: []string{"count.requests", "count.response_time"},
		}
	}
	if err = b.TaskConfig.validate(); err != nil {
		return err
	}
	if err = b.Logging.validate(); err != nil {
		return fmt.Errorf(`validate "logging": %w`, err)
	}
	for k, v := range b.Sidecars {
		if err = v.validate(); err != nil {
			return fmt.Errorf(`validate "sidecars[%s]": %w`, k, err)
		}
	}
	if err = b.Network.validate(); err != nil {
		return fmt.Errorf(`validate "network": %w`, err)
	}
	if b.Network.Connect.Alias != nil {
		if b.HTTP.Main.TargetContainer == nil && b.ImageConfig.Port == nil {
			return fmt.Errorf(`cannot set "network.connect.alias" when no ports are exposed`)
		}
	}
	if err = b.PublishConfig.validate(); err != nil {
		return fmt.Errorf(`validate "publish": %w`, err)
	}
	for ind, taskDefOverride := range b.TaskDefOverrides {
		if err = taskDefOverride.validate(); err != nil {
			return fmt.Errorf(`validate "taskdef_overrides[%d]": %w`, ind, err)
		}
	}
	if b.TaskConfig.IsWindows() {
		if err = validateWindows(validateWindowsOpts{
			efsVolumes: b.Storage.Volumes,
			readOnlyFS: b.Storage.ReadonlyRootFS,
		}); err != nil {
			return fmt.Errorf("validate Windows: %w", err)
		}
		if b.Network.Connect.Enabled() {
			return fmt.Errorf("validate Windows: service connect (`network.connect`) is not supported for Windows")
		}
	}
	return nil
}