Skip to content
This repository was archived by the owner on Aug 31, 2021. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
204 changes: 204 additions & 0 deletions openstack/elb/v3/listeners/requests.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
package listeners

import (
"github.com/huaweicloud/golangsdk"
)

// Type Protocol represents a listener protocol.
type Protocol string

// Supported attributes for create/update operations.
const (
ProtocolTCP Protocol = "TCP"
ProtocolUDP Protocol = "UDP"
ProtocolHTTP Protocol = "HTTP"
ProtocolHTTPS Protocol = "HTTPS"
)

// CreateOptsBuilder allows extensions to add additional parameters to the
// Create request.
type CreateOptsBuilder interface {
ToListenerCreateMap() (map[string]interface{}, error)
}

// CreateOpts represents options for creating a listener.
type CreateOpts struct {
// The administrative state of the Listener. A valid value is true (UP)
// or false (DOWN).
AdminStateUp *bool `json:"admin_state_up,omitempty"`

// the ID of the CA certificate used by the listener.
CAContainerRef string `json:"client_ca_tls_container_ref,omitempty"`

// The ID of the default pool with which the Listener is associated.
DefaultPoolID string `json:"default_pool_id,omitempty"`

// A reference to a Barbican container of TLS secrets.
DefaultTlsContainerRef string `json:"default_tls_container_ref,omitempty"`

// Human-readable description for the Listener.
Description string `json:"description,omitempty"`

// whether to use HTTP2.
Http2Enable *bool `json:"http2_enable,omitempty"`

// The load balancer on which to provision this listener.
LoadbalancerID string `json:"loadbalancer_id" required:"true"`

// Human-readable name for the Listener. Does not have to be unique.
Name string `json:"name,omitempty"`

// ProjectID is only required if the caller has an admin role and wants
// to create a pool for another project.
ProjectID string `json:"project_id,omitempty"`

// The protocol - can either be TCP, HTTP or HTTPS.
Protocol Protocol `json:"protocol" required:"true"`

// The port on which to listen for client traffic.
ProtocolPort int `json:"protocol_port" required:"true"`

// A list of references to TLS secrets.
SniContainerRefs []string `json:"sni_container_refs,omitempty"`

// Specifies the security policy used by the listener.
TlsCiphersPolicy string `json:"tls_ciphers_policy,omitempty"`

// Whether enable member retry
EnableMemberRetry *bool `json:"enable_member_retry,omitempty"`

// The keepalive timeout of the Listener.
KeepaliveTimeout *int `json:"keepalive_timeout,omitempty"`

// The client timeout of the Listener.
ClientTimeout *int `json:"client_timeout,omitempty"`

// The member timeout of the Listener.
MemberTimeout *int `json:"member_timeout,omitempty"`

// The ipgroup of the Listener.
IpGroup IpGroup `json:"ipgroup,omitempty"`

// Transparent client ip enable
TransparentClientIP *bool `json:"transparent_client_ip_enable,omitempty"`

// Enhance L7policy enable
EnhanceL7policy *bool `json:"enhance_l7policy_enable,omitempty"`
}

type IpGroup struct {
IpGroupId string `json:"ipgroup_id" required:"true"`
Enable *bool `json:"enable_ipgroup" required:"true"`
Type string `json:"type" required:"true"`
}

// ToListenerCreateMap builds a request body from CreateOpts.
func (opts CreateOpts) ToListenerCreateMap() (map[string]interface{}, error) {
return golangsdk.BuildRequestBody(opts, "listener")
}

// Create is an operation which provisions a new Listeners based on the
// configuration defined in the CreateOpts struct. Once the request is
// validated and progress has started on the provisioning process, a
// CreateResult will be returned.
//
// Users with an admin role can create Listeners on behalf of other tenants by
// specifying a TenantID attribute different than their own.
func Create(c *golangsdk.ServiceClient, opts CreateOptsBuilder) (r CreateResult) {
b, err := opts.ToListenerCreateMap()
if err != nil {
r.Err = err
return
}
_, r.Err = c.Post(rootURL(c), b, &r.Body, nil)
return
}

// Get retrieves a particular Listeners based on its unique ID.
func Get(c *golangsdk.ServiceClient, id string) (r GetResult) {
_, r.Err = c.Get(resourceURL(c, id), &r.Body, nil)
return
}

// UpdateOptsBuilder allows extensions to add additional parameters to the
// Update request.
type UpdateOptsBuilder interface {
ToListenerUpdateMap() (map[string]interface{}, error)
}

// UpdateOpts represents options for updating a Listener.
type UpdateOpts struct {
// The administrative state of the Listener. A valid value is true (UP)
// or false (DOWN).
AdminStateUp *bool `json:"admin_state_up,omitempty"`

// the ID of the CA certificate used by the listener.
CAContainerRef string `json:"client_ca_tls_container_ref,omitempty"`

// The ID of the default pool with which the Listener is associated.
DefaultPoolID string `json:"default_pool_id,omitempty"`

// A reference to a Barbican container of TLS secrets.
DefaultTlsContainerRef string `json:"default_tls_container_ref,omitempty"`

// Human-readable description for the Listener.
Description string `json:"description,omitempty"`

// whether to use HTTP2.
Http2Enable *bool `json:"http2_enable,omitempty"`

// Human-readable name for the Listener. Does not have to be unique.
Name string `json:"name,omitempty"`

// A list of references to TLS secrets.
SniContainerRefs []string `json:"sni_container_refs,omitempty"`

// Specifies the security policy used by the listener.
TlsCiphersPolicy string `json:"tls_ciphers_policy,omitempty"`

// Whether enable member retry
EnableMemberRetry *bool `json:"enable_member_retry,omitempty"`

// The keepalive timeout of the Listener.
KeepaliveTimeout *int `json:"keepalive_timeout,omitempty"`

// The client timeout of the Listener.
ClientTimeout *int `json:"client_timeout,omitempty"`

// The member timeout of the Listener.
MemberTimeout *int `json:"member_timeout,omitempty"`

// The ipgroup of the Listener.
IpGroup IpGroup `json:"ipgroup,omitempty"`

// Transparent client ip enable
TransparentClientIP *bool `json:"transparent_client_ip_enable,omitempty"`

// Enhance L7policy enable
EnhanceL7policy *bool `json:"enhance_l7policy_enable,omitempty"`
}

