(ctx context.Context, name string, volume types.VolumeConfig, project *types.Project)
| 1643 | } |
| 1644 | |
| 1645 | func (s *composeService) removeDivergedVolume(ctx context.Context, name string, volume types.VolumeConfig, project *types.Project) error { |
| 1646 | // Remove services mounting divergent volume |
| 1647 | var services []string |
| 1648 | for _, service := range project.Services.Filter(func(config types.ServiceConfig) bool { |
| 1649 | for _, cfg := range config.Volumes { |
| 1650 | if cfg.Source == name { |
| 1651 | return true |
| 1652 | } |
| 1653 | } |
| 1654 | return false |
| 1655 | }) { |
| 1656 | services = append(services, service.Name) |
| 1657 | } |
| 1658 | |
| 1659 | err := s.stop(ctx, project.Name, api.StopOptions{ |
| 1660 | Services: services, |
| 1661 | Project: project, |
| 1662 | }, nil) |
| 1663 | if err != nil { |
| 1664 | return err |
| 1665 | } |
| 1666 | |
| 1667 | containers, err := s.getContainers(ctx, project.Name, oneOffExclude, true, services...) |
| 1668 | if err != nil { |
| 1669 | return err |
| 1670 | } |
| 1671 | |
| 1672 | // FIXME (ndeloof) we have to remove container so we can recreate volume |
| 1673 | // but doing so we can't inherit anonymous volumes from previous instance |
| 1674 | err = s.remove(ctx, containers, api.RemoveOptions{ |
| 1675 | Services: services, |
| 1676 | Project: project, |
| 1677 | }) |
| 1678 | if err != nil { |
| 1679 | return err |
| 1680 | } |
| 1681 | |
| 1682 | _, err = s.apiClient().VolumeRemove(ctx, volume.Name, client.VolumeRemoveOptions{ |
| 1683 | Force: true, |
| 1684 | }) |
| 1685 | return err |
| 1686 | } |
| 1687 | |
| 1688 | func (s *composeService) createVolume(ctx context.Context, volume types.VolumeConfig) error { |
| 1689 | eventName := fmt.Sprintf("Volume %s", volume.Name) |
no test coverage detected