util

package
Version: v0.2.1 Latest Latest
Warning

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

Go to latest
Published: Jan 28, 2015 License: Apache-2.0 Imports: 33 Imported by: 0

Documentation

Overview

Package util implements various utility functions used in both testing and implementation of Kubernetes. Package util may not depend on any other package in the Kubernetes package tree.

Index

Constants

This section is empty.

Variables

View Source
var ErrorHandlers = []func(error){logError}

ErrorHandlers is a list of functions which will be invoked when an unreturnable error occurs.

View Source
var PanicHandlers = []func(interface{}){logPanic}

PanicHandlers is a list of functions which will be invoked when a panic happens.

View Source
var ReallyCrash bool

For testing, bypass HandleCrash.

Functions

func AddAllFlagsToPFlagSet added in v0.2.1

func AddAllFlagsToPFlagSet(fs *pflag.FlagSet)

Adds all of the top level 'flag' package flags to a 'pflag.FlagSet'.

func AddFlagSetToPFlagSet added in v0.2.1

func AddFlagSetToPFlagSet(fsIn *flag.FlagSet, fsOut *pflag.FlagSet)

Adds all of the flags in a 'flag.FlagSet' package flags to a 'pflag.FlagSet'.

func AddFlagToPFlagSet added in v0.2.1

func AddFlagToPFlagSet(f *flag.Flag, fs *pflag.FlagSet)

Imports a 'flag.Flag' into a 'pflag.FlagSet'. The "short" option is unset and the type is inferred using reflection.

func AllPtrFieldsNil added in v0.2.1

func AllPtrFieldsNil(obj interface{}) bool

Tests whether all pointer fields in a struct are nil. This is useful when, for example, an API struct is handled by plugins which need to distinguish "no plugin accepted this spec" from "this spec is empty".

This function is only valid for structs and pointers to structs. Any other type will cause a panic. Passing a typed nil pointer will return true.

func ApplyOomScoreAdj added in v0.2.1

func ApplyOomScoreAdj(value int) error

Writes 'value' to /proc/self/oom_score_adj.

func CompileRegexps

func CompileRegexps(regexpStrings []string) ([]*regexp.Regexp, error)

Takes a list of strings and compiles them into a list of regular expressions

func ConnectToDockerOrDie added in v0.2.1

func ConnectToDockerOrDie(dockerEndpoint string) *docker.Client

func DeepHashObject added in v0.2.1

func DeepHashObject(hasher hash.Hash, objectToWrite interface{})

DeepHashObject writes specified object to hash using the spew library which follows pointers and prints actual values of the nested objects ensuring the hash does not change when a pointer changes.

func FlushLogs

func FlushLogs()

FlushLogs flushes logs immediately.

func Forever

func Forever(f func(), period time.Duration)

Forever loops forever running f every period. Catches any panics, and keeps going.

func GenerateSelfSignedCert added in v0.2.1

func GenerateSelfSignedCert(host, certPath, keyPath string) error

GenerateSelfSignedCert creates a self-signed certificate and key for the given host. Host may be an IP or a DNS name The certificate will be created with file mode 0644. The key will be created with file mode 0600. If the certificate or key files already exist, they will be overwritten. Any parent directories of the certPath or keyPath will be created as needed with file mode 0755.

func GetDockerEndpoint added in v0.2.1

func GetDockerEndpoint(dockerEndpoint string) string

Get a docker endpoint, either from the string passed in, or $DOCKER_HOST environment variables

func GetHostname added in v0.2.1

func GetHostname(hostnameOverride string) string

func HandleCrash

func HandleCrash()

HandleCrash simply catches a crash and logs an error. Meant to be called via defer.

func HandleError added in v0.2.1

func HandleError(err error)

HandlerError is a method to invoke when a non-user facing piece of code cannot return an error and needs to indicate it has been ignored. Invoking this method is preferable to logging the error - the default behavior is to log but the errors may be sent to a remote server for analysis.

func InitLogs

func InitLogs()

InitLogs initializes logs the way we want for kubernetes.

func IsCIdentifier

func IsCIdentifier(value string) bool

IsCIdentifier tests for a string that conforms the definition of an identifier in C. This checks the format, but not the length.

