(dict map[string]any)
| 166 | } |
| 167 | |
| 168 | func normalizeNetworks(dict map[string]any) { |
| 169 | var networks map[string]any |
| 170 | if n, ok := dict["networks"]; ok { |
| 171 | networks = n.(map[string]any) |
| 172 | } else { |
| 173 | networks = map[string]any{} |
| 174 | } |
| 175 | |
| 176 | // implicit `default` network must be introduced only if actually used by some service |
| 177 | usesDefaultNetwork := false |
| 178 | |
| 179 | if s, ok := dict["services"]; ok { |
| 180 | services := s.(map[string]any) |
| 181 | for name, se := range services { |
| 182 | service := se.(map[string]any) |
| 183 | if _, ok := service["provider"]; ok { |
| 184 | continue |
| 185 | } |
| 186 | if _, ok := service["network_mode"]; ok { |
| 187 | continue |
| 188 | } |
| 189 | if n, ok := service["networks"]; !ok { |
| 190 | // If none explicitly declared, service is connected to default network |
| 191 | service["networks"] = map[string]any{"default": nil} |
| 192 | usesDefaultNetwork = true |
| 193 | } else { |
| 194 | net := n.(map[string]any) |
| 195 | if len(net) == 0 { |
| 196 | // networks section declared but empty (corner case) |
| 197 | service["networks"] = map[string]any{"default": nil} |
| 198 | usesDefaultNetwork = true |
| 199 | } else if _, ok := net["default"]; ok { |
| 200 | usesDefaultNetwork = true |
| 201 | } |
| 202 | } |
| 203 | services[name] = service |
| 204 | } |
| 205 | dict["services"] = services |
| 206 | } |
| 207 | |
| 208 | if _, ok := networks["default"]; !ok && usesDefaultNetwork { |
| 209 | // If not declared explicitly, Compose model involves an implicit "default" network |
| 210 | networks["default"] = nil |
| 211 | } |
| 212 | |
| 213 | if len(networks) > 0 { |
| 214 | dict["networks"] = networks |
| 215 | } |
| 216 | } |
| 217 | |
| 218 | func resolve(a any, fn func(s string) (string, bool), keepEmpty bool) (any, bool) { |
| 219 | switch v := a.(type) { |
no outgoing calls
no test coverage detected
searching dependent graphs…