types

package
v0.5.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 10, 2024 License: Apache-2.0 Imports: 7 Imported by: 0

Documentation

Index

Constants

View Source
const (
	UpstreamPassHostPass = "pass"
)

Variables

View Source
var (
	//go:embed data/plugin_default_values.json
	PluginDefaultValuesJson []byte

	PluginDefaultValues map[string]Plugin
)
View Source
var (
	ReservedKeys = map[string]struct{}{
		"if":           {},
		"then":         {},
		"else":         {},
		"default":      {},
		"type":         {},
		"properties":   {},
		"dependencies": {},
		"items":        {},
	}
)

ReservedKeys of default values generated from json schema Special cases: "google-cloud-logging": resource.type = global Other keys already checked manually

Functions

func FilterResources added in v0.5.0

func FilterResources[T HasLabels](filters Labels, resources []T) []T

func PtrOf added in v0.5.0

func PtrOf[T any](v T) *T

func SetArrayDefaultValue added in v0.2.1

func SetArrayDefaultValue(array []interface{}, schema map[string]interface{}) []interface{}

func SetDefaultValue added in v0.2.1

func SetDefaultValue(object, defaultObject map[string]interface{}) map[string]interface{}

func SetHealthCheckerDefaultValues added in v0.5.0

func SetHealthCheckerDefaultValues(checker *UpstreamHealthCheck)

func SetRouteDefaultValues added in v0.5.0

func SetRouteDefaultValues(route *Route)

func SetSSLDefaultValues added in v0.5.0

func SetSSLDefaultValues(ssl *SSL)

func SetServiceDefaultValues added in v0.5.0

func SetServiceDefaultValues(service *Service)

func SetStreamRouteDefaultValues added in v0.5.0

func SetStreamRouteDefaultValues(sr *StreamRoute)

func SetUpstreamDefaultValues added in v0.5.0

func SetUpstreamDefaultValues(upstream *Upstream)

Types

type ClientTLS

type ClientTLS struct {
	Cert string `json:"client_cert,omitempty" yaml:"client_cert,omitempty"`
	Key  string `json:"client_key,omitempty" yaml:"client_key,omitempty"`
	// ClientCertID is the referenced SSL id, can't be used with client_cert and client_key
	ClientCertID string `json:"client_cert_id,omitempty"`

	// Verify Turn on server certificate verification, currently only kafka upstream is supported
	Verify *bool `json:"verify,omitempty" yaml:"verify,omitempty"`
}

ClientTLS is tls cert and key use in mTLS

type Configuration

type Configuration struct {
	Name            string             `yaml:"name" json:"name"`
	Version         string             `yaml:"version" json:"version"`
	Meta            *ConfigurationMeta `yaml:"meta,omitempty" json:"meta,omitempty"`
	Services        []*Service         `yaml:"services,omitempty" json:"services,omitempty"`
	Routes          []*Route           `yaml:"routes,omitempty" json:"routes,omitempty"`
	Consumers       []*Consumer        `yaml:"consumers,omitempty" json:"consumers,omitempty"`
	SSLs            []*SSL             `yaml:"ssls,omitempty" json:"ssls,omitempty"`
	GlobalRules     []*GlobalRule      `yaml:"global_rules,omitempty" json:"global_rules,omitempty"`
	PluginConfigs   []*PluginConfig    `yaml:"plugin_configs,omitempty" json:"plugin_configs,omitempty"`
	ConsumerGroups  []*ConsumerGroup   `yaml:"consumer_groups,omitempty" json:"consumer_groups,omitempty"`
	PluginMetadatas []*PluginMetadata  `yaml:"plugin_metadatas,omitempty" json:"plugin_metadatas,omitempty"`
	StreamRoutes    []*StreamRoute     `yaml:"stream_routes,omitempty" json:"stream_routes,omitempty"`
	Upstreams       []*Upstream        `yaml:"upstreams,omitempty" json:"upstreams,omitempty"`
}

Configuration is the configuration of services

type ConfigurationMeta added in v0.5.0

type ConfigurationMeta struct {
	Mode   ConfigurationMode `json:"mode,omitempty" yaml:"mode,omitempty"`
	Labels Labels            `json:"labels,omitempty" yaml:"labels,omitempty"`
}

