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
}