in cluster-autoscaler/cloudprovider/hetzner/hcloud-go/hcloud/schema.go [704:803]
func loadBalancerCreateOptsToSchema(opts LoadBalancerCreateOpts) schema.LoadBalancerCreateRequest {
req := schema.LoadBalancerCreateRequest{
Name: opts.Name,
PublicInterface: opts.PublicInterface,
}
if opts.Algorithm != nil {
req.Algorithm = &schema.LoadBalancerCreateRequestAlgorithm{
Type: string(opts.Algorithm.Type),
}
}
if opts.LoadBalancerType.ID != 0 {
req.LoadBalancerType = opts.LoadBalancerType.ID
} else if opts.LoadBalancerType.Name != "" {
req.LoadBalancerType = opts.LoadBalancerType.Name
}
if opts.Location != nil {
if opts.Location.ID != 0 {
req.Location = String(strconv.Itoa(opts.Location.ID))
} else {
req.Location = String(opts.Location.Name)
}
}
if opts.NetworkZone != "" {
req.NetworkZone = String(string(opts.NetworkZone))
}
if opts.Labels != nil {
req.Labels = &opts.Labels
}
if opts.Network != nil {
req.Network = Int(opts.Network.ID)
}
for _, target := range opts.Targets {
schemaTarget := schema.LoadBalancerCreateRequestTarget{}
switch target.Type {
case LoadBalancerTargetTypeServer:
schemaTarget.Type = string(LoadBalancerTargetTypeServer)
schemaTarget.Server = &schema.LoadBalancerCreateRequestTargetServer{ID: target.Server.Server.ID}
case LoadBalancerTargetTypeLabelSelector:
schemaTarget.Type = string(LoadBalancerTargetTypeLabelSelector)
schemaTarget.LabelSelector = &schema.LoadBalancerCreateRequestTargetLabelSelector{Selector: target.LabelSelector.Selector}
case LoadBalancerTargetTypeIP:
schemaTarget.Type = string(LoadBalancerTargetTypeIP)
schemaTarget.IP = &schema.LoadBalancerCreateRequestTargetIP{IP: target.IP.IP}
}
req.Targets = append(req.Targets, schemaTarget)
}
for _, service := range opts.Services {
schemaService := schema.LoadBalancerCreateRequestService{
Protocol: string(service.Protocol),
ListenPort: service.ListenPort,
DestinationPort: service.DestinationPort,
Proxyprotocol: service.Proxyprotocol,
}
if service.HTTP != nil {
schemaService.HTTP = &schema.LoadBalancerCreateRequestServiceHTTP{
RedirectHTTP: service.HTTP.RedirectHTTP,
StickySessions: service.HTTP.StickySessions,
CookieName: service.HTTP.CookieName,
}
if sec := service.HTTP.CookieLifetime.Seconds(); sec != 0 {
schemaService.HTTP.CookieLifetime = Int(int(sec))
}
if service.HTTP.Certificates != nil {
certificates := []int{}
for _, certificate := range service.HTTP.Certificates {
certificates = append(certificates, certificate.ID)
}
schemaService.HTTP.Certificates = &certificates
}
}
if service.HealthCheck != nil {
schemaHealthCheck := &schema.LoadBalancerCreateRequestServiceHealthCheck{
Protocol: string(service.HealthCheck.Protocol),
Port: service.HealthCheck.Port,
Retries: service.HealthCheck.Retries,
}
if service.HealthCheck.Interval != nil {
schemaHealthCheck.Interval = Int(int(service.HealthCheck.Interval.Seconds()))
}
if service.HealthCheck.Timeout != nil {
schemaHealthCheck.Timeout = Int(int(service.HealthCheck.Timeout.Seconds()))
}
if service.HealthCheck.HTTP != nil {
schemaHealthCheckHTTP := &schema.LoadBalancerCreateRequestServiceHealthCheckHTTP{
Domain: service.HealthCheck.HTTP.Domain,
Path: service.HealthCheck.HTTP.Path,
Response: service.HealthCheck.HTTP.Response,
TLS: service.HealthCheck.HTTP.TLS,
}
if service.HealthCheck.HTTP.StatusCodes != nil {
schemaHealthCheckHTTP.StatusCodes = &service.HealthCheck.HTTP.StatusCodes
}
schemaHealthCheck.HTTP = schemaHealthCheckHTTP
}
schemaService.HealthCheck = schemaHealthCheck
}
req.Services = append(req.Services, schemaService)
}
return req
}