func cliUpdateService(ctx *cli.Context) { feL3n4Addr := parseServiceKey(ctx.String("frontend")) backends := []types.L3n4Addr{} fe := types.L3n4AddrID{ ID: types.ServiceID(ctx.Int("id")), L3n4Addr: *feL3n4Addr, } backendList := ctx.StringSlice("backend") if len(backendList) == 0 { fmt.Printf("Reading backend list from stdin...\n") scanner := bufio.NewScanner(os.Stdin) for scanner.Scan() { backendList = append(backendList, scanner.Text()) } } for _, backend := range backendList { beAddr, err := net.ResolveTCPAddr("tcp", backend) if err != nil { fmt.Fprintf(os.Stderr, "%s\n", err) os.Exit(1) } be, err := types.NewL3n4Addr(types.TCP, beAddr.IP, uint16(beAddr.Port)) if err != nil { fmt.Fprintf(os.Stderr, "Unable to create a new L3n4Addr for backend %s: %s\n", backend, err) os.Exit(1) } if !be.IsIPv6() && fe.IsIPv6() { fmt.Fprintf(os.Stderr, "Address mismatch between frontend and backend %s\n", backend) os.Exit(1) } if fe.Port == 0 && beAddr.Port != 0 { fmt.Fprintf(os.Stderr, "L4 backend found (%v) with L3 frontend\n", beAddr) os.Exit(1) } backends = append(backends, *be) } if err := client.SVCAdd(fe, backends, addRev); err != nil { fmt.Fprintf(os.Stderr, "Unable to add the service: %s\n", err) os.Exit(1) } fmt.Printf("Added %d backends\n", len(backends)) }