appmanager

package
v1.6.1 Latest Latest
Warning

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

Go to latest
Published: Sep 10, 2018 License: Apache-2.0 Imports: 35 Imported by: 0

Documentation

Index

Constants

View Source
const DEFAULT_BALANCE string = "round-robin"
View Source
const DEFAULT_HTTPS_PORT int32 = 443
View Source
const DEFAULT_HTTP_PORT int32 = 80
View Source
const DEFAULT_MODE string = "tcp"
View Source
const DefaultConfigMapLabel = "f5type in (virtual-server)"

Variables

View Source
var DEFAULT_PARTITION string

FIXME: remove this global variable.

Functions

func NewObjectDependencies added in v1.4.1

func NewObjectDependencies(
	obj interface{},
) (ObjectDependency, ObjectDependencies)

NewObjectDependencies parses an object and returns a map of its dependencies

func RegisterBigIPSchemaTypes added in v1.3.0

func RegisterBigIPSchemaTypes()

Add new data format to the library

Types

type AnnotationHealthMonitor added in v1.3.0

type AnnotationHealthMonitor struct {
	Path     string `json:"path"`
	Interval int    `json:"interval"`
	Send     string `json:"send"`
	Recv     string `json:"recv"`
	Timeout  int    `json:"timeout"`
}

This is the format for each item in the health monitor annotation used in the Ingress and Route objects.

type AnnotationHealthMonitors added in v1.3.0

type AnnotationHealthMonitors []AnnotationHealthMonitor

type BigIPConfig

type BigIPConfig struct {
	Virtuals           Virtuals            `json:"virtualServers,omitempty"`
	Pools              Pools               `json:"pools,omitempty"`
	Monitors           Monitors            `json:"monitors,omitempty"`
	Policies           []Policy            `json:"l7Policies,omitempty"`
	CustomProfiles     []CustomProfile     `json:"customProfiles,omitempty"`
	IRules             []IRule             `json:"iRules,omitempty"`
	InternalDataGroups []InternalDataGroup `json:"internalDataGroups,omitempty"`
	IApps              []IApp              `json:"iapps,omitempty"`
}

Config of all resources to configure on the BIG-IP

func (*BigIPConfig) SortMonitors added in v1.2.0

func (cfg *BigIPConfig) SortMonitors()

func (*BigIPConfig) SortPools added in v1.2.0

func (cfg *BigIPConfig) SortPools()

func (*BigIPConfig) SortVirtuals added in v1.2.0

func (cfg *BigIPConfig) SortVirtuals()

type BigIPv4FormatChecker added in v1.3.0

type BigIPv4FormatChecker struct{}

Big-IP ipv4/ipv6 checkers

func (BigIPv4FormatChecker) IsFormat added in v1.3.0

func (f BigIPv4FormatChecker) IsFormat(input string) bool

type BigIPv6FormatChecker added in v1.3.0

type BigIPv6FormatChecker struct{}

func (BigIPv6FormatChecker) IsFormat added in v1.3.0

func (f BigIPv6FormatChecker) IsFormat(input string) bool

type ConfigMap

type ConfigMap struct {
	VirtualServer struct {
		Backend  configMapBackend  `json:"backend"`
		Frontend configMapFrontend `json:"frontend"`
	} `json:"virtualServer"`
}

Used to unmarshal ConfigMap data

type CustomProfile added in v1.2.0

type CustomProfile struct {
	Name         string `json:"name"`
	Partition    string `json:"-"`
	Context      string `json:"context"` // 'clientside', 'serverside', or 'all'
	Cert         string `json:"cert"`
	Key          string `json:"key"`
	ServerName   string `json:"serverName,omitempty"`
	SNIDefault   bool   `json:"sniDefault,omitempty"`
	PeerCertMode string `json:"peerCertMode,omitempty"`
	CAFile       string `json:"caFile,omitempty"`
}

SSL Profile loaded from Secret or Route object

func NewCustomProfile added in v1.2.0

func NewCustomProfile(
	profile ProfileRef,
	cert,
	key,
	serverName string,
	sni bool,
	peerCertMode,
	caFile string,
) CustomProfile

type CustomProfileStore added in v1.2.0

