(apis []userconfig.API)
| 33 | ) |
| 34 | |
| 35 | func ValidateClusterAPIs(apis []userconfig.API) error { |
| 36 | if len(apis) == 0 { |
| 37 | return spec.ErrorNoAPIs() |
| 38 | } |
| 39 | |
| 40 | if len(config.ClusterConfig.NodeGroups) == 0 { |
| 41 | return ErrorNoNodeGroups() |
| 42 | } |
| 43 | |
| 44 | virtualServices, err := config.K8s.ListVirtualServices(nil) |
| 45 | if err != nil { |
| 46 | return err |
| 47 | } |
| 48 | deployedRealtimeAPIs := strset.New() |
| 49 | for _, virtualService := range virtualServices { |
| 50 | if virtualService.Labels["apiKind"] == userconfig.RealtimeAPIKind.String() { |
| 51 | deployedRealtimeAPIs.Add(virtualService.Labels["apiName"]) |
| 52 | } |
| 53 | } |
| 54 | |
| 55 | realtimeAPIs := InclusiveFilterAPIsByKind(apis, userconfig.RealtimeAPIKind) |
| 56 | |
| 57 | for i := range apis { |
| 58 | api := &apis[i] |
| 59 | if api.Kind == userconfig.RealtimeAPIKind || api.Kind == userconfig.BatchAPIKind || |
| 60 | api.Kind == userconfig.TaskAPIKind || api.Kind == userconfig.AsyncAPIKind { |
| 61 | |
| 62 | if err := spec.ValidateAPI(api, config.AWS, config.K8s); err != nil { |
| 63 | return errors.Wrap(err, api.Identify()) |
| 64 | } |
| 65 | |
| 66 | if err := validateEndpointCollisions(api, virtualServices); err != nil { |
| 67 | return err |
| 68 | } |
| 69 | } |
| 70 | |
| 71 | if api.Kind == userconfig.TrafficSplitterKind { |
| 72 | if err := spec.ValidateTrafficSplitter(api); err != nil { |
| 73 | return errors.Wrap(err, api.Identify()) |
| 74 | } |
| 75 | if err := checkIfAPIExists(api.APIs, realtimeAPIs, deployedRealtimeAPIs); err != nil { |
| 76 | return errors.Wrap(err, api.Identify()) |
| 77 | } |
| 78 | if err := validateEndpointCollisions(api, virtualServices); err != nil { |
| 79 | return errors.Wrap(err, api.Identify()) |
| 80 | } |
| 81 | } |
| 82 | } |
| 83 | |
| 84 | maxMemMap, err := operator.UpdateMemoryCapacityConfigMap() |
| 85 | if err != nil { |
| 86 | return err |
| 87 | } |
| 88 | |
| 89 | for i := range apis { |
| 90 | api := &apis[i] |
| 91 | if api.Kind != userconfig.TrafficSplitterKind { |
| 92 | if err := validateK8sCompute(api, maxMemMap); err != nil { |
no test coverage detected