talos/cmd/talosctl/cmd/mgmt/loadbalancer_launch.go
Dmitriy Matrenichev 85d8a16194
chore: bump deps
Bump deps

Signed-off-by: Dmitriy Matrenichev <dmitry.matrenichev@siderolabs.com>
2023-05-22 16:02:15 -04:00

63 lines
2.0 KiB
Go

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package mgmt
import (
"fmt"
"github.com/siderolabs/gen/slices"
"github.com/siderolabs/go-loadbalancer/loadbalancer"
"github.com/spf13/cobra"
"go.uber.org/zap"
"github.com/siderolabs/talos/pkg/machinery/constants"
)
var loadbalancerLaunchCmdFlags struct {
addr string
ports []int
upstreams []string
apidOnlyInitNode bool
}
// loadbalancerLaunchCmd represents the loadbalancer-launch command.
var loadbalancerLaunchCmd = &cobra.Command{
Use: "loadbalancer-launch",
Short: "Internal command used by QEMU provisioner",
Long: ``,
Args: cobra.NoArgs,
Hidden: true,
RunE: func(cmd *cobra.Command, args []string) error {
lb := loadbalancer.TCP{Logger: makeLogger()}
for _, port := range loadbalancerLaunchCmdFlags.ports {
upstreams := slices.Map(loadbalancerLaunchCmdFlags.upstreams, func(upstream string) string {
return fmt.Sprintf("%s:%d", upstream, port)
})
if err := lb.AddRoute(fmt.Sprintf("%s:%d", loadbalancerLaunchCmdFlags.addr, port), upstreams); err != nil {
return err
}
}
return lb.Run()
},
}
func makeLogger() *zap.Logger {
config := zap.NewProductionConfig()
config.Encoding = "console"
config.DisableStacktrace = true
return zap.Must(config.Build())
}
func init() {
loadbalancerLaunchCmd.Flags().StringVar(&loadbalancerLaunchCmdFlags.addr, "loadbalancer-addr", "localhost", "load balancer listen address (IP or host)")
loadbalancerLaunchCmd.Flags().IntSliceVar(&loadbalancerLaunchCmdFlags.ports, "loadbalancer-ports", []int{constants.DefaultControlPlanePort}, "load balancer ports")
loadbalancerLaunchCmd.Flags().StringSliceVar(&loadbalancerLaunchCmdFlags.upstreams, "loadbalancer-upstreams", []string{}, "load balancer upstreams (nodes to proxy to)")
addCommand(loadbalancerLaunchCmd)
}