From 5b067a3e4fa2bee98096db0ba98155a585c2eb73 Mon Sep 17 00:00:00 2001 From: Alex Dadgar Date: Thu, 5 Nov 2015 13:46:02 -0800 Subject: [PATCH] Merge fix --- client/driver/docker.go | 4 +++- client/driver/exec.go | 4 +++- client/driver/java.go | 4 +++- client/driver/qemu.go | 4 +++- client/driver/raw_exec.go | 4 +++- client/driver/rkt.go | 4 +++- client/fingerprint/arch.go | 1 + client/fingerprint/consul.go | 4 ++++ client/fingerprint/cpu.go | 1 + client/fingerprint/env_aws.go | 1 + client/fingerprint/env_gce.go | 1 + client/fingerprint/fingerprint.go | 17 +++++++++++++++++ client/fingerprint/host.go | 1 + client/fingerprint/memory.go | 1 + client/fingerprint/network_unix.go | 1 + client/fingerprint/network_windows.go | 1 + client/fingerprint/storage.go | 1 + 17 files changed, 48 insertions(+), 6 deletions(-) diff --git a/client/driver/docker.go b/client/driver/docker.go index d5031d5d9..1708c6921 100644 --- a/client/driver/docker.go +++ b/client/driver/docker.go @@ -13,11 +13,13 @@ import ( "github.com/hashicorp/nomad/client/allocdir" "github.com/hashicorp/nomad/client/config" "github.com/hashicorp/nomad/client/driver/args" + "github.com/hashicorp/nomad/client/fingerprint" "github.com/hashicorp/nomad/nomad/structs" ) type DockerDriver struct { DriverContext + fingerprint.StaticFingerprinter } type dockerPID struct { @@ -37,7 +39,7 @@ type dockerHandle struct { } func NewDockerDriver(ctx *DriverContext) Driver { - return &DockerDriver{*ctx} + return &DockerDriver{DriverContext: *ctx} } // dockerClient creates *docker.Client. In test / dev mode we can use ENV vars diff --git a/client/driver/exec.go b/client/driver/exec.go index 213bc574f..4de719c46 100644 --- a/client/driver/exec.go +++ b/client/driver/exec.go @@ -10,6 +10,7 @@ import ( "github.com/hashicorp/nomad/client/allocdir" "github.com/hashicorp/nomad/client/config" "github.com/hashicorp/nomad/client/driver/executor" + "github.com/hashicorp/nomad/client/fingerprint" "github.com/hashicorp/nomad/client/getter" "github.com/hashicorp/nomad/nomad/structs" ) @@ -18,6 +19,7 @@ import ( // features. type ExecDriver struct { DriverContext + fingerprint.StaticFingerprinter } // execHandle is returned from Start/Open as a handle to the PID @@ -29,7 +31,7 @@ type execHandle struct { // NewExecDriver is used to create a new exec driver func NewExecDriver(ctx *DriverContext) Driver { - return &ExecDriver{*ctx} + return &ExecDriver{DriverContext: *ctx} } func (d *ExecDriver) Fingerprint(cfg *config.Config, node *structs.Node) (bool, error) { diff --git a/client/driver/java.go b/client/driver/java.go index 808bdfe5b..1aa2c6d3f 100644 --- a/client/driver/java.go +++ b/client/driver/java.go @@ -13,6 +13,7 @@ import ( "github.com/hashicorp/nomad/client/allocdir" "github.com/hashicorp/nomad/client/config" "github.com/hashicorp/nomad/client/driver/executor" + "github.com/hashicorp/nomad/client/fingerprint" "github.com/hashicorp/nomad/client/getter" "github.com/hashicorp/nomad/nomad/structs" ) @@ -21,6 +22,7 @@ import ( // It literally just fork/execs tasks with the java command. type JavaDriver struct { DriverContext + fingerprint.StaticFingerprinter } // javaHandle is returned from Start/Open as a handle to the PID @@ -32,7 +34,7 @@ type javaHandle struct { // NewJavaDriver is used to create a new exec driver func NewJavaDriver(ctx *DriverContext) Driver { - return &JavaDriver{*ctx} + return &JavaDriver{DriverContext: *ctx} } func (d *JavaDriver) Fingerprint(cfg *config.Config, node *structs.Node) (bool, error) { diff --git a/client/driver/qemu.go b/client/driver/qemu.go index 0eab4e659..b0d0afc62 100644 --- a/client/driver/qemu.go +++ b/client/driver/qemu.go @@ -16,6 +16,7 @@ import ( "github.com/hashicorp/nomad/client/allocdir" "github.com/hashicorp/nomad/client/config" + "github.com/hashicorp/nomad/client/fingerprint" "github.com/hashicorp/nomad/client/getter" "github.com/hashicorp/nomad/nomad/structs" ) @@ -29,6 +30,7 @@ var ( // planned in the future type QemuDriver struct { DriverContext + fingerprint.StaticFingerprinter } // qemuHandle is returned from Start/Open as a handle to the PID @@ -48,7 +50,7 @@ type qemuPID struct { // NewQemuDriver is used to create a new exec driver func NewQemuDriver(ctx *DriverContext) Driver { - return &QemuDriver{*ctx} + return &QemuDriver{DriverContext: *ctx} } func (d *QemuDriver) Fingerprint(cfg *config.Config, node *structs.Node) (bool, error) { diff --git a/client/driver/raw_exec.go b/client/driver/raw_exec.go index 856f2b7fc..c53e73a2b 100644 --- a/client/driver/raw_exec.go +++ b/client/driver/raw_exec.go @@ -13,6 +13,7 @@ import ( "github.com/hashicorp/nomad/client/allocdir" "github.com/hashicorp/nomad/client/config" "github.com/hashicorp/nomad/client/driver/args" + "github.com/hashicorp/nomad/client/fingerprint" "github.com/hashicorp/nomad/client/getter" "github.com/hashicorp/nomad/nomad/structs" ) @@ -31,6 +32,7 @@ const ( // and this should only be used when explicitly needed. type RawExecDriver struct { DriverContext + fingerprint.StaticFingerprinter } // rawExecHandle is returned from Start/Open as a handle to the PID @@ -42,7 +44,7 @@ type rawExecHandle struct { // NewRawExecDriver is used to create a new raw exec driver func NewRawExecDriver(ctx *DriverContext) Driver { - return &RawExecDriver{*ctx} + return &RawExecDriver{DriverContext: *ctx} } func (d *RawExecDriver) Fingerprint(cfg *config.Config, node *structs.Node) (bool, error) { diff --git a/client/driver/rkt.go b/client/driver/rkt.go index 456e4e02b..3f1912531 100644 --- a/client/driver/rkt.go +++ b/client/driver/rkt.go @@ -17,6 +17,7 @@ import ( "github.com/hashicorp/nomad/client/allocdir" "github.com/hashicorp/nomad/client/config" "github.com/hashicorp/nomad/client/driver/args" + "github.com/hashicorp/nomad/client/fingerprint" "github.com/hashicorp/nomad/nomad/structs" ) @@ -30,6 +31,7 @@ var ( // planned in the future type RktDriver struct { DriverContext + fingerprint.StaticFingerprinter } // rktHandle is returned from Start/Open as a handle to the PID @@ -50,7 +52,7 @@ type rktPID struct { // NewRktDriver is used to create a new exec driver func NewRktDriver(ctx *DriverContext) Driver { - return &RktDriver{*ctx} + return &RktDriver{DriverContext: *ctx} } func (d *RktDriver) Fingerprint(cfg *config.Config, node *structs.Node) (bool, error) { diff --git a/client/fingerprint/arch.go b/client/fingerprint/arch.go index 869c542eb..16d8c99a8 100644 --- a/client/fingerprint/arch.go +++ b/client/fingerprint/arch.go @@ -10,6 +10,7 @@ import ( // ArchFingerprint is used to fingerprint the architecture type ArchFingerprint struct { + StaticFingerprinter logger *log.Logger } diff --git a/client/fingerprint/consul.go b/client/fingerprint/consul.go index a03dfeec1..a8c054e21 100644 --- a/client/fingerprint/consul.go +++ b/client/fingerprint/consul.go @@ -63,3 +63,7 @@ func (f *ConsulFingerprint) Fingerprint(config *client.Config, node *structs.Nod return true, nil } + +func (f *ConsulFingerprint) Periodic() (bool, time.Duration) { + return false, 15 * time.Second +} diff --git a/client/fingerprint/cpu.go b/client/fingerprint/cpu.go index 3e809397e..5027c8e9a 100644 --- a/client/fingerprint/cpu.go +++ b/client/fingerprint/cpu.go @@ -11,6 +11,7 @@ import ( // CPUFingerprint is used to fingerprint the CPU type CPUFingerprint struct { + StaticFingerprinter logger *log.Logger } diff --git a/client/fingerprint/env_aws.go b/client/fingerprint/env_aws.go index 575409bf8..f5e26e7cb 100644 --- a/client/fingerprint/env_aws.go +++ b/client/fingerprint/env_aws.go @@ -69,6 +69,7 @@ var ec2InstanceSpeedMap = map[string]int{ // EnvAWSFingerprint is used to fingerprint AWS metadata type EnvAWSFingerprint struct { + StaticFingerprinter logger *log.Logger } diff --git a/client/fingerprint/env_gce.go b/client/fingerprint/env_gce.go index f721fc36a..faef7deab 100644 --- a/client/fingerprint/env_gce.go +++ b/client/fingerprint/env_gce.go @@ -46,6 +46,7 @@ func lastToken(s string) string { // EnvGCEFingerprint is used to fingerprint GCE metadata type EnvGCEFingerprint struct { + StaticFingerprinter client *http.Client logger *log.Logger metadataURL string diff --git a/client/fingerprint/fingerprint.go b/client/fingerprint/fingerprint.go index 4a42057b2..3154aad2b 100644 --- a/client/fingerprint/fingerprint.go +++ b/client/fingerprint/fingerprint.go @@ -3,11 +3,15 @@ package fingerprint import ( "fmt" "log" + "time" "github.com/hashicorp/nomad/client/config" "github.com/hashicorp/nomad/nomad/structs" ) +// EmptyDuration is to be used by fingerprinters that are not periodic. +const EmptyDuration = time.Duration(0) + // BuiltinFingerprints is a slice containing the key names of all regestered // fingerprints available, to provided an ordered iteration var BuiltinFingerprints = []string{ @@ -59,4 +63,17 @@ type Fingerprint interface { // Fingerprint is used to update properties of the Node, // and returns if the fingerprint was applicable and a potential error. Fingerprint(*config.Config, *structs.Node) (bool, 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) +} + +// StaticFingerprinter can be embeded in a struct that has a Fingerprint method +// to make it non-periodic. +type StaticFingerprinter struct{} + +func (s *StaticFingerprinter) Periodic() (bool, time.Duration) { + return false, EmptyDuration } diff --git a/client/fingerprint/host.go b/client/fingerprint/host.go index ac7a347f2..87acac63c 100644 --- a/client/fingerprint/host.go +++ b/client/fingerprint/host.go @@ -14,6 +14,7 @@ import ( // HostFingerprint is used to fingerprint the host type HostFingerprint struct { + StaticFingerprinter logger *log.Logger } diff --git a/client/fingerprint/memory.go b/client/fingerprint/memory.go index 5af097848..b249bebf5 100644 --- a/client/fingerprint/memory.go +++ b/client/fingerprint/memory.go @@ -11,6 +11,7 @@ import ( // MemoryFingerprint is used to fingerprint the available memory on the node type MemoryFingerprint struct { + StaticFingerprinter logger *log.Logger } diff --git a/client/fingerprint/network_unix.go b/client/fingerprint/network_unix.go index 4278384e9..9adb5f41b 100644 --- a/client/fingerprint/network_unix.go +++ b/client/fingerprint/network_unix.go @@ -19,6 +19,7 @@ import ( // NetworkFingerprint is used to fingerprint the Network capabilities of a node type NetworkFingerprint struct { + StaticFingerprinter logger *log.Logger interfaceDetector NetworkInterfaceDetector } diff --git a/client/fingerprint/network_windows.go b/client/fingerprint/network_windows.go index 99467bcc8..b438b7292 100644 --- a/client/fingerprint/network_windows.go +++ b/client/fingerprint/network_windows.go @@ -11,6 +11,7 @@ import ( // NetworkFingerprint is used to fingerprint the Network capabilities of a node type NetworkFingerprint struct { + StaticFingerprinter logger *log.Logger } diff --git a/client/fingerprint/storage.go b/client/fingerprint/storage.go index 6abbe52e4..ead264845 100644 --- a/client/fingerprint/storage.go +++ b/client/fingerprint/storage.go @@ -18,6 +18,7 @@ import ( // StorageFingerprint is used to measure the amount of storage free for // applications that the Nomad agent will run on this machine. type StorageFingerprint struct { + StaticFingerprinter logger *log.Logger }