type ConfigurationMode added in v0.5.0

type ConfigurationMode string
var (
	ModeFull    ConfigurationMode = "full"
	ModePartial ConfigurationMode = "partial"
)

type Consumer added in v0.2.0

type Consumer struct {
	Username string `json:"username" yaml:"username"`
	Desc     string `json:"desc,omitempty" yaml:"desc,omitempty"`
	Labels   Labels `json:"labels,omitempty" yaml:"labels,omitempty"`

	Plugins Plugins `json:"plugins,omitempty" yaml:"plugins,omitempty"`
	GroupID string  `json:"group_id,omitempty" yaml:"group_id,omitempty"`
}

Consumer represents the consumer object in APISIX.

func (*Consumer) GetLabels added in v0.5.0

func (c *Consumer) GetLabels() Labels

func (*Consumer) SetLabel added in v0.5.0

func (c *Consumer) SetLabel(k, v string)

type ConsumerGroup added in v0.2.0

type ConsumerGroup struct {
	ID     string `json:"id,omitempty" yaml:"id,omitempty"`
	Desc   string `json:"desc,omitempty" yaml:"desc,omitempty"`
	Labels Labels `json:"labels,omitempty" yaml:"labels,omitempty"`

	Plugins Plugins `json:"plugins" yaml:"plugins"`
}

ConsumerGroup apisix consumer group object

func (*ConsumerGroup) GetLabels added in v0.5.0

func (c *ConsumerGroup) GetLabels() Labels

func (*ConsumerGroup) SetLabel added in v0.5.0

func (c *ConsumerGroup) SetLabel(k, v string)

type GlobalRule added in v0.2.0

type GlobalRule struct {
	ID      string  `json:"id" yaml:"id"`
	Plugins Plugins `json:"plugins" yaml:"plugins"`
}

GlobalRule represents the global_rule object in APISIX.

type HasLabels added in v0.5.0

type HasLabels interface {
	GetLabels() Labels
	SetLabel(k, v string)
}

type KeepalivePool added in v0.5.0

type KeepalivePool struct {
	Size        *int `json:"size,omitempty" yaml:"size,omitempty"`
	IdleTimeout *int `json:"idle_timeout,omitempty" yaml:"idle_timeout,omitempty"`
	Requests    *int `json:"requests,omitempty" yaml:"requests,omitempty"`
}

type Labels added in v0.2.0

type Labels map[string]string

Labels is the APISIX resource labels

type MutualTLSClientConfig added in v0.4.0

type MutualTLSClientConfig struct {
	CA               string   `json:"ca,omitempty" yaml:"ca,omitempty"`
	Depth            *int     `json:"depth,omitempty" yaml:"depth,omitempty"`
	SkipMtlsUriRegex []string `json:"skip_mtls_uri_regex,omitempty" yaml:"skip_mtls_uri_regex,omitempty"`
}

MutualTLSClientConfig apisix SSL client field

type Plugin added in v0.2.1

type Plugin map[string]interface{}

func GetPluginDefaultValues added in v0.2.1

func GetPluginDefaultValues(name string, value Plugin) Plugin

func SpecialPatches added in v0.2.1

func SpecialPatches(name string, value Plugin) Plugin

type PluginConfig added in v0.2.0

type PluginConfig struct {
	ID     string `json:"id,omitempty" yaml:"id,omitempty"`
	Desc   string `json:"desc,omitempty" yaml:"desc,omitempty"`
	Labels Labels `json:"labels,omitempty" yaml:"labels,omitempty"`

	Plugins Plugins `json:"plugins" yaml:"plugins"`
}

PluginConfig apisix plugin object

func (*PluginConfig) GetLabels added in v0.5.0

func (p *PluginConfig) GetLabels() Labels

func (*PluginConfig) SetLabel added in v0.5.0

func (p *PluginConfig) SetLabel(k, v string)

type PluginMetadata added in v0.2.0

type PluginMetadata struct {
	ID     string                 `json:"id,omitempty" yaml:"id,omitempty"`
	Config map[string]interface{} `json:",inline" yaml:",inline"`
}

func (*PluginMetadata) MarshalJSON added in v0.2.0

