github.com/ferranbt/nomad@v0.9.3-0.20190607002617-85c449b7667c/plugins/device/proto/device.proto (about) 1 syntax = "proto3"; 2 package hashicorp.nomad.plugins.device; 3 option go_package = "proto"; 4 5 import "google/protobuf/timestamp.proto"; 6 import "google/protobuf/duration.proto"; 7 import "github.com/hashicorp/nomad/plugins/shared/structs/proto/attribute.proto"; 8 import "github.com/hashicorp/nomad/plugins/shared/structs/proto/stats.proto"; 9 10 // DevicePlugin is the API exposed by device plugins 11 service DevicePlugin { 12 // Fingerprint allows the device plugin to return a set of 13 // detected devices and provide a mechanism to update the state of 14 // the device. 15 rpc Fingerprint(FingerprintRequest) returns (stream FingerprintResponse) {} 16 17 // Reserve is called by the client before starting an allocation 18 // that requires access to the plugin’s devices. The plugin can use 19 // this to run any setup steps and provides the mounting details to 20 // the Nomad client 21 rpc Reserve(ReserveRequest) returns (ReserveResponse) {} 22 23 // Stats returns a stream of device statistics. 24 rpc Stats(StatsRequest) returns (stream StatsResponse) {} 25 } 26 27 // FingerprintRequest is used to request for devices to be fingerprinted. 28 message FingerprintRequest {} 29 30 // FingerprintResponse returns a set of detected devices. 31 message FingerprintResponse { 32 // device_group is a group of devices that share a vendor, device_type, and 33 // device_name. This is returned as a set so that a single plugin could 34 // potentially detect several device types and models. 35 repeated DeviceGroup device_group = 1; 36 } 37 38 // DeviceGroup is a group of devices that share a vendor, device type and name. 39 message DeviceGroup { 40 // vendor is the name of the vendor of the device 41 string vendor = 1; 42 43 // device_type is the type of the device (gpu, fpga, etc). 44 string device_type = 2; 45 46 // device_name is the name of the device. 47 string device_name = 3; 48 49 // devices is the set of devices detected by the plugin. 50 repeated DetectedDevice devices = 4; 51 52 // attributes allows adding attributes to be used for constraints or 53 // affinities. 54 map<string, hashicorp.nomad.plugins.shared.structs.Attribute> attributes = 5; 55 } 56 57 // DetectedDevice is a single detected device. 58 message DetectedDevice { 59 // ID is the ID of the device. This ID is used during allocation and must be 60 // stable across restarts of the device driver. 61 string ID = 1; 62 63 // Health of the device. 64 bool healthy = 2; 65 66 // health_description allows the device plugin to optionally 67 // annotate the health field with a human readable reason. 68 string health_description = 3; 69 70 // hw_locality is optionally set to expose hardware locality information for 71 // more optimal placement decisions. 72 DeviceLocality hw_locality = 4; 73 } 74 75 // DeviceLocality is used to expose HW locality information about a device. 76 message DeviceLocality { 77 // pci_bus_id is the PCI bus ID for the device. If reported, it 78 // allows Nomad to make NUMA aware optimizations. 79 string pci_bus_id = 1; 80 } 81 82 83 // ReserveRequest is used to ask the device driver for information on 84 // how to allocate the requested devices. 85 message ReserveRequest { 86 // device_ids are the requested devices. 87 repeated string device_ids = 1; 88 } 89 90 // ReserveResponse informs Nomad how to expose the requested devices 91 // to the the task. 92 message ReserveResponse { 93 // container_res contains information on how to mount the device 94 // into a task isolated using container technologies (where the 95 // host is shared) 96 ContainerReservation container_res = 1; 97 } 98 99 // ContainerReservation returns how to mount the device into a 100 // container that shares the host OS. 101 message ContainerReservation { 102 // List of environment variable to be set 103 map<string, string> envs = 1; 104 105 // Mounts for the task. 106 repeated Mount mounts = 2; 107 108 // Devices for the task. 109 repeated DeviceSpec devices = 3; 110 } 111 112 // Mount specifies a host volume to mount into a task. 113 // where device library or tools are installed on host and task 114 message Mount { 115 // Path of the mount within the task. 116 string task_path = 1; 117 118 // Path of the mount on the host. 119 string host_path = 2; 120 121 // If set, the mount is read-only. 122 bool read_only = 3; 123 } 124 125 // DeviceSpec specifies a host device to mount into a task. 126 message DeviceSpec { 127 // Path of the device within the task. 128 string task_path = 1; 129 130 // Path of the device on the host. 131 string host_path = 2; 132 133 // Cgroups permissions of the device, candidates are one or more of 134 // * r - allows task to read from the specified device. 135 // * w - allows task to write to the specified device. 136 // * m - allows task to create device files that do not yet exist 137 string permissions = 3; 138 } 139 140 141 // StatsRequest is used to parameterize the retrieval of statistics. 142 message StatsRequest { 143 // collection_interval is the duration in which to collect statistics. 144 google.protobuf.Duration collection_interval = 1; 145 } 146 147 // StatsResponse returns the statistics for each device group. 148 message StatsResponse { 149 // groups contains statistics for each device group. 150 repeated DeviceGroupStats groups = 1; 151 } 152 153 // DeviceGroupStats contains statistics for each device of a particular 154 // device group, identified by the vendor, type and name of the device. 155 message DeviceGroupStats { 156 string vendor = 1; 157 string type = 2; 158 string name = 3; 159 160 // instance_stats is a mapping of each device ID to its statistics. 161 map<string, DeviceStats> instance_stats = 4; 162 } 163 164 // DeviceStats is the statistics for an individual device 165 message DeviceStats { 166 // summary exposes a single summary metric that should be the most 167 // informative to users. 168 hashicorp.nomad.plugins.shared.structs.StatValue summary = 1; 169 170 // stats contains the verbose statistics for the device. 171 hashicorp.nomad.plugins.shared.structs.StatObject stats = 2; 172 173 // timestamp is the time the statistics were collected. 174 google.protobuf.Timestamp timestamp = 3; 175 }