func (na *NetworkAllocator) allocateDriverState(n *api.Network) error { d, dName, err := na.resolveDriver(n) if err != nil { return err } options := make(map[string]string) // reconcile the driver specific options from the network spec // and from the operational state retrieved from the store if n.Spec.DriverConfig != nil { for k, v := range n.Spec.DriverConfig.Options { options[k] = v } } if n.DriverState != nil { for k, v := range n.DriverState.Options { options[k] = v } } // Construct IPAM data for driver consumption. ipv4Data := make([]driverapi.IPAMData, 0, len(n.IPAM.Configs)) for _, ic := range n.IPAM.Configs { if ic.Family == api.IPAMConfig_IPV6 { continue } _, subnet, err := net.ParseCIDR(ic.Subnet) if err != nil { return errors.Wrapf(err, "error parsing subnet %s while allocating driver state", ic.Subnet) } gwIP := net.ParseIP(ic.Gateway) gwNet := &net.IPNet{ IP: gwIP, Mask: subnet.Mask, } data := driverapi.IPAMData{ Pool: subnet, Gateway: gwNet, } ipv4Data = append(ipv4Data, data) } ds, err := d.NetworkAllocate(n.ID, options, ipv4Data, nil) if err != nil { return err } // Update network object with the obtained driver state. n.DriverState = &api.Driver{ Name: dName, Options: ds, } return nil }
func (na *NetworkAllocator) allocateDriverState(n *api.Network) error { d, dName, err := na.resolveDriver(n) if err != nil { return err } var options map[string]string if n.Spec.DriverConfig != nil { options = n.Spec.DriverConfig.Options } // Construct IPAM data for driver consumption. ipv4Data := make([]driverapi.IPAMData, 0, len(n.IPAM.Configs)) for _, ic := range n.IPAM.Configs { if ic.Family == api.IPAMConfig_IPV6 { continue } _, subnet, err := net.ParseCIDR(ic.Subnet) if err != nil { return fmt.Errorf("error parsing subnet %s while allocating driver state: %v", ic.Subnet, err) } gwIP := net.ParseIP(ic.Gateway) gwNet := &net.IPNet{ IP: gwIP, Mask: subnet.Mask, } data := driverapi.IPAMData{ Pool: subnet, Gateway: gwNet, } ipv4Data = append(ipv4Data, data) } ds, err := d.NetworkAllocate(n.ID, options, ipv4Data, nil) if err != nil { return err } // Update network object with the obtained driver state. n.DriverState = &api.Driver{ Name: dName, Options: ds, } return nil }