func (s *PluginMetadata) MarshalJSON() ([]byte, error)

func (*PluginMetadata) UnmarshalJSON added in v0.2.0

func (s *PluginMetadata) UnmarshalJSON(p []byte) error

type Plugins

type Plugins map[string]Plugin

func (*Plugins) DeepCopy

func (p *Plugins) DeepCopy() *Plugins

func (*Plugins) DeepCopyInto

func (p *Plugins) DeepCopyInto(out *Plugins)

func (*Plugins) UnmarshalJSON added in v0.2.1

func (p *Plugins) UnmarshalJSON(cont []byte) error

type Route

type Route struct {
	ID          string `json:"id" yaml:"id"`
	Name        string `json:"name" yaml:"name"`
	Labels      Labels `json:"labels,omitempty" yaml:"labels,omitempty"`
	Description string `json:"desc,omitempty" yaml:"desc,omitempty"`

	Host            string           `json:"host,omitempty" yaml:"host,omitempty"`
	Hosts           []string         `json:"hosts,omitempty" yaml:"hosts,omitempty"`
	Uri             string           `json:"uri,omitempty" yaml:"uri,omitempty"`
	Uris            []string         `json:"uris,omitempty" yaml:"uris,omitempty"`
	Priority        *int             `json:"priority,omitempty" yaml:"priority,omitempty"`
	Timeout         *UpstreamTimeout `json:"timeout,omitempty" yaml:"timeout,omitempty"`
	Vars            Vars             `json:"vars,omitempty" yaml:"vars,omitempty"`
	Methods         []string         `json:"methods,omitempty" yaml:"methods,omitempty"`
	EnableWebsocket bool             `json:"enable_websocket,omitempty" yaml:"enable_websocket,omitempty"`
	RemoteAddr      string           `json:"remote_addr,omitempty" yaml:"remote_addr,omitempty"`
	RemoteAddrs     []string         `json:"remote_addrs,omitempty" yaml:"remote_addrs,omitempty"`
	Upstream        *Upstream        `json:"upstream,omitempty" yaml:"upstream,omitempty"`
	UpstreamID      string           `json:"upstream_id,omitempty" yaml:"upstream_id,omitempty"`
	ServiceID       string           `json:"service_id,omitempty" yaml:"service_id,omitempty"`
	Plugins         Plugins          `json:"plugins,omitempty" yaml:"plugins,omitempty"`
	PluginConfigID  string           `json:"plugin_config_id,omitempty" yaml:"plugin_config_id,omitempty"`
	FilterFunc      string           `json:"filter_func,omitempty" yaml:"filter_func,omitempty"`
	Script          string           `json:"script,omitempty" yaml:"script,omitempty"`
	ScriptID        string           `json:"script_id,omitempty" yaml:"script_id,omitempty"`
	Status          *int             `json:"status,omitempty" yaml:"status,omitempty"`

	// api7
	StripPathPrefix bool `json:"strip_path_prefix,omitempty" yaml:"strip_path_prefix,omitempty"`
}

Route apisix route object

func (*Route) GetLabels added in v0.5.0

func (r *Route) GetLabels() Labels

func (*Route) SetLabel added in v0.5.0

func (r *Route) SetLabel(k, v string)

func (*Route) UnmarshalJSON added in v0.5.0

func (r *Route) UnmarshalJSON(cont []byte) error

type SSL added in v0.2.0

type SSL struct {
	ID            string                 `json:"id" yaml:"id"`
	Labels        Labels                 `json:"labels,omitempty" yaml:"labels,omitempty"`
	Type          string                 `json:"type,omitempty" yaml:"type,omitempty"`
	SNI           string                 `json:"sni" yaml:"sni"`
	SNIs          []string               `json:"snis" yaml:"snis"`
	Cert          string                 `json:"cert,omitempty" yaml:"cert,omitempty"`
	Key           string                 `json:"key,omitempty" yaml:"key,omitempty"`
	Certs         []string               `json:"certs,omitempty" yaml:"certs,omitempty"`
	Keys          []string               `json:"keys,omitempty" yaml:"keys,omitempty"`
	Client        *MutualTLSClientConfig `json:"client,omitempty" yaml:"client,omitempty"`
	ExpTime       int                    `json:"exptime,omitempty" yaml:"exptime,omitempty"`
	Status        *int                   `json:"status,omitempty" yaml:"status,omitempty"`
	SSLProtocols  []string               `json:"ssl_protocols,omitempty" yaml:"ssl_protocols,omitempty"`
	ValidityStart int                    `json:"validity_start,omitempty" yaml:"validity_start,omitempty"`
	ValidityEnd   int                    `json:"validity_end,omitempty" yaml:"validity_end,omitempty"`
}

