Example #1
0
func (s *Service) connectContainerToNetworks(ctx context.Context, c *container.Container, oneOff bool) error {
	connectedNetworks, err := c.Networks()
	if err != nil {
		return nil
	}
	if s.serviceConfig.Networks != nil {
		for _, network := range s.serviceConfig.Networks.Networks {
			existingNetwork, ok := connectedNetworks[network.Name]
			if ok {
				// FIXME(vdemeester) implement alias checking (to not disconnect/reconnect for nothing)
				aliasPresent := false
				for _, alias := range existingNetwork.Aliases {
					// FIXME(vdemeester) use shortID instead of ID
					ID, _ := c.ID()
					if alias == ID {
						aliasPresent = true
					}
				}
				if aliasPresent {
					continue
				}
				if err := s.NetworkDisconnect(ctx, c, network, oneOff); err != nil {
					return err
				}
			}
			if err := s.NetworkConnect(ctx, c, network, oneOff); err != nil {
				return err
			}
		}
	}
	return nil
}