type CustomProfileStore struct {
	sync.Mutex
	// contains filtered or unexported fields
}

Store of CustomProfiles

func NewCustomProfiles added in v1.2.0

func NewCustomProfiles() *CustomProfileStore

Contructor for CustomProfiles

type DataGroupNamespaceMap added in v1.4.0

type DataGroupNamespaceMap map[string]*InternalDataGroup

func (DataGroupNamespaceMap) FlattenNamespaces added in v1.4.0

func (dgnm DataGroupNamespaceMap) FlattenNamespaces() *InternalDataGroup

type EventNotifier added in v1.4.0

type EventNotifier struct {
	// contains filtered or unexported fields
}

func NewEventNotifier added in v1.4.0

func NewEventNotifier(bfunc NewBroadcasterFunc) *EventNotifier

type FlattenConflictFunc added in v1.4.0

type FlattenConflictFunc func(key, oldVal, newVal string) string

DataGroup flattening.

type FwdRuleMap added in v1.4.0

type FwdRuleMap map[string]bool

key is path regex, data unused. Using a map as go doesn't have a set type.

type HostFwdRuleMap added in v1.4.0

type HostFwdRuleMap map[string]FwdRuleMap

key is fqdn host name, data is map of paths.

type IApp added in v1.2.0

type IApp struct {
	Name                string                    `json:"name"`
	Partition           string                    `json:"-"`
	IApp                string                    `json:"template"`
	IAppPoolMemberTable *iappPoolMemberTable      `json:"poolMemberTable,omitempty"`
	IAppOptions         map[string]string         `json:"options,omitempty"`
	IAppTables          map[string]iappTableEntry `json:"tables,omitempty"`
	IAppVariables       map[string]string         `json:"variables,omitempty"`
}

IApp

type IRule added in v1.2.0

type IRule struct {
	Name      string `json:"name"`
	Partition string `json:"-"`
	Code      string `json:"apiAnonymous"`
}

iRules

func NewIRule added in v1.2.0

func NewIRule(name, partition, code string) *IRule

type IRulesMap added in v1.2.0

type IRulesMap map[nameRef]*IRule

type InternalDataGroup added in v1.2.0

type InternalDataGroup struct {
	Name      string                   `json:"name"`
	Partition string                   `json:"-"`
	Records   InternalDataGroupRecords `json:"records"`
}

func NewInternalDataGroup added in v1.2.0

func NewInternalDataGroup(name, partition string) *InternalDataGroup

func (*InternalDataGroup) AddOrUpdateRecord added in v1.2.0

func (idg *InternalDataGroup) AddOrUpdateRecord(name, data string) bool

func (*InternalDataGroup) RemoveRecord added in v1.2.0

func (idg *InternalDataGroup) RemoveRecord(name string) bool

type InternalDataGroupMap added in v1.2.0

type InternalDataGroupMap map[nameRef]DataGroupNamespaceMap

type InternalDataGroupRecord added in v1.2.0

type InternalDataGroupRecord struct {
	Name string `json:"name"`
	Data string `json:"data"`
}

type InternalDataGroupRecords added in v1.2.0

type InternalDataGroupRecords []InternalDataGroupRecord

func (InternalDataGroupRecords) Len added in v1.2.0

func (slice InternalDataGroupRecords) Len() int

func (InternalDataGroupRecords) Less added in v1.2.0

func (slice InternalDataGroupRecords) Less(i, j int) bool

func (InternalDataGroupRecords) Swap added in v1.2.0

func (slice InternalDataGroupRecords) Swap(i, j int)

type Manager

type Manager struct {
	// contains filtered or unexported fields
}

func NewManager

func NewManager(params *Params) *Manager

Create and return a new app manager that meets the Manager interface

func (*Manager) AddNamespace

func (appMgr *Manager) AddNamespace(
	namespace string,
	cfgMapSelector labels.Selector,
	resyncPeriod time.Duration,
) error

func (*Manager) AddNamespaceLabelInformer

func (appMgr *Manager) AddNamespaceLabelInformer(
	labelSelector labels.Selector,
	resyncPeriod time.Duration,
) error

func (*Manager) AddRuleToAnnotationsMap added in v1.5.0

func (appMgr *Manager) AddRuleToAnnotationsMap(virtualName, poolName, ruleName string)

func (*Manager) ConfigWriter

func (appMgr *Manager) ConfigWriter() writer.Writer

func (*Manager) GetNamespaceLabelInformer

func (appMgr *Manager) GetNamespaceLabelInformer() cache.SharedIndexInformer

func (*Manager) GetWatchedNamespaces

func (appMgr *Manager) GetWatchedNamespaces() []string

func (*Manager) IsNodePort

func (appMgr *Manager) IsNodePort() bool

func (*Manager) ProcessAnnotationRules added in v1.5.0

func (appMgr *Manager) ProcessAnnotationRules(rsCfg *ResourceConfig, poolName string)

func (*Manager) ProcessNodeUpdate

func (appMgr *Manager) ProcessNodeUpdate(
	obj interface{}, err error,
)

Check for a change in Node state

func (*Manager) Run

func (appMgr *Manager) Run(stopCh <-chan struct{})

func (*Manager) UseNodeInternal

func (appMgr *Manager) UseNodeInternal() bool

type Member added in v1.2.0

type Member struct {
	Address string `json:"address"`
	Port    int32  `json:"port"`
	Session string `json:"session,omitempty"`
}

Pool Member

type Monitor

type Monitor struct {
	Name      string `json:"name"`
	Partition string `json:"-"`
	Interval  int    `json:"interval,omitempty"`
	Type      string `json:"type,omitempty"`
	Send      string `json:"send,omitempty"`
	Recv      string `json:"recv,omitempty"`
	Timeout   int    `json:"timeout,omitempty"`
}

Pool health monitor

type Monitors

type Monitors []Monitor

func (Monitors) Len

func (slice Monitors) Len() int

func (Monitors) Less

func (slice Monitors) Less(i, j int) bool

func (Monitors) Swap

func (slice Monitors) Swap(i, j int)

type NamespaceEventNotifier added in v1.4.0

type NamespaceEventNotifier struct {
	// contains filtered or unexported fields
}

type NamespaceEventNotifierMap added in v1.4.0

type NamespaceEventNotifierMap map[string]*NamespaceEventNotifier

type NewBroadcasterFunc added in v1.4.0

type NewBroadcasterFunc func() record.EventBroadcaster

type Node added in v1.5.0

type Node struct {
	Name string
	Addr string
}

type ObjectDependencies added in v1.4.1

type ObjectDependencies map[ObjectDependency]int

ObjectDependencies contains each dependency and its use count (usually 1)

type ObjectDependency added in v1.4.1

type ObjectDependency struct {
	Kind      string
	Namespace string
	Name      string
}

ObjectDependency identifies a K8s Object

type ObjectDependencyMap added in v1.4.1

type ObjectDependencyMap map[ObjectDependency]ObjectDependencies

ObjectDependencyMap key is an Ingress or Route and the value is a map of other objects it depends on - typically services.

type Params

type Params struct {
	KubeClient        kubernetes.Interface
	RouteClientV1     rest.Interface
	ConfigWriter      writer.Writer
	UseNodeInternal   bool
	IsNodePort        bool
	RouteConfig       RouteConfig
	ResolveIngress    string
	DefaultIngIP      string
	VsSnatPoolName    string
	NodeLabelSelector string
	UseSecrets        bool
	EventChan         chan interface{}

	SchemaLocal string
	// contains filtered or unexported fields
}

Struct to allow NewManager to receive all or only specific parameters.

type PartitionMap added in v1.2.0

type PartitionMap map[string]*BigIPConfig

Configs for each BIG-IP partition

type Policies added in v1.4.0

type Policies []Policy

type Policy

type Policy struct {
	Name        string   `json:"name"`
	Partition   string   `json:"-"`
	SubPath     string   `json:"subPath,omitempty"`
	Controls    []string `json:"controls,omitempty"`
	Description string   `json:"description,omitempty"`
	Legacy      bool     `json:"legacy,omitempty"`
	Requires    []string `json:"requires,omitempty"`
	Rules       Rules    `json:"rules,omitempty"`
	Strategy    string   `json:"strategy,omitempty"`
}

Virtual policy

func (*Policy) RemoveRuleAt added in v1.4.0

func (pol *Policy) RemoveRuleAt(offset int) bool

func (*Policy) RemoveRules added in v1.4.0

func (pol *Policy) RemoveRules(ruleOffsets []int) bool

type Pool

type Pool struct {
	Name         string   `json:"name"`
	Partition    string   `json:"-"`
	ServiceName  string   `json:"-"`
	ServicePort  int32    `json:"-"`
	Balance      string   `json:"loadBalancingMode"`
	Members      []Member `json:"members"`
	MonitorNames []string `json:"monitors,omitempty"`
}

Pool config

type Pools added in v1.2.0

type Pools []Pool

func (Pools) Len added in v1.2.0

func (slice Pools) Len() int

func (Pools) Less added in v1.2.0

func (slice Pools) Less(i, j int) bool

func (Pools) Swap added in v1.2.0

func (slice Pools) Swap(i, j int)

type ProfileRef added in v1.2.0

type ProfileRef struct {
	Name      string `json:"name"`
	Partition string `json:"partition"`
	Context   string `json:"context"` // 'clientside', 'serverside', or 'all'
	// Used as reference to which Namespace/Ingress this profile came from
	// (for deletion purposes)
	Namespace string `json:"-"`
}

Reference to pre-existing profiles

type ProfileRefs added in v1.2.0

type ProfileRefs []ProfileRef

func (ProfileRefs) Len added in v1.2.0

func (slice ProfileRefs) Len() int

func (ProfileRefs) Less added in v1.2.0

func (slice ProfileRefs) Less(i, j int) bool

func (ProfileRefs) Swap added in v1.2.0

func (slice ProfileRefs) Swap(i, j int)

type ResourceConfig

type ResourceConfig struct {
	MetaData metaData `json:"-"`
	Virtual  Virtual  `json:"virtual,omitempty"`
	IApp     IApp     `json:"iapp,omitempty"`
	Pools    Pools    `json:"pools,omitempty"`
	Monitors Monitors `json:"monitors,omitempty"`
	Policies Policies `json:"policies,omitempty"`
}

Config for a single resource (ConfigMap, Ingress, or Route)

func (*ResourceConfig) AddRuleToPolicy added in v1.2.0

func (rc *ResourceConfig) AddRuleToPolicy(
	policyName string,
	rule *Rule,
)

func (*ResourceConfig) DeleteRuleFromPolicy added in v1.4.0

func (rc *ResourceConfig) DeleteRuleFromPolicy(
	policyName string,
	rule *Rule,
	mergedRulesMap map[string]map[string]mergedRuleEntry,
)

func (*ResourceConfig) FindPolicy

func (rc *ResourceConfig) FindPolicy(controlType string) *Policy

func (*ResourceConfig) GetName added in v1.4.0

func (cfg *ResourceConfig) GetName() string

func (*ResourceConfig) GetPartition added in v1.4.0

func (cfg *ResourceConfig) GetPartition() string

func (*ResourceConfig) MergeRules added in v1.5.0

func (rc *ResourceConfig) MergeRules(mergedRulesMap map[string]map[string]mergedRuleEntry)

func (*ResourceConfig) RemoveMonitor added in v1.3.0

func (rc *ResourceConfig) RemoveMonitor(pool, monitor string) bool

func (*ResourceConfig) RemovePolicy

func (rc *ResourceConfig) RemovePolicy(policy Policy)

func (*ResourceConfig) RemovePool added in v1.4.1

func (rc *ResourceConfig) RemovePool(
	namespace,
	poolName string,
	appMgr *Manager,
) (bool, *serviceKey)

func (*ResourceConfig) RemovePoolAt added in v1.4.0

func (rc *ResourceConfig) RemovePoolAt(offset int) bool

func (*ResourceConfig) SetMonitor

func (rc *ResourceConfig) SetMonitor(pool *Pool, monitor Monitor) bool

func (*ResourceConfig) SetPolicy

func (rc *ResourceConfig) SetPolicy(policy Policy)

func (*ResourceConfig) SortMonitors

func (rc *ResourceConfig) SortMonitors()

func (*ResourceConfig) UnmergeRule added in v1.5.0

func (rc *ResourceConfig) UnmergeRule(ruleName string, mergedRulesMap map[string]map[string]mergedRuleEntry) bool

type ResourceConfigMap

type ResourceConfigMap map[string]*ResourceConfig

Key is resource name, value is pointer to config. May be shared.

type ResourceConfigs

type ResourceConfigs []*ResourceConfig

type ResourceEnumFunc

type ResourceEnumFunc func(key serviceKey, cfg *ResourceConfig)

callback type for ForEach()

type ResourceInterface

type ResourceInterface interface {
	Init()
	Assign(key serviceKey, name string, cfg *ResourceConfig)
	PoolCount() int
	VirtualCount() int
	CountOf(key serviceKey) int
	Get(key serviceKey, name string) (*ResourceConfig, bool)
	GetAll(key serviceKey) ResourceConfigs
	GetAllWithName(name string) (ResourceConfigs, []serviceKey)
	GetAllResources() ResourceConfigs
	Delete(key serviceKey, name string) bool
	ForEach(f ResourceEnumFunc)
	DependencyDiff(key ObjectDependency, newDeps ObjectDependencies) ([]ObjectDependency, []ObjectDependency)
}

type ResourceMap

type ResourceMap map[int32][]*ResourceConfig

type Resources

type Resources struct {
	sync.Mutex
	// contains filtered or unexported fields
}

Map of Resource configs

func NewResources

func NewResources() *Resources

Constructor for Resources

func (*Resources) Assign

func (rs *Resources) Assign(svcKey serviceKey, name string, cfg *ResourceConfig)

Add or update a Resource config, identified by key.

func (*Resources) CountOf

func (rs *Resources) CountOf(svcKey serviceKey) int

Count of all configurations for a specific backend.

func (*Resources) Delete

func (rs *Resources) Delete(svcKey serviceKey, name string) bool

Remove a specific resource configuration.

func (*Resources) DeleteKeyRef added in v1.4.0

func (rs *Resources) DeleteKeyRef(sKey serviceKey, name string) bool

Remove a svcKey's reference to a config (pool was removed)

func (*Resources) ForEach

func (rs *Resources) ForEach(f ResourceEnumFunc)

Iterate over all configurations, calling the supplied callback with each.

func (*Resources) Get

func (rs *Resources) Get(svcKey serviceKey, name string) (*ResourceConfig, bool)

Get a specific Resource cfg

func (*Resources) GetAll

func (rs *Resources) GetAll(svcKey serviceKey) ResourceConfigs

Get all configurations for a specific backend

func (*Resources) GetAllResources added in v1.4.0

func (rs *Resources) GetAllResources() ResourceConfigs

func (*Resources) GetAllWithName

func (rs *Resources) GetAllWithName(name string) (ResourceConfigs, []serviceKey)

Get all configurations with a specific name, spanning multiple backends This is for multi-service ingress

func (*Resources) GetByName added in v1.4.0

func (rs *Resources) GetByName(name string) (*ResourceConfig, bool)

Get a specific Resource cfg

func (*Resources) Init

func (rs *Resources) Init()

Receiver to initialize the object.

func (*Resources) PoolCount added in v1.4.0

func (rs *Resources) PoolCount() int

Count of all pools (svcKeys) currently stored.

func (*Resources) UpdateDependencies added in v1.4.1

func (rs *Resources) UpdateDependencies(
	newKey ObjectDependency,
	newDeps ObjectDependencies,
	svcDepKey ObjectDependency,
	lookupFunc func(key ObjectDependency) bool,
) ([]ObjectDependency, []ObjectDependency)

UpdateDependencies will keep the rs.objDeps map updated, and return two arrays identifying what has changed - added for dependencies that were added, and removed for dependencies that were removed.

func (*Resources) VirtualCount added in v1.4.0

func (rs *Resources) VirtualCount() int

Count of all virtuals currently stored.

type RouteConfig added in v1.2.0

type RouteConfig struct {
	RouteVSAddr string
	RouteLabel  string
	HttpVs      string
	HttpsVs     string
	ClientSSL   string
	ServerSSL   string
}

Configuration options for Routes in OpenShift

type RouteService added in v1.4.0

type RouteService struct {
	// contains filtered or unexported fields
}

type Routes added in v1.2.0

type Routes []*routeapi.Route

func (Routes) Len added in v1.2.0

func (slice Routes) Len() int

func (Routes) Less added in v1.2.0

func (slice Routes) Less(i, j int) bool

func (Routes) Swap added in v1.2.0

func (slice Routes) Swap(i, j int)

type Rule

type Rule struct {
	Name       string       `json:"name"`
	FullURI    string       `json:"-"`
	Ordinal    int          `json:"ordinal,omitempty"`
	Actions    []*action    `json:"actions,omitempty"`
	Conditions []*condition `json:"conditions,omitempty"`
}

Rule config for a Policy

type Rules

type Rules []*Rule

func (Rules) Len

func (r Rules) Len() int

func (Rules) Less

func (r Rules) Less(i, j int) bool

func (Rules) Swap

func (r Rules) Swap(i, j int)

type ServiceFwdRuleMap added in v1.4.0

type ServiceFwdRuleMap map[serviceQueueKey]HostFwdRuleMap

key is namespace/serviceName, data is map of host to paths.

func NewServiceFwdRuleMap added in v1.4.0

func NewServiceFwdRuleMap() ServiceFwdRuleMap

func (ServiceFwdRuleMap) AddEntry added in v1.4.0

func (sfrm ServiceFwdRuleMap) AddEntry(ns, svc, host, path string)

func (ServiceFwdRuleMap) AddToDataGroup added in v1.4.0

func (sfrm ServiceFwdRuleMap) AddToDataGroup(dgMap DataGroupNamespaceMap)

type SourceAddrTranslation added in v1.5.0

type SourceAddrTranslation struct {
	Type string `json:"type"`
	Pool string `json:"pool,omitempty"`
}

Virtual Server Source Address Translation

type Virtual

type Virtual struct {
	Name                  string                `json:"name"`
	PoolName              string                `json:"pool,omitempty"`
	Partition             string                `json:"-"`
	Destination           string                `json:"destination"`
	Enabled               bool                  `json:"enabled"`
	IpProtocol            string                `json:"ipProtocol,omitempty"`
	SourceAddrTranslation SourceAddrTranslation `json:"sourceAddressTranslation,omitempty"`
	Policies              []nameRef             `json:"policies,omitempty"`
	IRules                []string              `json:"rules,omitempty"`
	Profiles              ProfileRefs           `json:"profiles,omitempty"`
	Description           string                `json:"description,omitempty"`
	VirtualAddress        *virtualAddress       `json:"-"`
}

Virtual server config

func (*Virtual) AddIRule added in v1.2.0

func (v *Virtual) AddIRule(ruleName string) bool

Adds an IRule reference to a Virtual object

func (*Virtual) AddOrUpdateProfile added in v1.2.0

func (v *Virtual) AddOrUpdateProfile(prof ProfileRef) bool

func (*Virtual) GetProfileCountByContext added in v1.2.0

func (v *Virtual) GetProfileCountByContext(context string) int

func (*Virtual) ReferencesProfile added in v1.2.0

func (v *Virtual) ReferencesProfile(profile CustomProfile) bool

func (*Virtual) RemoveIRule added in v1.4.2

func (v *Virtual) RemoveIRule(ruleName string) bool

Removes an IRule reference from a Virtual object

func (*Virtual) RemoveProfile added in v1.2.0

func (v *Virtual) RemoveProfile(prof ProfileRef) bool

func (*Virtual) SetVirtualAddress added in v1.4.0

func (v *Virtual) SetVirtualAddress(bindAddr string, port int32)

func (*Virtual) ToString

func (v *Virtual) ToString() string

type Virtuals added in v1.2.0

type Virtuals []Virtual

func (Virtuals) Len added in v1.2.0

func (slice Virtuals) Len() int

Sorting methods for unit testing

func (Virtuals) Less added in v1.2.0

func (slice Virtuals) Less(i, j int) bool

func (Virtuals) Swap added in v1.2.0

func (slice Virtuals) Swap(i, j int)

Jump to

Keyboard shortcuts

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