SSL represents the ssl object in APISIX.

func (*SSL) GetLabels added in v0.5.0

func (ssl *SSL) GetLabels() Labels

func (*SSL) SetLabel added in v0.5.0

func (ssl *SSL) SetLabel(k, v string)

func (*SSL) UnmarshalJSON added in v0.5.0

func (ssl *SSL) UnmarshalJSON(cont []byte) error

type Service

type Service struct {
	ID string `json:"id" yaml:"id"`

	Name        string `json:"name" yaml:"name"`
	Description string `json:"desc,omitempty" yaml:"desc,omitempty"`
	// Labels are used for resource classification and indexing
	Labels Labels `json:"labels,omitempty" yaml:"labels,omitempty"`
	// HTTP hosts for this service.
	Hosts []string `json:"hosts,omitempty" yaml:"hosts,omitempty"`
	// Plugin settings on Service level
	Plugins Plugins `json:"plugins,omitempty" yaml:"plugins,omitempty"`
	// Upstream settings for the Service.
	Upstream *Upstream `json:"upstream,omitempty" yaml:"upstream,omitempty"`
	// UpstreamID settings for the Service.
	UpstreamID string `json:"upstream_id,omitempty" yaml:"upstream_id,omitempty"`
	// Enables a websocket. Set to false by default.
	EnableWebsocket bool `json:"enable_websocket,omitempty" yaml:"enable_websocket,omitempty"`

	Script string `json:"script,omitempty" yaml:"script,omitempty"`

	// api7
	PathPrefix string `json:"path_prefix,omitempty" yaml:"path_prefix,omitempty"`
	Status     int    `json:"status,omitempty" yaml:"status,omitempty"`
}

Service is the abstraction of a backend service on API gateway.

func (*Service) GetLabels added in v0.5.0

func (s *Service) GetLabels() Labels

func (*Service) SetLabel added in v0.5.0

func (s *Service) SetLabel(k, v string)

func (*Service) UnmarshalJSON added in v0.5.0

func (s *Service) UnmarshalJSON(cont []byte) error

type StreamRoute added in v0.4.0

type StreamRoute struct {
	ID         string    `json:"id,omitempty" yaml:"id,omitempty"`
	Desc       string    `json:"desc,omitempty" yaml:"desc,omitempty"`
	Labels     Labels    `json:"labels,omitempty" yaml:"labels,omitempty"`
	RemoteAddr string    `json:"remote_addr,omitempty" yaml:"remote_addr,omitempty"`
	ServerAddr string    `json:"server_addr,omitempty" yaml:"server_addr,omitempty"`
	ServerPort int       `json:"server_port,omitempty" yaml:"server_port,omitempty"`
	SNI        string    `json:"sni,omitempty" yaml:"sni,omitempty"`
	Upstream   *Upstream `json:"upstream,omitempty" yaml:"upstream,omitempty"`
	UpstreamID string    `json:"upstream_id,omitempty" yaml:"upstream_id,omitempty"`
	ServiceID  string    `json:"service_id,omitempty" yaml:"service_id,omitempty"`
	Plugins    Plugins   `json:"plugins,omitempty" yaml:"plugins,omitempty"`
}

StreamRoute represents the stream_route object in APISIX.

func (*StreamRoute) GetLabels added in v0.5.0

func (s *StreamRoute) GetLabels() Labels

func (*StreamRoute) SetLabel added in v0.5.0

func (s *StreamRoute) SetLabel(k, v string)

func (*StreamRoute) UnmarshalJSON added in v0.5.0

func (s *StreamRoute) UnmarshalJSON(cont []byte) error

type StringOrSlice

type StringOrSlice struct {
	StrVal   string   `json:"-"`
	SliceVal []string `json:"-"`
}

