diff --git a/cmd/create/create_loadbalancer.go b/cmd/create/create_loadbalancer.go index 2b0af32..abec900 100644 --- a/cmd/create/create_loadbalancer.go +++ b/cmd/create/create_loadbalancer.go @@ -46,6 +46,7 @@ type CreateLoadBalancerOptions struct { Endpoints []string SecIPs []string Select string + Name string } type CreateLoadBalancerResult struct { @@ -104,7 +105,7 @@ func NewCreateLoadBalancerCmd(restOptions *api.RESTOptions) *cobra.Command { o := CreateLoadBalancerOptions{} var createLbCmd = &cobra.Command{ - Use: "lb IP [--select=] [--tcp=:] [--udp=:] [--sctp=:] [--icmp] [--mark=] [--secips=,][--endpoints=:,] [--mode=] [--bgp] [--monitor] [--inatimeout=]", + Use: "lb IP [--select=] [--tcp=:] [--udp=:] [--sctp=:] [--icmp] [--mark=] [--secips=,][--endpoints=:,] [--mode=] [--bgp] [--monitor] [--inatimeout=] [--name=]", Short: "Create a LoadBalancer", Long: `Create a LoadBalancer @@ -117,6 +118,7 @@ func NewCreateLoadBalancerCmd(restOptions *api.RESTOptions) *cobra.Command { fullnat - LB put Service IP as scrIP ex) loxicmd create lb 192.168.0.200 --tcp=80:32015 --endpoints=10.212.0.1:1,10.212.0.2:1,10.212.0.3:1 + loxicmd create lb 192.168.0.200 --tcp=80:32015 --name="http-service" --endpoints=10.212.0.1:1,10.212.0.2:1,10.212.0.3:1 loxicmd create lb 192.168.0.200 --udp=80:32015 --endpoints=10.212.0.1:1,10.212.0.2:1,10.212.0.3:1 --mark=10 loxicmd create lb 192.168.0.200 --tcp=80:32015 --udp=80:32015 --endpoints=10.212.0.1:1,10.212.0.2:1,10.212.0.3:1 loxicmd create lb 192.168.0.200 --select=hash --tcp=80:32015 --endpoints=10.212.0.1:1,10.212.0.2:1,10.212.0.3:1 @@ -185,6 +187,7 @@ ex) loxicmd create lb 192.168.0.200 --tcp=80:32015 --endpoints=10.212.0.1:1,10.2 Mode: api.LbMode(ModeToNum(o.Mode)), Timeout: o.Timeout, Block: o.Mark, + Name: o.Name, } if o.Mode == "dsr" && targetPort != port { @@ -240,6 +243,7 @@ ex) loxicmd create lb 192.168.0.200 --tcp=80:32015 --endpoints=10.212.0.1:1,10.2 createLbCmd.Flags().Uint32VarP(&o.Timeout, "inatimeout", "", 0, "Specify the timeout (in seconds) after which a LB session will be reset for inactivity") createLbCmd.Flags().Uint16VarP(&o.Mark, "mark", "", 0, "Specify the mark num to segregate a load-balancer VIP service") createLbCmd.Flags().StringSliceVar(&o.Endpoints, "endpoints", o.Endpoints, "Endpoints is pairs that can be specified as ':'") + createLbCmd.Flags().StringVarP(&o.Name, "name", "", o.Name, "Name for load balancer rule") return createLbCmd } diff --git a/cmd/get/get_conntrack.go b/cmd/get/get_conntrack.go index 8531ce9..5fd7d75 100644 --- a/cmd/get/get_conntrack.go +++ b/cmd/get/get_conntrack.go @@ -55,7 +55,7 @@ func NewGetConntrackCmd(restOptions *api.RESTOptions) *cobra.Command { }, } - + GetctCmd.Flags().StringVarP(&restOptions.ServiceName, "servName", "", restOptions.ServiceName, "Name for load balancer rule") return GetctCmd } @@ -84,17 +84,21 @@ func PrintGetCTResult(resp *http.Response, o api.RESTOptions) { // Table Init table := TableInit() - table.SetHeader([]string{"destIP", "srcIP", "dport", "sport", "proto", "state", "act", "packets", "bytes"}) + table.SetHeader([]string{"Service Name","destIP", "srcIP", "dport", "sport", "proto", "state", "act", "packets", "bytes"}) // Making load balance data - data = makeConntrackData(ctresp) + data = makeConntrackData(o, ctresp) // Rendering the load balance data to table TableShow(data, table) } -func makeConntrackData(ctresp api.CtInformationGet) (data [][]string) { +func makeConntrackData(o api.RESTOptions,ctresp api.CtInformationGet) (data [][]string) { for _, conntrack := range ctresp.CtInfo { + if o.ServiceName != "" && o.ServiceName != conntrack.ServName { + continue + } data = append(data, []string{ + conntrack.ServName, conntrack.Dip, conntrack.Sip, fmt.Sprintf("%d", conntrack.Dport), diff --git a/cmd/get/get_loadbalancer.go b/cmd/get/get_loadbalancer.go index 08701c4..3797156 100644 --- a/cmd/get/get_loadbalancer.go +++ b/cmd/get/get_loadbalancer.go @@ -59,7 +59,7 @@ func NewGetLoadBalancerCmd(restOptions *api.RESTOptions) *cobra.Command { }, } - + GetLbCmd.Flags().StringVarP(&restOptions.ServiceName, "servName", "", restOptions.ServiceName, "Name for load balancer rule") return GetLbCmd } @@ -133,6 +133,9 @@ func PrintGetLbResult(resp *http.Response, o api.RESTOptions) { // Making load balance data for _, lbrule := range lbresp.LbRules { + if o.ServiceName != "" && o.ServiceName != lbrule.Service.Name { + continue + } if o.PrintOption == "wide" { table.SetHeader(LOADBALANCER_WIDE_TITLE) secIPs = "" @@ -146,25 +149,25 @@ func PrintGetLbResult(resp *http.Response, o api.RESTOptions) { if lbrule.Service.Monitor { for i, eps := range lbrule.Endpoints { if i == 0 { - data = append(data, []string{lbrule.Service.ExternalIP, secIPs, fmt.Sprintf("%d", lbrule.Service.Port), lbrule.Service.Protocol, fmt.Sprintf("%d", lbrule.Service.Block), NumToSelect(int(lbrule.Service.Sel)), NumToMode(int(lbrule.Service.Mode)), + data = append(data, []string{lbrule.Service.ExternalIP, secIPs, fmt.Sprintf("%d", lbrule.Service.Port), lbrule.Service.Protocol, lbrule.Service.Name, fmt.Sprintf("%d", lbrule.Service.Block), NumToSelect(int(lbrule.Service.Sel)), NumToMode(int(lbrule.Service.Mode)), eps.EndpointIP, fmt.Sprintf("%d", eps.TargetPort), fmt.Sprintf("%d", eps.Weight), eps.State, eps.Counter}) } else { - data = append(data, []string{"", "", "", "", "", "", "", eps.EndpointIP, fmt.Sprintf("%d", eps.TargetPort), fmt.Sprintf("%d", eps.Weight), eps.State, eps.Counter}) + data = append(data, []string{"", "", "", "", "", "", "", "", eps.EndpointIP, fmt.Sprintf("%d", eps.TargetPort), fmt.Sprintf("%d", eps.Weight), eps.State, eps.Counter}) } } } else { for i, eps := range lbrule.Endpoints { if i == 0 { - data = append(data, []string{lbrule.Service.ExternalIP, secIPs, fmt.Sprintf("%d", lbrule.Service.Port), lbrule.Service.Protocol, fmt.Sprintf("%d", lbrule.Service.Block), NumToSelect(int(lbrule.Service.Sel)), NumToMode(int(lbrule.Service.Mode)), + data = append(data, []string{lbrule.Service.ExternalIP, secIPs, fmt.Sprintf("%d", lbrule.Service.Port), lbrule.Service.Protocol, lbrule.Service.Name, fmt.Sprintf("%d", lbrule.Service.Block), NumToSelect(int(lbrule.Service.Sel)), NumToMode(int(lbrule.Service.Mode)), eps.EndpointIP, fmt.Sprintf("%d", eps.TargetPort), fmt.Sprintf("%d", eps.Weight), "-", eps.Counter}) } else { - data = append(data, []string{"", "", "", "", "", "", "", eps.EndpointIP, fmt.Sprintf("%d", eps.TargetPort), fmt.Sprintf("%d", eps.Weight), "-", eps.Counter}) + data = append(data, []string{"", "", "", "", "", "", "", "", eps.EndpointIP, fmt.Sprintf("%d", eps.TargetPort), fmt.Sprintf("%d", eps.Weight), "-", eps.Counter}) } } } } else { table.SetHeader(LOADBALANCER_TITLE) - data = append(data, []string{lbrule.Service.ExternalIP, fmt.Sprintf("%d", lbrule.Service.Port), lbrule.Service.Protocol, fmt.Sprintf("%d", lbrule.Service.Block), NumToSelect(int(lbrule.Service.Sel)), NumToMode(int(lbrule.Service.Mode)), fmt.Sprintf("%d", len(lbrule.Endpoints)), BoolToMon(lbrule.Service.Monitor)}) + data = append(data, []string{lbrule.Service.ExternalIP, fmt.Sprintf("%d", lbrule.Service.Port), lbrule.Service.Protocol, lbrule.Service.Name, fmt.Sprintf("%d", lbrule.Service.Block), NumToSelect(int(lbrule.Service.Sel)), NumToMode(int(lbrule.Service.Mode)), fmt.Sprintf("%d", len(lbrule.Endpoints)), BoolToMon(lbrule.Service.Monitor)}) } } diff --git a/cmd/get/type.go b/cmd/get/type.go index d97bcc3..3e32381 100644 --- a/cmd/get/type.go +++ b/cmd/get/type.go @@ -17,8 +17,8 @@ package get var ( CONNTRACK_TITLE = []string{"destIP", "srcIP", "dPort", "sPort", "proto", "state", "act", "packets", "bytes"} - LOADBALANCER_TITLE = []string{"Ext IP", "Port", "Proto", "Mark", "Sel", "Mode", "# of Endpoints", "Monitor"} - LOADBALANCER_WIDE_TITLE = []string{"Ext IP", "Sec IPs", "Port", "Proto", "Mark", "Sel", "Mode", "Endpoint", "EPort", "Weight", "State", "Counters"} + LOADBALANCER_TITLE = []string{"Ext IP", "Port", "Proto", "Name", "Mark", "Sel", "Mode", "# of Endpoints", "Monitor"} + LOADBALANCER_WIDE_TITLE = []string{"Ext IP", "Sec IPs", "Port", "Proto", "Name", "Mark", "Sel", "Mode", "Endpoint", "EPort", "Weight", "State", "Counters"} SESSION_TITLE = []string{"ident", "session IP"} SESSION_WIDE_TITLE = []string{"ident", "session IP", "access Network Tunnel", "core Network Tunnel"} PORT_WIDE_TITLE = []string{"index", "portname", "MAC", "link/state", "mtu", "isActive/bpf\nPort type", "Statistics", "L3Info", "L2Info", "Sync"} diff --git a/pkg/api/conntrack.go b/pkg/api/conntrack.go index 2cb206e..5b3275f 100644 --- a/pkg/api/conntrack.go +++ b/pkg/api/conntrack.go @@ -38,6 +38,7 @@ type ConntrackInformation struct { CAct string `json:"conntrackAct"` Pkts uint64 `json:"packets"` Bytes uint64 `json:"bytes"` + ServName string `json:"servName"` } func (ct ConntrackInformation) Key() string { diff --git a/pkg/api/loadBalancer.go b/pkg/api/loadBalancer.go index c00ac3a..572a07c 100644 --- a/pkg/api/loadBalancer.go +++ b/pkg/api/loadBalancer.go @@ -47,6 +47,7 @@ type LoadBalancerService struct { Timeout uint32 `json:"inactiveTimeOut" yaml:"inactiveTimeOut"` Block uint16 `json:"block" yaml:"block"` Managed bool `json:"managed,omitempty" yaml:"managed"` + Name string `json:"name,omitempty" yaml:"name"` } type LoadBalancerEndpoint struct { diff --git a/pkg/api/rest.go b/pkg/api/rest.go index 64b0099..da643f3 100644 --- a/pkg/api/rest.go +++ b/pkg/api/rest.go @@ -65,6 +65,7 @@ type RESTOptions struct { ServerIP string ServerPort int16 Timeout int16 + ServiceName string } type RESTClient struct {