// ToListenerUpdateMap builds a request body from UpdateOpts.
func (opts UpdateOpts) ToListenerUpdateMap() (map[string]interface{}, error) {
return golangsdk.BuildRequestBody(opts, "listener")
}

// Update is an operation which modifies the attributes of the specified
// Listener.
func Update(c *golangsdk.ServiceClient, id string, opts UpdateOpts) (r UpdateResult) {
b, err := opts.ToListenerUpdateMap()
if err != nil {
r.Err = err
return
}
_, r.Err = c.Put(resourceURL(c, id), b, &r.Body, &golangsdk.RequestOpts{
OkCodes: []int{200, 202},
})
return
}

// Delete will permanently delete a particular Listeners based on its unique ID.
func Delete(c *golangsdk.ServiceClient, id string) (r DeleteResult) {
_, r.Err = c.Delete(resourceURL(c, id), nil)
return
}
120 changes: 120 additions & 0 deletions openstack/elb/v3/listeners/results.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
package listeners

import (
"github.com/huaweicloud/golangsdk"
)

type LoadBalancerID struct {
ID string `json:"id"`
}

// Listener is the primary load balancing configuration object that specifies
// the loadbalancer and port on which client traffic is received, as well
// as other details such as the load balancing method to be use, protocol, etc.
type Listener struct {
// The unique ID for the Listener.
ID string `json:"id"`

// The administrative state of the Listener. A valid value is true (UP) or false (DOWN).
AdminStateUp bool `json:"admin_state_up"`

// the ID of the CA certificate used by the listener.
CAContainerRef string `json:"client_ca_tls_container_ref"`

// The maximum number of connections allowed for the Loadbalancer.
// Default is -1, meaning no limit.
ConnLimit int `json:"connection_limit"`

// The UUID of default pool. Must have compatible protocol with listener.
DefaultPoolID string `json:"default_pool_id"`

// A reference to a Barbican container of TLS secrets.
DefaultTlsContainerRef string `json:"default_tls_container_ref"`

// Human-readable description for the Listener.
Description string `json:"description"`

// whether to use HTTP2.
Http2Enable bool `json:"http2_enable"`

// A list of load balancer IDs.
Loadbalancers []LoadBalancerID `json:"loadbalancers"`

// Human-readable name for the Listener. Does not have to be unique.
Name string `json:"name"`

// The protocol to loadbalance. A valid value is TCP, HTTP, or HTTPS.
Protocol string `json:"protocol"`

// The port on which to listen to client traffic that is associated with the
// Loadbalancer. A valid value is from 0 to 65535.
ProtocolPort int `json:"protocol_port"`

// The list of references to TLS secrets.
SniContainerRefs []string `json:"sni_container_refs"`

// Specifies the security policy used by the listener.
TlsCiphersPolicy string `json:"tls_ciphers_policy"`

// The provisioning status of the listener.
// This value is ACTIVE, PENDING_* or ERROR.
ProvisioningStatus string `json:"provisioning_status"`

// Whether enable member retry
EnableMemberRetry *bool `json:"enable_member_retry,omitempty"`

// The keepalive timeout of the Listener.
KeepaliveTimeout *int `json:"keepalive_timeout,omitempty"`

// The client timeout of the Listener.
ClientTimeout *int `json:"client_timeout,omitempty"`

// The member timeout of the Listener.
MemberTimeout *int `json:"member_timeout,omitempty"`

// The ipgroup of the Listener.
IpGroup IpGroup `json:"ipgroup,omitempty"`

// Transparent client ip enable
TransparentClientIP *bool `json:"transparent_client_ip_enable,omitempty"`

// Enhance L7policy enable
EnhanceL7policy *bool `json:"enhance_l7policy_enable,omitempty"`
}

type commonResult struct {
golangsdk.Result
}

// Extract is a function that accepts a result and extracts a listener.
func (r commonResult) Extract() (*Listener, error) {
var s struct {
Listener *Listener `json:"listener"`
}
err := r.ExtractInto(&s)
return s.Listener, err
}

// CreateResult represents the result of a create operation. Call its Extract
// method to interpret it as a Listener.
type CreateResult struct {
commonResult
}

// GetResult represents the result of a get operation. Call its Extract
// method to interpret it as a Listener.
type GetResult struct {
commonResult
}

// UpdateResult represents the result of an update operation. Call its Extract
// method to interpret it as a Listener.
type UpdateResult struct {
commonResult
}

// DeleteResult represents the result of a delete operation. Call its
// ExtractErr method to determine if the request succeeded or failed.
type DeleteResult struct {
golangsdk.ErrResult
}
16 changes: 16 additions & 0 deletions openstack/elb/v3/listeners/urls.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package listeners

import "github.com/huaweicloud/golangsdk"

const (
rootPath = "elb"
resourcePath = "listeners"
)

func rootURL(c *golangsdk.ServiceClient) string {
return c.ServiceURL(rootPath, resourcePath)
}

func resourceURL(c *golangsdk.ServiceClient, id string) string {
return c.ServiceURL(rootPath, resourcePath, id)
}