model

package
v1.0.0-alpha.1 Latest Latest
Warning

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

Go to latest
Published: Sep 1, 2016 License: Apache-2.0 Imports: 13 Imported by: 740

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func KeyToDefaultDeletePath

func KeyToDefaultDeletePath(key Key) (string, error)

KeyToDefaultDeletePath converts one of the Keys from this package into a unique '/'-delimited path, which is suitable for use as the key when (recursively) deleting the value from a hierarchical (i.e. one with directories and leaves) key/value datastore such as etcd v2.

KeyToDefaultDeletePath returns a different path to KeyToDefaultPath when it is a passed a Key that represents a non-leaf, such as a TierKey. (A tier has its own metadata but it also contains policies as children.)

KeyToDefaultDeletePath returns the common prefix of the non-leaf key and its children so that a recursive delete of that key would delete the object itself and any children it has.

For example, KeyToDefaultDeletePath(TierKey{Tier: "a"}) returns

"/calico/v1/policy/tier/a"

which is a prefix of both KeyToDefaultPath(TierKey{Tier: "a"}):

"/calico/v1/policy/tier/a/metadata"

and KeyToDefaultPath(PolicyKey{Tier: "a", Name: "b"}):

"/calico/v1/policy/tier/a/policy/b"

func KeyToDefaultPath

func KeyToDefaultPath(key Key) (string, error)

KeyToDefaultPath converts one of the Keys from this package into a unique '/'-delimited path, which is suitable for use as the key when storing the value in a hierarchical (i.e. one with directories and leaves) key/value datastore such as etcd v2.

Each unique key returns a unique path.

Keys with a hierarchical relationship, such as tiers and policies, share a common prefix. However, in order to support datastores that do not support storing data at non-leaf nodes in the hierarchy (such as etcd v2), the path returned for a "parent" key, such as a TierKey, is not a direct ancestor of its children.

For example, KeyToDefaultPath(TierKey{Tier: "a"}) returns

"/calico/v1/policy/tier/a/metadata"

and KeyToDefaultPath(PolicyKey{Tier: "a", Name: "b"}) returns

"/calico/v1/policy/tier/a/policy/b"

In this case, the common tier prefix is "/calico/v1/policy/tier/a".

func ListOptionsToDefaultPathRoot

func ListOptionsToDefaultPathRoot(listOptions ListInterface) string

ListOptionsToDefaultPathRoot converts list options struct into a common-prefix path suitable for querying a datastore that uses the paths returned by KeyToDefaultPath. For example,

ListOptionsToDefaultPathRoot(TierListOptions{})

doesn't specify any particular tier so it returns "/calico/v1/policy/tier" which is a prefix for all tiers. The datastore must then do a recursive query to find all children of that path. However,

ListOptionsToDefaultPathRoot(TierListOptions{Tier:"a"})

returns a more-specific path, which filters down to the specific tier of interest: "/calico/v1/policy/tier/a"

func ParseValue

func ParseValue(key Key, rawData []byte) (interface{}, error)

ParseValue parses the default JSON representation of our data into one of our value structs, according to the type of key. I.e. if passed a PolicyKey as the first parameter, it will try to parse rawData into a Policy struct.

Types

type ActiveStatusReportKey

type ActiveStatusReportKey struct {
	Hostname string `json:"-" validate:"required,hostname"`
}

func (ActiveStatusReportKey) String

func (key ActiveStatusReportKey) String() string

type ActiveStatusReportListOptions

type ActiveStatusReportListOptions struct {
	Hostname string
}

func (ActiveStatusReportListOptions) KeyFromDefaultPath

func (options ActiveStatusReportListOptions) KeyFromDefaultPath(ekey string) Key

type AllocationAttribute

type AllocationAttribute struct {
	AttrPrimary   *string           `json:"handle_id"`
	AttrSecondary map[string]string `json:"secondary"`
}

