diff --git a/nomad/structs/structs.go b/nomad/structs/structs.go index cfdc3958a..6610183e1 100644 --- a/nomad/structs/structs.go +++ b/nomad/structs/structs.go @@ -37,6 +37,13 @@ type RPCInfo interface { // QueryOptions is used to specify various flags for read queries type QueryOptions struct { + // If set, wait until query exceeds given index. Must be provided + // with MaxQueryTime. + MinQueryIndex uint64 + + // Provided with MinQueryIndex to wait for change. + MaxQueryTime time.Duration + // The target region for this query Region string @@ -91,6 +98,78 @@ type QueryMeta struct { KnownLeader bool } +const ( + // CoreCapability is used to convey the client core + // version. This is a special reserved capability. + CoreCapability = "core" +) + +const ( + StatusInit = "initializing" + StatusReady = "ready" + StatusMaint = "maintenance" + StatusDown = "down" +) + +// RegisterRequest is used for Client.Register endpoint +// to register a node as being a schedulable entity. +type RegisterRequest struct { + // Datacenter for this node + Datacenter string + + // Status of this node + Status string + + // Scheduling capabilities are used by drivers. + // e.g. core = 2, docker = 1, java = 2, etc + Capabilities map[string]int + + // Attributes is an arbitrary set of key/value + // data that can be used for constraints. Examples + // include "os=linux", "arch=386", "docker.runtime=1.8.3" + Attributes map[string]interface{} + + // Resources is the available resources on the client. + // For example 'cpu=2' 'memory=2048' + Resouces *Resources + + // Links are used to 'link' this client to external + // systems. For example 'consul=foo.dc1' 'aws=i-83212' + // 'ami=ami-123' + Links map[string]interface{} + + // Meta is used to associate arbitrary metadata with this + // client. This is opaque to Nomad. + Meta map[string]string + + WriteRequest +} + +// Resources is used to define the resources available +// on a client +type Resources struct { + CPU float64 + CPUReserved float64 + MemoryMB int + MemoryMBReserved int + DiskMB int + DiskMBReservered int + IOPS int + IOPSReserved int + Networks []*NetworkResource + Other map[string]interface{} +} + +// NetworkResource is used to represesent available network +// resources> +type NetworkResource struct { + Public bool // Is this a public address? + CIDR string // CIDR block of addresses + ReservedPorts []int // Reserved ports + MBits int // Throughput + MBitsReserved int +} + // msgpackHandle is a shared handle for encoding/decoding of structs var msgpackHandle = &codec.MsgpackHandle{}