func IsDNS1123Label added in v0.2.1

func IsDNS1123Label(value string) bool

IsDNS1123Label tests for a string that conforms to the definition of a label in DNS (RFC 1123).

func IsDNS1123Subdomain added in v0.2.1

func IsDNS1123Subdomain(value string) bool

IsDNS1123Subdomain tests for a string that conforms to the definition of a subdomain in DNS (RFC 1123).

func IsDNS952Label

func IsDNS952Label(value string) bool

IsDNS952Label tests for a string that conforms to the definition of a label in DNS (RFC 952).

func IsDNSLabel

func IsDNSLabel(value string) bool

IsDNSLabel tests for a string that conforms to the definition of a label in DNS (RFC 1123).

func IsDNSSubdomain

func IsDNSSubdomain(value string) bool

IsDNSSubdomain tests for a string that conforms to the definition of a subdomain in DNS (RFC 1123).

func IsQualifiedName added in v0.2.1

func IsQualifiedName(value string) bool

IsQualifiedName tests whether a string fits the "optionally-namespaced name" pattern: [ DNS_SUBDOMAIN "/" ] DNS_LABEL

func IsValidPortNum

func IsValidPortNum(port int) bool

IsValidPortNum tests that the argument is a valid, non-zero port number.

func NewLogger

func NewLogger(prefix string) *log.Logger

NewLogger creates a new log.Logger which sends logs to glog.Info.

func ObjectDiff

func ObjectDiff(a, b interface{}) string

ObjectDiff writes the two objects out as JSON and prints out the identical part of the objects followed by the remaining part of 'a' and finally the remaining part of 'b'. For debugging tests.

func ObjectGoPrintDiff

func ObjectGoPrintDiff(a, b interface{}) string

ObjectGoPrintDiff is like ObjectDiff, but uses go-spew to print the objects, which shows absolutely everything by recursing into every single pointer (go's %#v formatters OTOH stop at a certain point). This is needed when you can't figure out why reflect.DeepEqual is returning false and nothing is showing you differences. This will.

func ObjectGoPrintSideBySide added in v0.2.1

func ObjectGoPrintSideBySide(a, b interface{}) string

ObjectGoPrintSideBySide prints a and b as textual dumps side by side, enabling easy visual scanning for mismatches.

func StringDiff

func StringDiff(a, b string) string

StringDiff diffs a and b and returns a human readable diff.

func Until added in v0.2.1

func Until(f func(), period time.Duration, stopCh <-chan struct{})

Until loops until stop channel is closed, running f every period. Catches any panics, and keeps going. f may not be invoked if stop channel is already closed.

Types

type Clock added in v0.2.1

type Clock interface {
	Now() time.Time
}

Clock allows for injecting fake or real clocks into code that needs to do arbitrary things based on time.

type ConfigurationMap added in v0.2.1

type ConfigurationMap map[string]string

func (*ConfigurationMap) Set added in v0.2.1

func (m *ConfigurationMap) Set(value string) error

func (*ConfigurationMap) String added in v0.2.1

func (m *ConfigurationMap) String() string

func (*ConfigurationMap) Type added in v0.2.1

func (*ConfigurationMap) Type() string

type FakeClock added in v0.2.1

type FakeClock struct {
	Time time.Time
}

FakeClock implements Clock, but returns an arbitary time.

func (*FakeClock) Now added in v0.2.1

func (f *FakeClock) Now() time.Time

Now returns f's time.

type FakeHandler

type FakeHandler struct {
	RequestReceived *http.Request
	RequestBody     string
	StatusCode      int
	ResponseBody    string
	// For logging - you can use a *testing.T
	// This will keep log messages associated with the test.
	T LogInterface
	// contains filtered or unexported fields
}

FakeHandler is to assist in testing HTTP requests. Notice that FakeHandler is not thread safe and you must not direct traffic to except for the request you want to test. You can do this by hiding it in an http.ServeMux.

func (*FakeHandler) ServeHTTP

func (f *FakeHandler) ServeHTTP(response http.ResponseWriter, request *http.Request)

func (*FakeHandler) ValidateRequest

func (f *FakeHandler) ValidateRequest(t TestInterface, expectedPath, expectedMethod string, body *string)

ValidateRequest verifies that FakeHandler received a request with expected path, method, and body.

func (*FakeHandler) ValidateRequestCount added in v0.2.1

func (f *FakeHandler) ValidateRequestCount(t TestInterface, count int)

type GlogWriter

type GlogWriter struct{}

GlogWriter serves as a bridge between the standard log package and the glog package.

func (GlogWriter) Write

func (writer GlogWriter) Write(data []byte) (n int, err error)

Write implements the io.Writer interface.

type IP

type IP net.IP

IP adapts net.IP for use as a flag.

func (*IP) Set

func (ip *IP) Set(value string) error

func (IP) String

func (ip IP) String() string

func (*IP) Type added in v0.2.1

func (*IP) Type() string

type IPNet

type IPNet net.IPNet

IPNet adapts net.IPNet for use as a flag.

func (*IPNet) Set

func (ipnet *IPNet) Set(value string) error

func (IPNet) String

func (ipnet IPNet) String() string

func (*IPNet) Type added in v0.2.1

func (*IPNet) Type() string

type IntOrString

type IntOrString struct {
	Kind   IntstrKind
	IntVal int
	StrVal string
}

IntOrString is a type that can hold an int or a string. When used in JSON or YAML marshalling and unmarshalling, it produces or consumes the inner type. This allows you to have, for example, a JSON field that can accept a name or number.

func NewIntOrStringFromInt

func NewIntOrStringFromInt(val int) IntOrString

NewIntOrStringFromInt creates an IntOrString object with an int value.

func NewIntOrStringFromString

func NewIntOrStringFromString(val string) IntOrString

NewIntOrStringFromString creates an IntOrString object with a string value.

func (IntOrString) MarshalJSON

func (intstr IntOrString) MarshalJSON() ([]byte, error)

MarshalJSON implements the json.Marshaller interface.

func (*IntOrString) String added in v0.2.1

func (intstr *IntOrString) String() string

String returns the string value, or Itoa's the int value.

func (*IntOrString) UnmarshalJSON

func (intstr *IntOrString) UnmarshalJSON(value []byte) error

UnmarshalJSON implements the json.Unmarshaller interface.

type IntstrKind

type IntstrKind int

IntstrKind represents the stored type of IntOrString.

const (
	IntstrInt    IntstrKind = iota // The IntOrString holds an int.
	IntstrString                   // The IntOrString holds a string.
)

type LogInterface

type LogInterface interface {
	Logf(format string, args ...interface{})
}

LogInterface is a simple interface to allow injection of Logf to report serving errors.

type RateLimiter

type RateLimiter interface {
	// CanAccept returns true if the rate is below the limit, false otherwise
	CanAccept() bool
	// Stop stops the rate limiter, subsequent calls to CanAccept will return false
	Stop()
}

func NewTokenBucketRateLimiter

func NewTokenBucketRateLimiter(qps float32, burst int) RateLimiter

NewTokenBucketRateLimiter creates a rate limiter which implements a token bucket approach. The rate limiter allows bursts of up to 'burst' to exceed the QPS, while still maintaining a smoothed qps rate of 'qps'. The bucket is initially filled with 'burst' tokens, the rate limiter spawns a go routine which refills the bucket with one token at a rate of 'qps'. The maximum number of tokens in the bucket is capped at 'burst'. When done with the limiter, Stop() must be called to halt the associated goroutine.

type RealClock added in v0.2.1

type RealClock struct{}

RealClock really calls time.Now()

func (RealClock) Now added in v0.2.1

func (r RealClock) Now() time.Time

Now returns the current time.

type Runner added in v0.2.1

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

Runner is an abstraction to make it easy to start and stop groups of things that can be described by a single function which waits on a channel close to exit.

func NewRunner added in v0.2.1

func NewRunner(f ...func(stop chan struct{})) *Runner

NewRunner makes a runner for the given function(s). The function(s) should loop until the channel is closed.

func (*Runner) Start added in v0.2.1

func (r *Runner) Start()

Start begins running.

func (*Runner) Stop added in v0.2.1

func (r *Runner) Stop()

Stop stops running.

type StringList

type StringList []string

func (*StringList) Set

func (sl *StringList) Set(value string) error

func (*StringList) String

func (sl *StringList) String() string

func (*StringList) Type added in v0.2.1

func (*StringList) Type() string

type StringSet

type StringSet map[string]empty

StringSet is a set of strings, implemented via map[string]struct{} for minimal memory consumption.

func NewStringSet

func NewStringSet(items ...string) StringSet

NewStringSet creates a StringSet from a list of values.

func (StringSet) Delete

func (s StringSet) Delete(item string)

Delete removes item from the set.

func (StringSet) Has

func (s StringSet) Has(item string) bool

Has returns true iff item is contained in the set.

func (StringSet) HasAll

func (s StringSet) HasAll(items ...string) bool

HasAll returns true iff all items are contained in the set.

func (StringSet) Insert

func (s StringSet) Insert(items ...string)

Insert adds items to the set.

func (StringSet) IsSuperset

func (s1 StringSet) IsSuperset(s2 StringSet) bool

IsSuperset returns true iff s1 is a superset of s2.

func (StringSet) Len added in v0.2.1

func (s StringSet) Len() int

Len returns the size of the set.

func (StringSet) List

func (s StringSet) List() []string

List returns the contents as a sorted string slice.

type T added in v0.2.1

type T interface{}

T stands in for any type in TimeCache Should make it easy to use this as a template for an autogenerator if we ever start doing that.

type TestInterface

type TestInterface interface {
	Errorf(format string, args ...interface{})
	Logf(format string, args ...interface{})
}

TestInterface is a simple interface providing Errorf, to make injection for testing easier (insert 'yo dawg' meme here).

type Time

type Time struct {
	time.Time
}

Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.

func Date

func Date(year int, month time.Month, day, hour, min, sec, nsec int, loc *time.Location) Time

Date returns the Time corresponding to the supplied parameters by wrapping time.Date.

func NewTime added in v0.2.1

func NewTime(time time.Time) Time

NewTime returns a wrapped instance of the provided time

func Now

func Now() Time

Now returns the current local time.

func Unix

func Unix(sec int64, nsec int64) Time

Unix returns the local time corresponding to the given Unix time by wrapping time.Unix.

func (Time) MarshalJSON

func (t Time) MarshalJSON() ([]byte, error)

MarshalJSON implements the json.Marshaler interface.

func (Time) Rfc3339Copy

func (t Time) Rfc3339Copy() Time

Rfc3339Copy returns a copy of the Time at second-level precision.

func (*Time) UnmarshalJSON

func (t *Time) UnmarshalJSON(b []byte) error

UnmarshalJSON implements the json.Unmarshaller interface.

type TimeCache added in v0.2.1

type TimeCache interface {
	// Get will fetch an item from the cache if
	// it is present and recent enough.
	Get(key string) T
}

func NewTimeCache added in v0.2.1

func NewTimeCache(clock Clock, ttl time.Duration, fill func(key string) T) TimeCache

NewTimeCache returns a cache which calls fill to fill its entries, and forgets entries after ttl has passed.

type UUID added in v0.2.1

type UUID interface {
	String() string
}

func NewUUID added in v0.2.1

func NewUUID() UUID

*

  • The UUID package is naive and can generate identical UUIDs if the time interval is quick enough.
  • Block subsequent UUIDs for 200 Nanoseconds, the UUID uses 100 ns increments, we block for 200 to be safe
  • Blocks in a go routine, so that the caller doesn't have to wait.
  • TODO: save old unused UUIDs so that no one has to block.

Directories

Path Synopsis
Package config provides utility objects for decoupling sources of configuration and the actual configuration state.
Package config provides utility objects for decoupling sources of configuration and the actual configuration state.
Package errors implements various utility functions and types around errors.
Package errors implements various utility functions and types around errors.
Package exec provides an injectable interface and implementations for running commands.
Package exec provides an injectable interface and implementations for running commands.
Package iptables provides an interface and implementations for running iptables commands.
Package iptables provides an interface and implementations for running iptables commands.
Package mount defines an interface to mounting filesystems.
Package mount defines an interface to mounting filesystems.
Package wait provides tools for polling or listening for changes to a condition.
Package wait provides tools for polling or listening for changes to a condition.

Jump to

Keyboard shortcuts

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