StringOrSlice represents a string or a string slice. TODO Do not use interface{} to avoid the reflection overheads.

func (*StringOrSlice) MarshalJSON

func (s *StringOrSlice) MarshalJSON() ([]byte, error)

func (*StringOrSlice) UnmarshalJSON

func (s *StringOrSlice) UnmarshalJSON(p []byte) error

type Upstream

type Upstream struct {
	// ID is the upstream name. It should be unique among all upstreams
	// in the same service.
	ID     string `json:"id" yaml:"id"`
	Name   string `json:"name" yaml:"name"`
	Labels Labels `json:"labels,omitempty" yaml:"labels,omitempty"`

	Type          string               `json:"type,omitempty" yaml:"type,omitempty"`
	HashOn        string               `json:"hash_on,omitempty" yaml:"hash_on,omitempty"`
	Key           string               `json:"key,omitempty" yaml:"key,omitempty"`
	Checks        *UpstreamHealthCheck `json:"checks,omitempty" yaml:"checks,omitempty"`
	Nodes         UpstreamNodes        `json:"nodes" yaml:"nodes"`
	Scheme        string               `json:"scheme,omitempty" yaml:"scheme,omitempty"`
	Retries       int                  `json:"retries,omitempty" yaml:"retries,omitempty"`
	RetryTimeout  int                  `json:"retry_timeout,omitempty" yaml:"retry_timeout,omitempty"`
	Timeout       *UpstreamTimeout     `json:"timeout,omitempty" yaml:"timeout,omitempty"`
	TLS           *ClientTLS           `json:"tls,omitempty" yaml:"tls,omitempty"`
	KeepalivePool *KeepalivePool       `json:"keepalive_pool,omitempty" yaml:"keepalive_pool,omitempty"`
	PassHost      string               `json:"pass_host,omitempty" yaml:"pass_host,omitempty"`
	UpstreamHost  string               `json:"upstream_host,omitempty" yaml:"upstream_host,omitempty"`

	// for Service Discovery
	ServiceName   string            `json:"service_name,omitempty" yaml:"service_name,omitempty"`
	DiscoveryType string            `json:"discovery_type,omitempty" yaml:"discovery_type,omitempty"`
	DiscoveryArgs map[string]string `json:"discovery_args,omitempty" yaml:"discovery_args,omitempty"`
}

Upstream is the definition of the upstream on Service.

func (*Upstream) GetLabels added in v0.5.0

func (u *Upstream) GetLabels() Labels

func (*Upstream) SetLabel added in v0.5.0

func (u *Upstream) SetLabel(k, v string)

func (*Upstream) UnmarshalJSON added in v0.5.0

func (u *Upstream) UnmarshalJSON(cont []byte) error

type UpstreamActiveHealthCheck

type UpstreamActiveHealthCheck struct {
	Type               string                             `json:"type,omitempty" yaml:"type,omitempty"`
	Timeout            *int                               `json:"timeout,omitempty" yaml:"timeout,omitempty"`
	Concurrency        *int                               `json:"concurrency,omitempty" yaml:"concurrency,omitempty"`
	Host               string                             `json:"host,omitempty" yaml:"host,omitempty"`
	Port               int32                              `json:"port,omitempty" yaml:"port,omitempty"`
	HTTPPath           string                             `json:"http_path,omitempty" yaml:"http_path,omitempty"`
	HTTPSVerifyCert    *bool                              `json:"https_verify_certificate,omitempty" yaml:"https_verify_certificate,omitempty"`
	HTTPRequestHeaders []string                           `json:"req_headers,omitempty" yaml:"req_headers,omitempty"`
	Healthy            UpstreamActiveHealthCheckHealthy   `json:"healthy,omitempty" yaml:"healthy,omitempty"`
	Unhealthy          UpstreamActiveHealthCheckUnhealthy `json:"unhealthy,omitempty" yaml:"unhealthy,omitempty"`
}

UpstreamActiveHealthCheck defines the active kind of upstream health check.

type UpstreamActiveHealthCheckHealthy

type UpstreamActiveHealthCheckHealthy struct {
	UpstreamPassiveHealthCheckHealthy `json:",inline" yaml:",inline"`

	Interval *int `json:"interval,omitempty" yaml:"interval,omitempty"`
}

