Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var DescribeCmd = base.DescribeCmd{ ResourceNameSingular: "Load Balancer", ShortDescription: "Describe a Load Balancer", JSONKeyGetByID: "load_balancer", JSONKeyGetByName: "load_balancers", NameSuggestions: func(c hcapi2.Client) func() []string { return c.LoadBalancer().Names }, Fetch: func(ctx context.Context, client hcapi2.Client, cmd *cobra.Command, idOrName string) (interface{}, *hcloud.Response, error) { return client.LoadBalancer().Get(ctx, idOrName) }, AdditionalFlags: func(cmd *cobra.Command) { cmd.Flags().Bool("expand-targets", false, "Expand all label_selector targets") }, PrintText: func(ctx context.Context, client hcapi2.Client, cmd *cobra.Command, resource interface{}) error { withLabelSelectorTargets, _ := cmd.Flags().GetBool("expand-targets") loadBalancer := resource.(*hcloud.LoadBalancer) fmt.Printf("ID:\t\t\t\t%d\n", loadBalancer.ID) fmt.Printf("Name:\t\t\t\t%s\n", loadBalancer.Name) fmt.Printf("Created:\t\t\t%s (%s)\n", util.Datetime(loadBalancer.Created), humanize.Time(loadBalancer.Created)) fmt.Printf("Public Net:\n") fmt.Printf(" Enabled:\t\t\t%s\n", util.YesNo(loadBalancer.PublicNet.Enabled)) fmt.Printf(" IPv4:\t\t\t\t%s\n", loadBalancer.PublicNet.IPv4.IP.String()) fmt.Printf(" IPv4 DNS PTR:\t\t\t%s\n", loadBalancer.PublicNet.IPv4.DNSPtr) fmt.Printf(" IPv6:\t\t\t\t%s\n", loadBalancer.PublicNet.IPv6.IP.String()) fmt.Printf(" IPv6 DNS PTR:\t\t\t%s\n", loadBalancer.PublicNet.IPv6.DNSPtr) fmt.Printf("Private Net:\n") if len(loadBalancer.PrivateNet) > 0 { for _, n := range loadBalancer.PrivateNet { fmt.Printf(" - ID:\t\t\t%d\n", n.Network.ID) fmt.Printf(" Name:\t\t%s\n", client.Network().Name(n.Network.ID)) fmt.Printf(" IP:\t\t\t%s\n", n.IP.String()) } } else { fmt.Printf(" No Private Network\n") } fmt.Printf("Algorithm:\t\t\t%s\n", loadBalancer.Algorithm.Type) fmt.Printf("Load Balancer Type:\t\t%s (ID: %d)\n", loadBalancer.LoadBalancerType.Name, loadBalancer.LoadBalancerType.ID) fmt.Printf(" ID:\t\t\t\t%d\n", loadBalancer.LoadBalancerType.ID) fmt.Printf(" Name:\t\t\t\t%s\n", loadBalancer.LoadBalancerType.Name) fmt.Printf(" Description:\t\t\t%s\n", loadBalancer.LoadBalancerType.Description) fmt.Printf(" Max Services:\t\t\t%d\n", loadBalancer.LoadBalancerType.MaxServices) fmt.Printf(" Max Connections:\t\t%d\n", loadBalancer.LoadBalancerType.MaxConnections) fmt.Printf(" Max Targets:\t\t\t%d\n", loadBalancer.LoadBalancerType.MaxTargets) fmt.Printf(" Max assigned Certificates:\t%d\n", loadBalancer.LoadBalancerType.MaxAssignedCertificates) fmt.Printf("Services:\n") if len(loadBalancer.Services) == 0 { fmt.Print(" No services\n") } else { for _, service := range loadBalancer.Services { fmt.Printf(" - Protocol:\t\t\t%s\n", service.Protocol) fmt.Printf(" Listen Port:\t\t%d\n", service.ListenPort) fmt.Printf(" Destination Port:\t\t%d\n", service.DestinationPort) fmt.Printf(" Proxy Protocol:\t\t%s\n", util.YesNo(service.Proxyprotocol)) if service.Protocol != hcloud.LoadBalancerServiceProtocolTCP { fmt.Printf(" Sticky Sessions:\t\t%s\n", util.YesNo(service.HTTP.StickySessions)) if service.HTTP.StickySessions { fmt.Printf(" Sticky Cookie Name:\t\t%s\n", service.HTTP.CookieName) fmt.Printf(" Sticky Cookie Lifetime:\t%vs\n", service.HTTP.CookieLifetime.Seconds()) } if service.Protocol == hcloud.LoadBalancerServiceProtocolHTTPS { fmt.Printf(" Certificates:\n") for _, cert := range service.HTTP.Certificates { fmt.Printf(" - ID: \t\t\t%v\n", cert.ID) } } } fmt.Printf(" Health Check:\n") fmt.Printf(" Protocol:\t\t\t%s\n", service.HealthCheck.Protocol) fmt.Printf(" Timeout:\t\t\t%vs\n", service.HealthCheck.Timeout.Seconds()) fmt.Printf(" Interval:\t\t\tevery %vs\n", service.HealthCheck.Interval.Seconds()) fmt.Printf(" Retries:\t\t\t%d\n", service.HealthCheck.Retries) if service.HealthCheck.Protocol != hcloud.LoadBalancerServiceProtocolTCP { fmt.Printf(" HTTP Domain:\t\t%s\n", service.HealthCheck.HTTP.Domain) fmt.Printf(" HTTP Path:\t\t%s\n", service.HealthCheck.HTTP.Path) fmt.Printf(" Response:\t\t%s\n", service.HealthCheck.HTTP.Response) fmt.Printf(" TLS:\t\t\t%s\n", util.YesNo(service.HealthCheck.HTTP.TLS)) fmt.Printf(" Status Codes:\t\t%v\n", service.HealthCheck.HTTP.StatusCodes) } } } fmt.Printf("Targets:\n") if len(loadBalancer.Targets) == 0 { fmt.Print(" No targets\n") } for _, target := range loadBalancer.Targets { fmt.Printf(" - Type:\t\t\t%s\n", target.Type) switch target.Type { case hcloud.LoadBalancerTargetTypeServer: fmt.Printf(" Server:\n") fmt.Printf(" ID:\t\t\t%d\n", target.Server.Server.ID) fmt.Printf(" Name:\t\t\t%s\n", client.Server().ServerName(target.Server.Server.ID)) fmt.Printf(" Use Private IP:\t\t%s\n", util.YesNo(target.UsePrivateIP)) fmt.Printf(" Status:\n") for _, healthStatus := range target.HealthStatus { fmt.Printf(" - Service:\t\t\t%d\n", healthStatus.ListenPort) fmt.Printf(" Status:\t\t\t%s\n", healthStatus.Status) } case hcloud.LoadBalancerTargetTypeLabelSelector: fmt.Printf(" Label Selector:\t\t%s\n", target.LabelSelector.Selector) fmt.Printf(" Targets: (%d)\n", len(target.Targets)) if len(target.Targets) == 0 { fmt.Print(" No targets\n") } if !withLabelSelectorTargets { continue } for _, lbtarget := range target.Targets { fmt.Printf(" - Type:\t\t\t\t%s\n", lbtarget.Type) fmt.Printf(" Server ID:\t\t\t%d\n", lbtarget.Server.Server.ID) fmt.Printf(" Status:\n") for _, healthStatus := range lbtarget.HealthStatus { fmt.Printf(" - Service:\t\t\t%d\n", healthStatus.ListenPort) fmt.Printf(" Status:\t\t\t%s\n", healthStatus.Status) } } case hcloud.LoadBalancerTargetTypeIP: fmt.Printf(" IP:\t\t\t\t%s\n", target.IP.IP) fmt.Printf(" Status:\n") for _, healthStatus := range target.HealthStatus { fmt.Printf(" - Service:\t\t\t%d\n", healthStatus.ListenPort) fmt.Printf(" Status:\t\t\t%s\n", healthStatus.Status) } } } fmt.Printf("Traffic:\n") fmt.Printf(" Outgoing:\t%v\n", humanize.IBytes(loadBalancer.OutgoingTraffic)) fmt.Printf(" Ingoing:\t%v\n", humanize.IBytes(loadBalancer.IngoingTraffic)) fmt.Printf(" Included:\t%v\n", humanize.IBytes(loadBalancer.IncludedTraffic)) fmt.Printf("Protection:\n") fmt.Printf(" Delete:\t%s\n", util.YesNo(loadBalancer.Protection.Delete)) fmt.Print("Labels:\n") if len(loadBalancer.Labels) == 0 { fmt.Print(" No labels\n") } else { for key, value := range loadBalancer.Labels { fmt.Printf(" %s: %s\n", key, value) } } return nil }, }
DescribeCmd defines a command for describing a LoadBalancer.
View Source
var ListCmd = base.ListCmd{ ResourceNamePlural: "Load Balancer", DefaultColumns: []string{"id", "name", "ipv4", "ipv6", "type", "location", "network_zone"}, Fetch: func(ctx context.Context, client hcapi2.Client, cmd *cobra.Command, listOpts hcloud.ListOpts) ([]interface{}, error) { loadBalancers, _, err := client.LoadBalancer().List(ctx, hcloud.LoadBalancerListOpts{ListOpts: listOpts}) var resources []interface{} for _, r := range loadBalancers { resources = append(resources, r) } return resources, err }, OutputTable: func(client hcapi2.Client) *output.Table { return output.NewTable(). AddAllowedFields(hcloud.LoadBalancer{}). AddFieldFn("ipv4", output.FieldFn(func(obj interface{}) string { loadbalancer := obj.(*hcloud.LoadBalancer) return loadbalancer.PublicNet.IPv4.IP.String() })). AddFieldFn("ipv6", output.FieldFn(func(obj interface{}) string { loadbalancer := obj.(*hcloud.LoadBalancer) return loadbalancer.PublicNet.IPv6.IP.String() })). AddFieldFn("type", output.FieldFn(func(obj interface{}) string { loadbalancer := obj.(*hcloud.LoadBalancer) return loadbalancer.LoadBalancerType.Name })). AddFieldFn("location", output.FieldFn(func(obj interface{}) string { loadbalancer := obj.(*hcloud.LoadBalancer) return loadbalancer.Location.Name })). AddFieldFn("network_zone", output.FieldFn(func(obj interface{}) string { loadbalancer := obj.(*hcloud.LoadBalancer) return string(loadbalancer.Location.NetworkZone) })). AddFieldFn("labels", output.FieldFn(func(obj interface{}) string { loadBalancer := obj.(*hcloud.LoadBalancer) return util.LabelsToString(loadBalancer.Labels) })). AddFieldFn("protection", output.FieldFn(func(obj interface{}) string { loadBalancer := obj.(*hcloud.LoadBalancer) var protection []string if loadBalancer.Protection.Delete { protection = append(protection, "delete") } return strings.Join(protection, ", ") })). AddFieldFn("created", output.FieldFn(func(obj interface{}) string { loadBalancer := obj.(*hcloud.LoadBalancer) return util.Datetime(loadBalancer.Created) })) }, JSONSchema: func(resources []interface{}) interface{} { var loadBalancerSchemas []schema.LoadBalancer for _, resource := range resources { loadBalancer := resource.(*hcloud.LoadBalancer) loadBalancerSchema := schema.LoadBalancer{ ID: loadBalancer.ID, Name: loadBalancer.Name, PublicNet: schema.LoadBalancerPublicNet{ Enabled: loadBalancer.PublicNet.Enabled, IPv4: schema.LoadBalancerPublicNetIPv4{ IP: loadBalancer.PublicNet.IPv4.IP.String(), }, IPv6: schema.LoadBalancerPublicNetIPv6{ IP: loadBalancer.PublicNet.IPv6.IP.String(), }, }, Created: loadBalancer.Created, Labels: loadBalancer.Labels, LoadBalancerType: util.LoadBalancerTypeToSchema(*loadBalancer.LoadBalancerType), Location: util.LocationToSchema(*loadBalancer.Location), IncludedTraffic: loadBalancer.IncludedTraffic, OutgoingTraffic: &loadBalancer.OutgoingTraffic, IngoingTraffic: &loadBalancer.IngoingTraffic, Protection: schema.LoadBalancerProtection{ Delete: loadBalancer.Protection.Delete, }, Algorithm: schema.LoadBalancerAlgorithm{Type: string(loadBalancer.Algorithm.Type)}, } for _, service := range loadBalancer.Services { serviceSchema := schema.LoadBalancerService{ Protocol: string(service.Protocol), ListenPort: service.ListenPort, DestinationPort: service.DestinationPort, Proxyprotocol: service.Proxyprotocol, HealthCheck: &schema.LoadBalancerServiceHealthCheck{ Protocol: string(service.HealthCheck.Protocol), Port: service.HealthCheck.Port, Interval: int(service.HealthCheck.Interval.Seconds()), Timeout: int(service.HealthCheck.Timeout.Seconds()), Retries: service.HealthCheck.Retries, }, } if service.Protocol != hcloud.LoadBalancerServiceProtocolTCP { serviceSchema.HTTP = &schema.LoadBalancerServiceHTTP{ StickySessions: service.HTTP.StickySessions, CookieName: service.HTTP.CookieName, CookieLifetime: int(service.HTTP.CookieLifetime.Seconds()), RedirectHTTP: service.HTTP.RedirectHTTP, } } if service.HealthCheck.HTTP != nil { serviceSchema.HealthCheck.HTTP = &schema.LoadBalancerServiceHealthCheckHTTP{ Domain: service.HealthCheck.HTTP.Domain, Path: service.HealthCheck.HTTP.Path, StatusCodes: service.HealthCheck.HTTP.StatusCodes, TLS: service.HealthCheck.HTTP.TLS, Response: service.HealthCheck.HTTP.Response, } } loadBalancerSchema.Services = append(loadBalancerSchema.Services, serviceSchema) } for _, target := range loadBalancer.Targets { targetSchema := schema.LoadBalancerTarget{ Type: string(target.Type), UsePrivateIP: target.UsePrivateIP, } if target.Type == hcloud.LoadBalancerTargetTypeServer { targetSchema.Server = &schema.LoadBalancerTargetServer{ID: target.Server.Server.ID} } if target.Type == hcloud.LoadBalancerTargetTypeLabelSelector { targetSchema.LabelSelector = &schema.LoadBalancerTargetLabelSelector{Selector: target.LabelSelector.Selector} } if target.Type == hcloud.LoadBalancerTargetTypeIP { targetSchema.IP = &schema.LoadBalancerTargetIP{IP: target.IP.IP} } for _, healthStatus := range target.HealthStatus { targetSchema.HealthStatus = append(targetSchema.HealthStatus, schema.LoadBalancerTargetHealthStatus{ ListenPort: healthStatus.ListenPort, Status: string(healthStatus.Status), }) } loadBalancerSchema.Targets = append(loadBalancerSchema.Targets, targetSchema) } loadBalancerSchemas = append(loadBalancerSchemas, loadBalancerSchema) } return loadBalancerSchemas }, }
Functions ¶
Types ¶
This section is empty.
Source Files
¶
- add_service.go
- add_target.go
- attach_to_network.go
- change_algorithm.go
- change_type.go
- create.go
- delete.go
- delete_service.go
- describe.go
- detach_from_network.go
- disable_protection.go
- disable_public_interface.go
- enable_protection.go
- enable_public_interface.go
- labels.go
- list.go
- load_balancer.go
- metrics.go
- remove_target.go
- set_rdns.go
- update.go
- update_service.go
Click to show internal directories.
Click to hide internal directories.