type AllocationBlock

type AllocationBlock struct {
	CIDR           net.IPNet             `json:"cidr"`
	HostAffinity   *string               `json:"hostAffinity"`
	StrictAffinity bool                  `json:"strictAffinity"`
	Allocations    []*int                `json:"allocations"`
	Unallocated    []int                 `json:"unallocated"`
	Attributes     []AllocationAttribute `json:"attributes"`
}

type BGPPeer

type BGPPeer struct {
	PeerIP net.IP `json:"ip"`
	ASNum  int    `json:"as_num"`
}

type BGPPeerKey

type BGPPeerKey struct {
	Scope    scope.Scope `json:"-" validate:"omitempty"`
	Hostname string      `json:"-" validate:"omitempty"`
	PeerIP   net.IP      `json:"-" validate:"required"`
}

func (BGPPeerKey) String

func (key BGPPeerKey) String() string

type BGPPeerListOptions

type BGPPeerListOptions struct {
	Scope    scope.Scope `json:"-" validate:"omitempty"`
	Hostname string
	PeerIP   net.IP
}

func (BGPPeerListOptions) KeyFromDefaultPath

func (options BGPPeerListOptions) KeyFromDefaultPath(path string) Key

type BlockAffinity

type BlockAffinity struct {
}

type BlockAffinityKey

type BlockAffinityKey struct {
	CIDR net.IPNet `json:"-" validate:"required,name"`
	Host string    `json:"-"`
}

type BlockAffinityListOptions

type BlockAffinityListOptions struct {
	Host      string
	IPVersion int
}

func (BlockAffinityListOptions) KeyFromDefaultPath

func (options BlockAffinityListOptions) KeyFromDefaultPath(path string) Key

type BlockKey

type BlockKey struct {
	CIDR net.IPNet `json:"-" validate:"required,name"`
}

type BlockListOptions

type BlockListOptions struct {
	IPVersion int `json:"-"`
}

func (BlockListOptions) KeyFromDefaultPath

func (options BlockListOptions) KeyFromDefaultPath(path string) Key

type GlobalConfigKey

type GlobalConfigKey struct {
	Name string `json:"-" validate:"required,name"`
}

func (GlobalConfigKey) String

func (key GlobalConfigKey) String() string

type GlobalConfigListOptions

type GlobalConfigListOptions struct {
	Name string
}

func (GlobalConfigListOptions) KeyFromDefaultPath

func (options GlobalConfigListOptions) KeyFromDefaultPath(path string) Key

type HostConfigKey

type HostConfigKey struct {
	Hostname string `json:"-" validate:"required,name"`
	Name     string `json:"-" validate:"required,name"`
}

func (HostConfigKey) String

func (key HostConfigKey) String() string

type HostConfigListOptions

type HostConfigListOptions struct {
	Hostname string
	Name     string
}

func (HostConfigListOptions) KeyFromDefaultPath

func (options HostConfigListOptions) KeyFromDefaultPath(path string) Key

type HostEndpoint

type HostEndpoint struct {
	Name              string            `json:"name,omitempty" validate:"omitempty,interface"`
	ExpectedIPv4Addrs []net.IP          `json:"expected_ipv4_addrs,omitempty" validate:"omitempty,dive,ipv4"`
	ExpectedIPv6Addrs []net.IP          `json:"expected_ipv6_addrs,omitempty" validate:"omitempty,dive,ipv6"`
	Labels            map[string]string `json:"labels,omitempty" validate:"omitempty,labels"`
	ProfileIDs        []string          `json:"profile_ids,omitempty" validate:"omitempty,dive,name"`
}

type HostEndpointKey

type HostEndpointKey struct {
	Hostname   string `json:"-" validate:"required,hostname"`
	EndpointID string `json:"-" validate:"required,hostname"`
}

func (HostEndpointKey) String

func (key HostEndpointKey) String() string

type HostEndpointListOptions

type HostEndpointListOptions struct {
	Hostname   string
	EndpointID string
}

func (HostEndpointListOptions) KeyFromDefaultPath

func (options HostEndpointListOptions) KeyFromDefaultPath(path string) Key

type HostEndpointStatus

type HostEndpointStatus struct {
	Status string `json:"status"`
}

type HostEndpointStatusKey

type HostEndpointStatusKey struct {
	Hostname   string `json:"-" validate:"required,hostname"`
	EndpointID string `json:"-" validate:"required,hostname"`
}

func (HostEndpointStatusKey) String

func (key HostEndpointStatusKey) String() string

type HostEndpointStatusListOptions

type HostEndpointStatusListOptions struct {
	Hostname   string
	EndpointID string
}

func (HostEndpointStatusListOptions) KeyFromDefaultPath

func (options HostEndpointStatusListOptions) KeyFromDefaultPath(ekey string) Key

type HostIP

type HostIP struct {
}

type HostIPKey

type HostIPKey struct {
	Hostname string
}

TODO find a place to put this

type IPAMConfig

type IPAMConfig struct {
	StrictAffinity     bool `json:"strict_affinity,omitempty"`
	AutoAllocateBlocks bool `json:"auto_allocate_blocks,omitempty"`
}

type IPAMConfigKey

type IPAMConfigKey struct {
}

type IPAMHandle

type IPAMHandle struct {
	HandleID string         `json:"-"`
	Block    map[string]int `json:"block"`
}

type IPAMHandleKey

type IPAMHandleKey struct {
	HandleID string `json:"id"`
}

type IPAMHandleListOptions

type IPAMHandleListOptions struct {
}

func (IPAMHandleListOptions) KeyFromDefaultPath

func (options IPAMHandleListOptions) KeyFromDefaultPath(path string) Key

type IPAMHost

type IPAMHost struct {
}

type IPAMHostKey

type IPAMHostKey struct {
	Host string
}

type KVPair

type KVPair struct {
	Key      Key
	Value    interface{}
	Revision interface{}
	TTL      time.Duration // For writes, if non-zero, key has a TTL.
}

KVPair holds a typed key and value struct as well as datastore specific revision information.

type Key

type Key interface {
	// contains filtered or unexported methods
}

Key represents a parsed datastore key.

func KeyFromDefaultPath

func KeyFromDefaultPath(path string) Key

KeyFromDefaultPath parses the default path representation of a key into one of our <Type>Key structs. Returns nil if the string doesn't match one of our key types.

type LastStatusReportKey

type LastStatusReportKey struct {
	Hostname string `json:"-" validate:"required,hostname"`
}

func (LastStatusReportKey) String

func (key LastStatusReportKey) String() string

type LastStatusReportListOptions

type LastStatusReportListOptions struct {
	Hostname string
}

func (LastStatusReportListOptions) KeyFromDefaultPath

func (options LastStatusReportListOptions) KeyFromDefaultPath(ekey string) Key

type ListInterface

type ListInterface interface {

	// BUG(smc) I think we should remove this and use the package KeyFromDefaultPath function.
	// KeyFromDefaultPath parses the default path representation of the
	// Key type for this list.  It returns nil if passed a different kind
	// of path.
	KeyFromDefaultPath(key string) Key
	// contains filtered or unexported methods
}

Interface used to perform datastore lookups.

type Policy

type Policy struct {
	Order         *float32 `json:"order,omitempty" validate:"omitempty"`
	InboundRules  []Rule   `json:"inbound_rules,omitempty" validate:"omitempty,dive"`
	OutboundRules []Rule   `json:"outbound_rules,omitempty" validate:"omitempty,dive"`
	Selector      string   `json:"selector" validate:"selector"`
}

func (Policy) String

func (p Policy) String() string

type PolicyKey

type PolicyKey struct {
	Name string `json:"-" validate:"required,name"`
	Tier string `json:"-" validate:"required,name"`
}

func (PolicyKey) String

func (key PolicyKey) String() string

type PolicyListOptions

type PolicyListOptions struct {
	Name string
	Tier string
}

func (PolicyListOptions) KeyFromDefaultPath

func (options PolicyListOptions) KeyFromDefaultPath(path string) Key

type Pool

type Pool struct {
	CIDR          net.IPNet `json:"cidr"`
	IPIPInterface string    `json:"ipip"`
	Masquerade    bool      `json:"masquerade"`
	IPAM          bool      `json:"ipam"`
	Disabled      bool      `json:"disabled"`
}

type PoolKey

type PoolKey struct {
	CIDR net.IPNet `json:"-" validate:"required,name"`
}

func (PoolKey) String

func (key PoolKey) String() string

type PoolListOptions

type PoolListOptions struct {
	CIDR net.IPNet
}

func (PoolListOptions) KeyFromDefaultPath

func (options PoolListOptions) KeyFromDefaultPath(path string) Key

type Profile

type Profile struct {
	Rules  ProfileRules
	Tags   []string
	Labels map[string]string
}

The profile structure is defined to allow the client to define a conversion interface to map between the API and backend profiles. However, in the actual underlying implementation the profile is written as three separate entries - rules, tags and labels.

type ProfileKey

type ProfileKey struct {
	Name string `json:"-" validate:"required,name"`
}

The profile key actually returns the common parent of the three separate entries. It is useful to define this to re-use some of the common machinery, and can be used for delete processing since delete needs to remove the common parent.

func (ProfileKey) String

func (key ProfileKey) String() string

type ProfileLabelsKey

type ProfileLabelsKey struct {
	ProfileKey
}

ProfileLabelsKey implements the KeyInterface for the profile labels

type ProfileListOptions

type ProfileListOptions struct {
	Name string
}

func (ProfileListOptions) KeyFromDefaultPath

func (options ProfileListOptions) KeyFromDefaultPath(path string) Key

func (*ProfileListOptions) ListConvert

func (_ *ProfileListOptions) ListConvert(ds []*KVPair) []*KVPair

type ProfileRules

type ProfileRules struct {
	InboundRules  []Rule `json:"inbound_rules,omitempty" validate:"omitempty,dive"`
	OutboundRules []Rule `json:"outbound_rules,omitempty" validate:"omitempty,dive"`
}

type ProfileRulesKey

type ProfileRulesKey struct {
	ProfileKey
}

ProfileRulesKey implements the KeyInterface for the profile rules

type ProfileTagsKey

type ProfileTagsKey struct {
	ProfileKey
}

ProfileTagsKey implements the KeyInterface for the profile tags

type ReadyFlagKey

type ReadyFlagKey struct {
}

type Rule

type Rule struct {
	Action string `json:"action,omitempty" validate:"backendaction"`

	Protocol    *numorstring.Protocol `json:"protocol,omitempty" validate:"omitempty"`
	NotProtocol *numorstring.Protocol `json:"!protocol,omitempty" validate:"omitempty"`

	ICMPType    *int `json:"icmp_type,omitempty" validate:"omitempty,gte=1,lte=255"`
	ICMPCode    *int `json:"icmp_code,omitempty" validate:"omitempty,gte=1,lte=255"`
	NotICMPType *int `json:"!icmp_type,omitempty" validate:"omitempty,gte=1,lte=255"`
	NotICMPCode *int `json:"!icmp_code,omitempty" validate:"omitempty,gte=1,lte=255"`

	SrcTag      string             `json:"src_tag,omitempty" validate:"omitempty,tag"`
	SrcNet      *net.IPNet         `json:"src_net,omitempty" validate:"omitempty"`
	SrcSelector string             `json:"src_selector,omitempty" validate:"omitempty,selector"`
	SrcPorts    []numorstring.Port `json:"src_ports,omitempty" validate:"omitempty"`
	DstTag      string             `json:"dst_tag,omitempty" validate:"omitempty,tag"`
	DstSelector string             `json:"dst_selector,omitempty" validate:"omitempty,selector"`
	DstNet      *net.IPNet         `json:"dst_net,omitempty" validate:"omitempty"`
	DstPorts    []numorstring.Port `json:"dst_ports,omitempty" validate:"omitempty"`

	NotSrcTag      string             `json:"!src_tag,omitempty" validate:"omitempty,tag"`
	NotSrcNet      *net.IPNet         `json:"!src_net,omitempty" validate:"omitempty"`
	NotSrcSelector string             `json:"!src_selector,omitempty" validate:"omitempty,selector"`
	NotSrcPorts    []numorstring.Port `json:"!src_ports,omitempty" validate:"omitempty"`
	NotDstTag      string             `json:"!dst_tag,omitempty" validate:"omitempty"`
	NotDstSelector string             `json:"!dst_selector,omitempty" validate:"omitempty,selector"`
	NotDstNet      *net.IPNet         `json:"!dst_net,omitempty" validate:"omitempty"`
	NotDstPorts    []numorstring.Port `json:"!dst_ports,omitempty" validate:"omitempty"`

	LogPrefix string `json:"log_prefix,omitempty" validate:"omitempty"`
}

func (Rule) String

func (r Rule) String() string

type StatusReport

type StatusReport struct {
	Timestamp     string  `json:"time"`
	UptimeSeconds float64 `json:"uptime"`
	FirstUpdate   bool    `json:"first_update"`
}

type WorkloadEndpoint

type WorkloadEndpoint struct {
	// TODO: Validation for workload endpoint.
	State      string            `json:"state"`
	Name       string            `json:"name"`
	Mac        net.MAC           `json:"mac"`
	ProfileIDs []string          `json:"profile_ids"`
	IPv4Nets   []net.IPNet       `json:"ipv4_nets"`
	IPv6Nets   []net.IPNet       `json:"ipv6_nets"`
	Labels     map[string]string `json:"labels"`
}

type WorkloadEndpointKey

type WorkloadEndpointKey struct {
	Hostname       string `json:"-"`
	OrchestratorID string `json:"-"`
	WorkloadID     string `json:"-"`
	EndpointID     string `json:"-"`
}

func (WorkloadEndpointKey) String

func (key WorkloadEndpointKey) String() string

type WorkloadEndpointListOptions

type WorkloadEndpointListOptions struct {
	Hostname       string
	OrchestratorID string
	WorkloadID     string
	EndpointID     string
}

func (WorkloadEndpointListOptions) KeyFromDefaultPath

func (options WorkloadEndpointListOptions) KeyFromDefaultPath(path string) Key

type WorkloadEndpointStatus

type WorkloadEndpointStatus struct {
	Status string `json:"status"`
}

type WorkloadEndpointStatusKey

type WorkloadEndpointStatusKey struct {
	Hostname       string `json:"-"`
	OrchestratorID string `json:"-"`
	WorkloadID     string `json:"-"`
	EndpointID     string `json:"-"`
}

func (WorkloadEndpointStatusKey) String

func (key WorkloadEndpointStatusKey) String() string

type WorkloadEndpointStatusListOptions

type WorkloadEndpointStatusListOptions struct {
	Hostname       string
	OrchestratorID string
	WorkloadID     string
	EndpointID     string
}

func (WorkloadEndpointStatusListOptions) KeyFromDefaultPath

func (options WorkloadEndpointStatusListOptions) KeyFromDefaultPath(ekey string) Key

Notes

Bugs

  • I think we should remove this and use the package KeyFromDefaultPath function. KeyFromDefaultPath parses the default path representation of the Key type for this list. It returns nil if passed a different kind of path.

Jump to

Keyboard shortcuts

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