UpstreamActiveHealthCheckHealthy defines the conditions to judge whether an upstream node is healthy with the active manner.

type UpstreamActiveHealthCheckUnhealthy

type UpstreamActiveHealthCheckUnhealthy struct {
	UpstreamPassiveHealthCheckUnhealthy `json:",inline" yaml:",inline"`

	Interval *int `json:"interval,omitempty" yaml:"interval,omitempty"`
}

UpstreamActiveHealthCheckUnhealthy defines the conditions to judge whether an upstream node is unhealthy with the active manager.

type UpstreamHealthCheck

type UpstreamHealthCheck struct {
	Active  *UpstreamActiveHealthCheck  `json:"active" yaml:"active"`
	Passive *UpstreamPassiveHealthCheck `json:"passive,omitempty" yaml:"passive,omitempty"`
}

UpstreamHealthCheck defines the active and/or passive health check for an Upstream, with the upstream health check feature, pods can be kicked out or joined in quickly, if the feedback of Kubernetes liveness/readiness probe is long.

type UpstreamNode

type UpstreamNode struct {
	Host     string                 `json:"host" yaml:"host"`
	Port     int                    `json:"port" yaml:"port"`
	Weight   int                    `json:"weight,omitempty" yaml:"weight,omitempty"`
	Priority *int                   `json:"priority,omitempty" yaml:"priority,omitempty"`
	Metadata map[string]interface{} `json:"metadata,omitempty" yaml:"metadata,omitempty"`
}

UpstreamNode is the node in upstream

type UpstreamNodes

type UpstreamNodes []UpstreamNode

UpstreamNodes is the upstream node list.

func (*UpstreamNodes) UnmarshalJSON

func (n *UpstreamNodes) UnmarshalJSON(p []byte) error

UnmarshalJSON implements json.Unmarshaler interface. lua-cjson doesn't distinguish empty array and table, and by default empty array will be encoded as '{}'. We have to maintain the compatibility.

type UpstreamPassiveHealthCheck

type UpstreamPassiveHealthCheck struct {
	Type      string                              `json:"type,omitempty" yaml:"type,omitempty"`
	Healthy   UpstreamPassiveHealthCheckHealthy   `json:"healthy,omitempty" yaml:"healthy,omitempty"`
	Unhealthy UpstreamPassiveHealthCheckUnhealthy `json:"unhealthy,omitempty" yaml:"unhealthy,omitempty"`
}

UpstreamPassiveHealthCheck defines the passive kind of upstream health check.

type UpstreamPassiveHealthCheckHealthy

type UpstreamPassiveHealthCheckHealthy struct {
	HTTPStatuses []int `json:"http_statuses,omitempty" yaml:"http_statuses,omitempty"`
	Successes    *int  `json:"successes,omitempty" yaml:"successes,omitempty"`
}

UpstreamPassiveHealthCheckHealthy defines the conditions to judge whether an upstream node is healthy with the passive manner.

type UpstreamPassiveHealthCheckUnhealthy

type UpstreamPassiveHealthCheckUnhealthy struct {
	HTTPStatuses []int `json:"http_statuses,omitempty" yaml:"http_statuses,omitempty"`
	HTTPFailures *int  `json:"http_failures,omitempty" yaml:"http_failures,omitempty"`
	TCPFailures  *int  `json:"tcp_failures,omitempty" yaml:"tcp_failures,omitempty"`
	Timeouts     *int  `json:"timeouts,omitempty" yaml:"timeouts,omitempty"`
}

UpstreamPassiveHealthCheckUnhealthy defines the conditions to judge whether an upstream node is unhealthy with the passive manager.

type UpstreamTimeout

type UpstreamTimeout struct {
	// Connect is the connect timeout
	Connect int `json:"connect" yaml:"connect"`
	// Send is the send timeout
	Send int `json:"send" yaml:"send"`
	// Read is the read timeout
	Read int `json:"read" yaml:"read"`
}

UpstreamTimeout represents the timeout settings on Upstream.

type Vars

type Vars [][]StringOrSlice

Vars represents the route match expressions of APISIX.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL