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
- Variables
- func AddAllFlagsToPFlags()
- func AddFlagSetToPFlagSet(fsIn *flag.FlagSet, fsOut *pflag.FlagSet)
- func AddPFlagSetToPFlagSet(fsFrom *pflag.FlagSet, fsTo *pflag.FlagSet)
- func AllPtrFieldsNil(obj interface{}) bool
- func ApplyOomScoreAdj(pid int, value int) error
- func CertPoolFromFile(filename string) (*x509.CertPool, error)
- func ChooseHostInterface() (net.IP, error)
- func CompileRegexps(regexpStrings []string) ([]*regexp.Regexp, error)
- func DeepHashObject(hasher hash.Hash, objectToWrite interface{})
- func EncodePrivateKey(private *rsa.PrivateKey) []byte
- func EncodePublicKey(public *rsa.PublicKey) ([]byte, error)
- func EncodeSSHKey(public *rsa.PublicKey) ([]byte, error)
- func EscapeQualifiedNameForDisk(in string) string
- func ExecuteTemplate(w io.Writer, templateText string, data interface{}) error
- func ExecuteTemplateToString(templateText string, data interface{}) (string, error)
- func FileExists(filename string) (bool, error)
- func FlushLogs()
- func Forever(f func(), period time.Duration)
- func GenerateKey(bits int) (*rsa.PrivateKey, *rsa.PublicKey, error)
- func GenerateSelfSignedCert(host, certPath, keyPath string) error
- func GetClient(req *http.Request) string
- func HandleCrash()
- func HandleError(err error)
- func InitFlags()
- func InitLogs()
- func IsCIdentifier(value string) bool
- func IsDNS1123Label(value string) bool
- func IsDNS1123Subdomain(value string) bool
- func IsDNS952Label(value string) bool
- func IsProbableEOF(err error) bool
- func IsQualifiedName(value string) bool
- func IsValidIPv4(value string) bool
- func IsValidLabelValue(value string) bool
- func IsValidPortNum(port int) bool
- func JoinQualifiedName(namespace, name string) string
- func MakePrivateKeySignerFromBytes(buffer []byte) (ssh.Signer, error)
- func MakePrivateKeySignerFromFile(key string) (ssh.Signer, error)
- func NewLogger(prefix string) *log.Logger
- func NewUUID() types.UID
- func ObjectDiff(a, b interface{}) string
- func ObjectGoPrintDiff(a, b interface{}) string
- func ObjectGoPrintSideBySide(a, b interface{}) string
- func RunInResourceContainer(containerName string) error
- func RunSSHCommand(cmd, host string, signer ssh.Signer) (string, string, int, error)
- func ShortenString(str string, n int) string
- func SplitPort(id string) (name, port string, valid bool)
- func SplitQualifiedName(str string) (string, string)
- func StringDiff(a, b string) string
- func UnescapeQualifiedNameForDisk(in string) string
- func Until(f func(), period time.Duration, stopCh <-chan struct{})
- func WarnWordSepNormalizeFunc(f *pflag.FlagSet, name string) pflag.NormalizedName
- func WordSepNormalizeFunc(f *pflag.FlagSet, name string) pflag.NormalizedName
- type BoolFlag
- type Cache
- type Clock
- type ConfigurationMap
- type FakeClock
- type FakeHandler
- type GlogWriter
- type IP
- type IPNet
- type IntOrString
- type IntstrKind
- type LogInterface
- type PortRange
- type RateLimiter
- type RealClock
- type Route
- type Runner
- type SSHTunnel
- type SSHTunnelEntry
- type SSHTunnelList
- type StringFlag
- type StringList
- type StringSet
- func (s StringSet) Delete(items ...string)
- func (s StringSet) Difference(s2 StringSet) StringSet
- func (s StringSet) Has(item string) bool
- func (s StringSet) HasAll(items ...string) bool
- func (s StringSet) HasAny(items ...string) bool
- func (s StringSet) Insert(items ...string)
- func (s1 StringSet) IsSuperset(s2 StringSet) bool
- func (s StringSet) Len() int
- func (s StringSet) List() []string
- func (s StringSet) PopAny() (string, bool)
- func (s1 StringSet) Union(s2 StringSet) StringSet
- type TestInterface
- type Time
- type Trace
Constants ¶
const CIdentifierFmt string = "[A-Za-z_][A-Za-z0-9_]*"
const DNS1123LabelFmt string = "[a-z0-9]([-a-z0-9]*[a-z0-9])?"
const DNS1123LabelMaxLength int = 63
const DNS1123SubdomainFmt string = DNS1123LabelFmt + "(\\." + DNS1123LabelFmt + ")*"
const DNS1123SubdomainMaxLength int = 253
const DNS952LabelFmt string = "[a-z]([-a-z0-9]*[a-z0-9])?"
const DNS952LabelMaxLength int = 24
const LabelValueFmt string = "(" + QualifiedNameFmt + ")?"
const LabelValueMaxLength int = 63
const QualifiedNameFmt string = "(" + qnameCharFmt + qnameExtCharFmt + "*)?" + qnameCharFmt
const QualifiedNameMaxLength int = 63
Variables ¶
var ErrorHandlers = []func(error){logError}
ErrorHandlers is a list of functions which will be invoked when an unreturnable error occurs.
var NeverStop <-chan struct{} = make(chan struct{})
NeverStop may be passed to Until to make it never stop.
var PanicHandlers = []func(interface{}){logPanic}
PanicHandlers is a list of functions which will be invoked when a panic happens.
var ReallyCrash bool
For testing, bypass HandleCrash.
Functions ¶
func AddAllFlagsToPFlags ¶
func AddAllFlagsToPFlags()
AddAllFlagsToPFlags adds all of the top level 'flag' package flags to the top level 'pflag' flags.
func AddFlagSetToPFlagSet ¶
AddFlagSetToPFlagSet adds all of the flags in a 'flag.FlagSet' package flags to a 'pflag.FlagSet'.
func AddPFlagSetToPFlagSet ¶
AddPFlagSetToPFlagSet merges the flags of fsFrom into fsTo.
func AllPtrFieldsNil ¶
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 ¶
Writes 'value' to /proc/<pid>/oom_score_adj. PID = 0 means self
func CertPoolFromFile ¶ added in v0.11.0
CertPoolFromFile returns an x509.CertPool containing the certificates in the given PEM-encoded file. Returns an error if the file could not be read, a certificate could not be parsed, or if the file does not contain any certificates
func ChooseHostInterface ¶
ChooseHostInterface is a method used fetch an IP for a daemon. It uses data from /proc/net/route file. For a node with no internet connection ,it returns error For a multi n/w interface node it returns the IP of the interface with gateway on it.
func CompileRegexps ¶
Takes a list of strings and compiles them into a list of regular expressions
func DeepHashObject ¶
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 EncodePrivateKey ¶ added in v0.14.2
func EncodePrivateKey(private *rsa.PrivateKey) []byte
func EscapeQualifiedNameForDisk ¶ added in v0.11.0
EscapeQualifiedNameForDisk converts a plugin name, which might contain a / into a string that is safe to use on-disk. This assumes that the input has already been validates as a qualified name. we use "~" rather than ":" here in case we ever use a filesystem that doesn't allow ":".
func ExecuteTemplate ¶
ExecuteTemplate executes templateText with data and output written to w.
func ExecuteTemplateToString ¶
func FileExists ¶ added in v0.14.2
func Forever ¶
Forever loops forever running f every period. Catches any panics, and keeps going. Deprecated. Please use Until and pass NeverStop as the stopCh.
func GenerateKey ¶ added in v0.14.2
func GenerateSelfSignedCert ¶
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 HandleCrash ¶
func HandleCrash()
HandleCrash simply catches a crash and logs an error. Meant to be called via defer.
func HandleError ¶
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 IsCIdentifier ¶
IsCIdentifier tests for a string that conforms the definition of an identifier in C. This checks the format, but not the length.
func IsDNS1123Label ¶
IsDNS1123Label tests for a string that conforms to the definition of a label in DNS (RFC 1123).
func IsDNS1123Subdomain ¶
IsDNS1123Subdomain tests for a string that conforms to the definition of a subdomain in DNS (RFC 1123).
func IsDNS952Label ¶
IsDNS952Label tests for a string that conforms to the definition of a label in DNS (RFC 952).
func IsProbableEOF ¶ added in v0.14.2
IsProbableEOF returns true if the given error resembles a connection termination scenario that would justify assuming that the watch is empty. These errors are what the Go http stack returns back to us which are general connection closure errors (strongly correlated) and callers that need to differentiate probable errors in connection behavior between normal "this is disconnected" should use the method.
func IsQualifiedName ¶
func IsValidIPv4 ¶ added in v0.11.0
IsValidIPv4 tests that the argument is a valid IPv4 address.
func IsValidLabelValue ¶
func IsValidPortNum ¶
IsValidPortNum tests that the argument is a valid, non-zero port number.
func JoinQualifiedName ¶
Joins 'namespace' and 'name' and returns a fully qualified name Assumes that the input is valid.
func MakePrivateKeySignerFromBytes ¶ added in v0.14.2
func MakePrivateKeySignerFromFile ¶ added in v0.14.2
func NewUUID ¶
*
- 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.
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 ¶
func ObjectGoPrintSideBySide(a, b interface{}) string
ObjectGoPrintSideBySide prints a and b as textual dumps side by side, enabling easy visual scanning for mismatches.
func RunInResourceContainer ¶ added in v0.14.2
Creates resource-only containerName if it does not already exist and moves the current process to it.
containerName must be an absolute container name.
func RunSSHCommand ¶ added in v0.14.2
func ShortenString ¶ added in v0.14.2
func SplitPort ¶ added in v0.14.2
Takes a string of the form "name:port" or "name".
- If id is of the form "name" or "name:", then return (name, "", true)
- If id is of the form "name:port", then return (name, port, true)
- Otherwise, return ("", "", false)
Additionally, name must be non-empty or valid will be returned false.
Port is returned as a string, and it is not required to be numeric (could be used for a named port, for example).
func SplitQualifiedName ¶
Splits a fully qualified name and returns its namespace and name. Assumes that the input 'str' has been validated.
func StringDiff ¶
StringDiff diffs a and b and returns a human readable diff.
func UnescapeQualifiedNameForDisk ¶ added in v0.11.0
UnescapeQualifiedNameForDisk converts an escaped plugin name (as per EscapeQualifiedNameForDisk) back to its normal form. This assumes that the input has already been validates as a qualified name.
func Until ¶
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.
func WarnWordSepNormalizeFunc ¶ added in v0.14.2
func WarnWordSepNormalizeFunc(f *pflag.FlagSet, name string) pflag.NormalizedName
WarnWordSepNormalizeFunc changes and warns for flags that contain "_" separators
func WordSepNormalizeFunc ¶ added in v0.14.2
func WordSepNormalizeFunc(f *pflag.FlagSet, name string) pflag.NormalizedName
WordSepNormalizeFunc changes all flags that contain "_" separators
Types ¶
type BoolFlag ¶
type BoolFlag struct {
// contains filtered or unexported fields
}
BoolFlag is a boolean flag compatible with flags and pflags that keeps track of whether it had a value supplied or not. Beware! If you use this type, you must actually specify --flag-name=true, you cannot leave it as --flag-name and still have the value set
type Cache ¶ added in v0.14.2
type Cache []*cacheShard
type Clock ¶
Clock allows for injecting fake or real clocks into code that needs to do arbitrary things based on time.
type ConfigurationMap ¶
func (*ConfigurationMap) Set ¶
func (m *ConfigurationMap) Set(value string) error
func (*ConfigurationMap) String ¶
func (m *ConfigurationMap) String() string
func (*ConfigurationMap) Type ¶
func (*ConfigurationMap) Type() string
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 ¶
func (f *FakeHandler) ValidateRequestCount(t TestInterface, count int) bool
type GlogWriter ¶
type GlogWriter struct{}
GlogWriter serves as a bridge between the standard log package and the glog package.
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) Fuzz ¶
func (intstr *IntOrString) Fuzz(c fuzz.Continue)
func (IntOrString) MarshalJSON ¶
func (intstr IntOrString) MarshalJSON() ([]byte, error)
MarshalJSON implements the json.Marshaller interface.
func (*IntOrString) String ¶
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 PortRange ¶ added in v0.14.2
PortRange represents a range of TCP/UDP ports. To represent a single port, set Size to 1.
func ParsePortRange ¶ added in v0.14.2
ParsePortRange parses a string of the form "min-max", inclusive at both ends, and initializs a new PortRange from it.
func (*PortRange) Contains ¶ added in v0.14.2
Contains tests whether a given port falls within the PortRange.
func (*PortRange) Set ¶ added in v0.14.2
Set parses a string of the form "min-max", inclusive at both ends, and sets the PortRange from it. This is part of the flag.Value and pflag.Value interfaces.
type RateLimiter ¶
type RateLimiter interface { // CanAccept returns true if the rate is below the limit, false otherwise CanAccept() bool // Accept returns once a token becomes available. Accept() // Stop stops the rate limiter, subsequent calls to CanAccept will return false Stop() }
func NewFakeRateLimiter ¶ added in v0.11.0
func NewFakeRateLimiter() RateLimiter
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 Runner ¶
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.
type SSHTunnel ¶ added in v0.14.2
type SSHTunnel struct { Config *ssh.ClientConfig Host string SSHPort string // contains filtered or unexported fields }
TODO: Unit tests for this code, we can spin up a test SSH server with instructions here: https://godoc.org/golang.org/x/crypto/ssh#ServerConn
func NewSSHTunnel ¶ added in v0.14.2
func NewSSHTunnelFromBytes ¶ added in v0.14.2
type SSHTunnelEntry ¶ added in v0.14.2
type SSHTunnelList ¶ added in v0.14.2
type SSHTunnelList []SSHTunnelEntry
func MakeSSHTunnels ¶ added in v0.14.2
func MakeSSHTunnels(user, keyfile string, addresses []string) (SSHTunnelList, error)
func (SSHTunnelList) Close ¶ added in v0.14.2
func (l SSHTunnelList) Close()
Close asynchronously closes all tunnels in the list after waiting for 1 minute. Tunnels will still be open upon this function's return, but should no longer be used.
func (SSHTunnelList) Dial ¶ added in v0.14.2
func (l SSHTunnelList) Dial(network, addr string) (net.Conn, error)
func (SSHTunnelList) Has ¶ added in v0.14.2
func (l SSHTunnelList) Has(addr string) bool
func (SSHTunnelList) Open ¶ added in v0.14.2
func (l SSHTunnelList) Open() error
type StringFlag ¶
type StringFlag struct {
// contains filtered or unexported fields
}
StringFlag is a string flag compatible with flags and pflags that keeps track of whether it had a value supplied or not.
func NewStringFlag ¶ added in v0.14.2
func NewStringFlag(defaultVal string) StringFlag
func (*StringFlag) Default ¶
func (f *StringFlag) Default(value string)
func (StringFlag) Provided ¶
func (f StringFlag) Provided() bool
func (*StringFlag) Set ¶
func (f *StringFlag) Set(value string) error
func (StringFlag) String ¶
func (f StringFlag) String() string
func (*StringFlag) Type ¶
func (f *StringFlag) Type() string
func (StringFlag) Value ¶
func (f StringFlag) Value() string
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 ¶
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 KeySet ¶
KeySet creates a StringSet from a keys of a map[string](? extends interface{}). Since you can't describe that map type in the Go type system the reflected value is required.
func NewStringSet ¶
NewStringSet creates a StringSet from a list of values.
func (StringSet) Difference ¶
Difference returns a set of objects that are not in s2 For example: s1 = {1, 2, 3} s2 = {1, 2, 4, 5} s1.Difference(s2) = {3} s2.Difference(s1) = {4, 5}
func (StringSet) HasAny ¶ added in v0.14.2
HasAny returns true if any items are contained in the set.
func (StringSet) IsSuperset ¶
IsSuperset returns true iff s1 is a superset of s2.
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 ¶
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 (Time) MarshalJSON ¶
MarshalJSON implements the json.Marshaler interface.
func (Time) Rfc3339Copy ¶
Rfc3339Copy returns a copy of the Time at second-level precision.
func (*Time) UnmarshalJSON ¶
UnmarshalJSON implements the json.Unmarshaller interface.
Source Files ¶
- bool_flag.go
- cache.go
- clock.go
- configuration_map.go
- crypto.go
- diff.go
- doc.go
- escape.go
- fake_handler.go
- flags.go
- hash.go
- http.go
- list.go
- logs.go
- net.go
- pflag_import.go
- port_range.go
- port_split.go
- resource_container_linux.go
- runner.go
- set.go
- ssh.go
- string_flag.go
- template.go
- throttle.go
- time.go
- trace.go
- util.go
- uuid.go
- validation.go
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 flushwriter implements a wrapper for a writer that flushes on every write if that writer implements the io.Flusher interface
|
Package flushwriter implements a wrapper for a writer that flushes on every write if that writer implements the io.Flusher interface |
Package httpstream adds multiplexed streaming support to HTTP requests and responses via connection upgrades.
|
Package httpstream adds multiplexed streaming support to HTTP requests and responses via connection upgrades. |
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 proxy provides transport and upgrade support for proxies
|
Package proxy provides transport and upgrade support for proxies |
Package slice provides utility methods for common operations on slices.
|
Package slice provides utility methods for common operations on slices. |
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. |
Package workqueue provides a simple queue that supports the following features: * Fair: items processed in the order in which they are added.
|
Package workqueue provides a simple queue that supports the following features: * Fair: items processed in the order in which they are added. |