(ctx context.Context, composeNetworkName string, projectName string, name string)
| 194 | } |
| 195 | |
| 196 | func (s *composeService) removeNetwork(ctx context.Context, composeNetworkName string, projectName string, name string) error { |
| 197 | res, err := s.apiClient().NetworkList(ctx, client.NetworkListOptions{ |
| 198 | Filters: projectFilter(projectName).Add("label", networkFilter(composeNetworkName)), |
| 199 | }) |
| 200 | if err != nil { |
| 201 | return fmt.Errorf("failed to list networks: %w", err) |
| 202 | } |
| 203 | networks := res.Items |
| 204 | |
| 205 | if len(networks) == 0 { |
| 206 | return nil |
| 207 | } |
| 208 | |
| 209 | eventName := fmt.Sprintf("Network %s", name) |
| 210 | s.events.On(removingEvent(eventName)) |
| 211 | |
| 212 | var found int |
| 213 | for _, net := range networks { |
| 214 | if net.Name != name { |
| 215 | continue |
| 216 | } |
| 217 | nwInspect, err := s.apiClient().NetworkInspect(ctx, net.ID, client.NetworkInspectOptions{}) |
| 218 | if errdefs.IsNotFound(err) { |
| 219 | s.events.On(newEvent(eventName, api.Warning, "No resource found to remove")) |
| 220 | return nil |
| 221 | } |
| 222 | if err != nil { |
| 223 | return err |
| 224 | } |
| 225 | nw := nwInspect.Network |
| 226 | if len(nw.Containers) > 0 { |
| 227 | s.events.On(newEvent(eventName, api.Warning, "Resource is still in use")) |
| 228 | found++ |
| 229 | continue |
| 230 | } |
| 231 | |
| 232 | if _, err := s.apiClient().NetworkRemove(ctx, net.ID, client.NetworkRemoveOptions{}); err != nil { |
| 233 | if errdefs.IsNotFound(err) { |
| 234 | continue |
| 235 | } |
| 236 | s.events.On(errorEvent(eventName, err.Error())) |
| 237 | return fmt.Errorf("failed to remove network %s: %w", name, err) |
| 238 | } |
| 239 | s.events.On(removedEvent(eventName)) |
| 240 | found++ |
| 241 | } |
| 242 | |
| 243 | if found == 0 { |
| 244 | // in practice, it's extremely unlikely for this to ever occur, as it'd |
| 245 | // mean the network was present when we queried at the start of this |
| 246 | // method but was then deleted by something else in the interim |
| 247 | s.events.On(newEvent(eventName, api.Warning, "No resource found to remove")) |
| 248 | return nil |
| 249 | } |
| 250 | return nil |
| 251 | } |
| 252 | |
| 253 | func (s *composeService) removeImage(ctx context.Context, image string) error { |
no test coverage detected