(flags *pflag.FlagSet, config **swarm.DNSConfig)
| 999 | } |
| 1000 | |
| 1001 | func updateDNSConfig(flags *pflag.FlagSet, config **swarm.DNSConfig) error { |
| 1002 | newConfig := &swarm.DNSConfig{} |
| 1003 | |
| 1004 | nameservers := (*config).Nameservers |
| 1005 | if flags.Changed(flagDNSAdd) { |
| 1006 | values := flags.Lookup(flagDNSAdd).Value.(*opts.ListOpts).GetSlice() |
| 1007 | var ips []netip.Addr |
| 1008 | for _, ip := range values { |
| 1009 | a, err := netip.ParseAddr(ip) |
| 1010 | if err != nil { |
| 1011 | return err |
| 1012 | } |
| 1013 | ips = append(ips, a) |
| 1014 | } |
| 1015 | nameservers = append(nameservers, ips...) |
| 1016 | } |
| 1017 | nameservers = removeDuplicates(nameservers) |
| 1018 | toRemove := buildToRemoveSet(flags, flagDNSRemove) |
| 1019 | for _, nameserver := range nameservers { |
| 1020 | if _, exists := toRemove[nameserver.String()]; !exists { |
| 1021 | newConfig.Nameservers = append(newConfig.Nameservers, nameserver) |
| 1022 | } |
| 1023 | } |
| 1024 | // Sort so that result is predictable. |
| 1025 | slices.SortFunc(newConfig.Nameservers, func(a, b netip.Addr) int { |
| 1026 | return a.Compare(b) |
| 1027 | }) |
| 1028 | |
| 1029 | search := (*config).Search |
| 1030 | if flags.Changed(flagDNSSearchAdd) { |
| 1031 | values := flags.Lookup(flagDNSSearchAdd).Value.(*opts.ListOpts).GetSlice() |
| 1032 | search = append(search, values...) |
| 1033 | } |
| 1034 | search = slices.Compact(search) |
| 1035 | toRemove = buildToRemoveSet(flags, flagDNSSearchRemove) |
| 1036 | for _, entry := range search { |
| 1037 | if _, exists := toRemove[entry]; !exists { |
| 1038 | newConfig.Search = append(newConfig.Search, entry) |
| 1039 | } |
| 1040 | } |
| 1041 | // Sort so that result is predictable. |
| 1042 | sort.Strings(newConfig.Search) |
| 1043 | |
| 1044 | options := (*config).Options |
| 1045 | if flags.Changed(flagDNSOptionAdd) { |
| 1046 | values := flags.Lookup(flagDNSOptionAdd).Value.(*opts.ListOpts).GetSlice() |
| 1047 | options = append(options, values...) |
| 1048 | } |
| 1049 | options = slices.Compact(options) |
| 1050 | toRemove = buildToRemoveSet(flags, flagDNSOptionRemove) |
| 1051 | for _, option := range options { |
| 1052 | if _, exists := toRemove[option]; !exists { |
| 1053 | newConfig.Options = append(newConfig.Options, option) |
| 1054 | } |
| 1055 | } |
| 1056 | // Sort so that result is predictable. |
| 1057 | sort.Strings(newConfig.Options) |
| 1058 |
searching dependent graphs…