fingerprint

package
v1.1.2 Latest Latest
Warning

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

Go to latest
Published: Jun 22, 2021 License: MPL-2.0 Imports: 38 Imported by: 256

Documentation

Index

Constants

View Source
const (
	// AzureMetadataURL is where the Azure metadata server normally resides. We hardcode the
	// "instance" path as well since it's the only one we access here.
	AzureMetadataURL = "http://169.254.169.254/metadata/instance/"

	// AzureMetadataAPIVersion is the version used when contacting the Azure metadata
	// services.
	AzureMetadataAPIVersion = "2019-06-04"

	// AzureMetadataTimeout is the timeout used when contacting the Azure metadata
	// services.
	AzureMetadataTimeout = 2 * time.Second
)
View Source
const (
	// This is where the GCE metadata server normally resides. We hardcode the
	// "instance" path as well since it's the only one we access here.
	DEFAULT_GCE_URL = "http://169.254.169.254/computeMetadata/v1/instance/"

	// GceMetadataTimeout is the timeout used when contacting the GCE metadata
	// service
	GceMetadataTimeout = 2 * time.Second
)
View Source
const (
	EmptyDuration = time.Duration(0)

	// TightenNetworkTimeoutsConfig is a config key that can be used during
	// tests to tighten the timeouts for fingerprinters that make network calls.
	TightenNetworkTimeoutsConfig = "test.tighten_network_timeouts"
)

EmptyDuration is to be used by fingerprinters that are not periodic.

View Source
const (
	// AwsMetadataTimeout is the timeout used when contacting the AWS metadata
	// services.
	AwsMetadataTimeout = 2 * time.Second
)

Variables

This section is empty.

Functions

func BuiltinFingerprints

func BuiltinFingerprints() []string

BuiltinFingerprints is a slice containing the key names of all registered fingerprints available. The order of this slice should be preserved when fingerprinting.

Types

type ArchFingerprint

type ArchFingerprint struct {
	StaticFingerprinter
	// contains filtered or unexported fields
}

ArchFingerprint is used to fingerprint the architecture

func (*ArchFingerprint) Fingerprint

func (f *ArchFingerprint) Fingerprint(req *FingerprintRequest, resp *FingerprintResponse) error

type AzureMetadataPair added in v1.0.0

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

type AzureMetadataTag added in v1.0.0

type AzureMetadataTag struct {
	Name  string
	Value string
}

type BridgeFingerprint added in v0.12.0

type BridgeFingerprint struct {
	StaticFingerprinter
	// contains filtered or unexported fields
}

func (*BridgeFingerprint) Fingerprint added in v0.12.0

func (f *BridgeFingerprint) Fingerprint(req *FingerprintRequest, resp *FingerprintResponse) error

type CGroupFingerprint added in v0.3.0

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

func (*CGroupFingerprint) Fingerprint added in v0.3.0

func (f *CGroupFingerprint) Fingerprint(req *FingerprintRequest, resp *FingerprintResponse) error

Fingerprint tries to find a valid cgroup mount point

func (*CGroupFingerprint) Periodic added in v0.3.0

func (f *CGroupFingerprint) Periodic() (bool, time.Duration)

Periodic determines the interval at which the periodic fingerprinter will run.

type CNIFingerprint added in v0.12.0

type CNIFingerprint struct {
	StaticFingerprinter
	// contains filtered or unexported fields
}

func (*CNIFingerprint) Fingerprint added in v0.12.0

func (f *CNIFingerprint) Fingerprint(req *FingerprintRequest, resp *FingerprintResponse) error

func (*CNIFingerprint) Reload added in v0.12.0

func (f *CNIFingerprint) Reload()

type CPU added in v1.0.0

type CPU struct {
	// use small units to reduce size of the embedded table
	Cores uint32 // good for 4 billion cores
	MHz   uint32 // good for 4 billion MHz
}

CPU contains virtual core count and processor baseline performance.

func LookupEC2CPU added in v1.0.0

func LookupEC2CPU(instanceType string) *CPU

LookupEC2CPU returns the virtual core count and core speed information from a lookup table generated from the Amazon EC2 API.

If the instance type does not exist, nil is returned.

func (CPU) GHz added in v1.0.0

func (c CPU) GHz() float64

GHz returns the speed of CPU in ghz.

func (CPU) Ticks added in v1.0.0

func (c CPU) Ticks() int

Ticks computes the total number of cycles available across the virtual cores of a CPU.

type CPUFingerprint

type CPUFingerprint struct {
	StaticFingerprinter
	// contains filtered or unexported fields
}

CPUFingerprint is used to fingerprint the CPU

func (*CPUFingerprint) Fingerprint

func (f *CPUFingerprint) Fingerprint(req *FingerprintRequest, resp *FingerprintResponse) error

type ConsulFingerprint

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

ConsulFingerprint is used to fingerprint for Consul

func (*ConsulFingerprint) Fingerprint

func (f *ConsulFingerprint) Fingerprint(req *FingerprintRequest, resp *FingerprintResponse) error

func (*ConsulFingerprint) Periodic added in v0.2.0

func (f *ConsulFingerprint) Periodic() (bool, time.Duration)

type DefaultMountPointDetector added in v0.3.0

type DefaultMountPointDetector struct {
}

Implements the interface detector which calls the cgroups library directly

func (*DefaultMountPointDetector) MountPoint added in v0.3.0

func (b *DefaultMountPointDetector) MountPoint() (string, error)

Call out to the default cgroup library

type DefaultNetworkInterfaceDetector added in v0.2.0

type DefaultNetworkInterfaceDetector struct {
}

Implements the interface detector which calls net directly

func (*DefaultNetworkInterfaceDetector) Addrs added in v0.2.0

func (*DefaultNetworkInterfaceDetector) InterfaceByName added in v0.2.0

func (b *DefaultNetworkInterfaceDetector) InterfaceByName(name string) (*net.Interface, error)

func (*DefaultNetworkInterfaceDetector) Interfaces added in v0.2.0

func (b *DefaultNetworkInterfaceDetector) Interfaces() ([]net.Interface, error)

type EnvAWSFingerprint

type EnvAWSFingerprint struct {
	StaticFingerprinter
	// contains filtered or unexported fields
}

EnvAWSFingerprint is used to fingerprint AWS metadata

func (*EnvAWSFingerprint) Fingerprint

func (f *EnvAWSFingerprint) Fingerprint(request *FingerprintRequest, response *FingerprintResponse) error

type EnvAzureFingerprint added in v1.0.0

type EnvAzureFingerprint struct {
	StaticFingerprinter
	// contains filtered or unexported fields
}

EnvAzureFingerprint is used to fingerprint Azure metadata

func (*EnvAzureFingerprint) Fingerprint added in v1.0.0

func (f *EnvAzureFingerprint) Fingerprint(request *FingerprintRequest, response *FingerprintResponse) error

func (*EnvAzureFingerprint) Get added in v1.0.0

func (f *EnvAzureFingerprint) Get(attribute string, format string) (string, error)

type EnvGCEFingerprint added in v0.2.0

type EnvGCEFingerprint struct {
	StaticFingerprinter
	// contains filtered or unexported fields
}

EnvGCEFingerprint is used to fingerprint GCE metadata

func (*EnvGCEFingerprint) Fingerprint added in v0.2.0

func (f *EnvGCEFingerprint) Fingerprint(req *FingerprintRequest, resp *FingerprintResponse) error

func (*EnvGCEFingerprint) Get added in v0.2.0

func (f *EnvGCEFingerprint) Get(attribute string, recursive bool) (string, error)

type Factory

type Factory func(log.Logger) Fingerprint

Factory is used to instantiate a new Fingerprint

type Fingerprint

type Fingerprint interface {
	// Fingerprint is used to update properties of the Node,
	// and returns a diff of updated node attributes and a potential error.
	Fingerprint(*FingerprintRequest, *FingerprintResponse) error

	// Periodic is a mechanism for the fingerprinter to indicate that it should
	// be run periodically. The return value is a boolean indicating if it
	// should be periodic, and if true, a duration.
	Periodic() (bool, time.Duration)
}

Fingerprint is used for doing "fingerprinting" of the host to automatically determine attributes, resources, and metadata about it. Each of these is a heuristic, and many of them can be applied on a particular host.

func NewArchFingerprint

func NewArchFingerprint(logger log.Logger) Fingerprint

NewArchFingerprint is used to create an OS fingerprint

func NewBridgeFingerprint added in v0.12.0

func NewBridgeFingerprint(logger log.Logger) Fingerprint

func NewCGroupFingerprint added in v0.3.0

func NewCGroupFingerprint(logger log.Logger) Fingerprint

NewCGroupFingerprint returns a new cgroup fingerprinter

func NewCNIFingerprint added in v0.12.0

func NewCNIFingerprint(logger log.Logger) Fingerprint

func NewCPUFingerprint

func NewCPUFingerprint(logger log.Logger) Fingerprint

NewCPUFingerprint is used to create a CPU fingerprint

func NewConsulFingerprint

func NewConsulFingerprint(logger log.Logger) Fingerprint

NewConsulFingerprint is used to create a Consul fingerprint

func NewEnvAWSFingerprint

func NewEnvAWSFingerprint(logger log.Logger) Fingerprint

NewEnvAWSFingerprint is used to create a fingerprint from AWS metadata

func NewEnvAzureFingerprint added in v1.0.0

func NewEnvAzureFingerprint(logger log.Logger) Fingerprint

NewEnvAzureFingerprint is used to create a fingerprint from Azure metadata

func NewEnvGCEFingerprint added in v0.2.0

func NewEnvGCEFingerprint(logger log.Logger) Fingerprint

NewEnvGCEFingerprint is used to create a fingerprint from GCE metadata

func NewFingerprint

func NewFingerprint(name string, logger log.Logger) (Fingerprint, error)

NewFingerprint is used to instantiate and return a new fingerprint given the name and a logger

func NewHostFingerprint

func NewHostFingerprint(logger log.Logger) Fingerprint

NewHostFingerprint is used to create a Host fingerprint

func NewMemoryFingerprint

func NewMemoryFingerprint(logger log.Logger) Fingerprint

NewMemoryFingerprint is used to create a Memory fingerprint

func NewNetworkFingerprint added in v0.3.2

func NewNetworkFingerprint(logger log.Logger) Fingerprint

NewNetworkFingerprint returns a new NetworkFingerprinter with the given logger

func NewNomadFingerprint added in v0.3.2

func NewNomadFingerprint(logger log.Logger) Fingerprint

NewNomadFingerprint is used to create a Nomad fingerprint

func NewSignalFingerprint added in v0.5.0

func NewSignalFingerprint(logger log.Logger) Fingerprint

NewSignalFingerprint is used to create a Signal fingerprint

func NewStorageFingerprint

func NewStorageFingerprint(logger log.Logger) Fingerprint

func NewVaultFingerprint added in v0.5.0

func NewVaultFingerprint(logger log.Logger) Fingerprint

NewVaultFingerprint is used to create a Vault fingerprint

type FingerprintRequest added in v0.9.0

type FingerprintRequest struct {
	Config *config.Config
	Node   *structs.Node
}

FingerprintRequest is a request which a fingerprinter accepts to fingerprint the node

type FingerprintResponse added in v0.9.0

type FingerprintResponse struct {
	Attributes    map[string]string
	Links         map[string]string
	Resources     *structs.Resources // COMPAT(0.10): Remove in 0.10
	NodeResources *structs.NodeResources

	// Detected is a boolean indicating whether the fingerprinter detected
	// if the resource was available
	Detected bool
}

FingerprintResponse is the response which a fingerprinter annotates with the results of the fingerprint method

func (*FingerprintResponse) AddAttribute added in v0.9.0

func (f *FingerprintResponse) AddAttribute(name, value string)

AddAttribute adds the name and value for a node attribute to the fingerprint response

func (f *FingerprintResponse) AddLink(name, value string)

AddLink adds a link entry to the fingerprint response

func (*FingerprintResponse) RemoveAttribute added in v0.9.0

func (f *FingerprintResponse) RemoveAttribute(name string)

RemoveAttribute sets the given attribute to empty, which will later remove it entirely from the node

func (f *FingerprintResponse) RemoveLink(name string)

RemoveLink removes a link entry from the fingerprint response. This will later remove it entirely from the node

type GCEMetadataNetworkInterface added in v0.2.0

type GCEMetadataNetworkInterface struct {
	AccessConfigs []struct {
		ExternalIp string
		Type       string
	}
	ForwardedIps []string
	Ip           string
	Network      string
}

type HealthCheck added in v0.8.0

type HealthCheck interface {
	// Check is used to update properties of the node on the status of the health
	// check
	HealthCheck(*cstructs.HealthCheckRequest, *cstructs.HealthCheckResponse) error

	// GetHealthCheckInterval is a mechanism for the health checker to indicate that
	// it should be run periodically. The return value is a boolean indicating
	// whether it should be done periodically, and the time interval at which
	// this check should happen.
	GetHealthCheckInterval(*cstructs.HealthCheckIntervalRequest, *cstructs.HealthCheckIntervalResponse) error
}

HealthCheck is used for doing periodic health checks. On a given time interfal, a health check will be called by the fingerprint manager of the node.

type HostFingerprint

type HostFingerprint struct {
	StaticFingerprinter
	// contains filtered or unexported fields
}

HostFingerprint is used to fingerprint the host

func (*HostFingerprint) Fingerprint

func (f *HostFingerprint) Fingerprint(req *FingerprintRequest, resp *FingerprintResponse) error

type MemoryFingerprint

type MemoryFingerprint struct {
	StaticFingerprinter
	// contains filtered or unexported fields
}

MemoryFingerprint is used to fingerprint the available memory on the node

func (*MemoryFingerprint) Fingerprint

func (f *MemoryFingerprint) Fingerprint(req *FingerprintRequest, resp *FingerprintResponse) error

type MountPointDetector added in v0.3.0

type MountPointDetector interface {
	MountPoint() (string, error)
}

An interface to isolate calls to the cgroup library This facilitates testing where we can implement fake mount points to test various code paths

type NetworkFingerprint

type NetworkFingerprint struct {
	StaticFingerprinter
	// contains filtered or unexported fields
}

NetworkFingerprint is used to fingerprint the Network capabilities of a node

func (*NetworkFingerprint) Fingerprint

func (f *NetworkFingerprint) Fingerprint(req *FingerprintRequest, resp *FingerprintResponse) error

type NetworkInterfaceDetector added in v0.2.0

type NetworkInterfaceDetector interface {
	Interfaces() ([]net.Interface, error)
	InterfaceByName(name string) (*net.Interface, error)
	Addrs(intf *net.Interface) ([]net.Addr, error)
}

An interface to isolate calls to various api in net package This facilitates testing where we can implement fake interfaces and addresses to test varios code paths

type NomadFingerprint added in v0.3.2

type NomadFingerprint struct {
	StaticFingerprinter
	// contains filtered or unexported fields
}

NomadFingerprint is used to fingerprint the Nomad version

func (*NomadFingerprint) Fingerprint added in v0.3.2

func (f *NomadFingerprint) Fingerprint(req *FingerprintRequest, resp *FingerprintResponse) error

type ReloadableFingerprint added in v0.12.0

type ReloadableFingerprint interface {
	Fingerprint
	Reload()
}

ReloadableFingerprint can be implemented if the fingerprinter needs to be run during client reload. If implemented, the client will call Reload during client reload then immediately Fingerprint

type ReqError added in v0.2.0

type ReqError struct {
	StatusCode int
}

func (ReqError) Error added in v0.2.0

func (e ReqError) Error() string

type SignalFingerprint added in v0.5.0

type SignalFingerprint struct {
	StaticFingerprinter
	// contains filtered or unexported fields
}

SignalFingerprint is used to fingerprint the available signals

func (*SignalFingerprint) Fingerprint added in v0.5.0

func (f *SignalFingerprint) Fingerprint(req *FingerprintRequest, resp *FingerprintResponse) error

type StaticFingerprinter added in v0.2.0

type StaticFingerprinter struct{}

StaticFingerprinter can be embedded in a struct that has a Fingerprint method to make it non-periodic.

func (*StaticFingerprinter) Periodic added in v0.2.0

func (s *StaticFingerprinter) Periodic() (bool, time.Duration)

type StorageFingerprint

type StorageFingerprint struct {
	StaticFingerprinter
	// contains filtered or unexported fields
}

StorageFingerprint is used to measure the amount of storage free for applications that the Nomad agent will run on this machine.

func (*StorageFingerprint) Fingerprint

func (f *StorageFingerprint) Fingerprint(req *FingerprintRequest, resp *FingerprintResponse) error

type VaultFingerprint added in v0.5.0

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

VaultFingerprint is used to fingerprint for Vault

func (*VaultFingerprint) Fingerprint added in v0.5.0

func (f *VaultFingerprint) Fingerprint(req *FingerprintRequest, resp *FingerprintResponse) error

func (*VaultFingerprint) Periodic added in v0.5.0

func (f *VaultFingerprint) Periodic() (bool, time.Duration)

Jump to

Keyboard shortcuts

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