diff --git a/website/source/api/jobs.html.md b/website/source/api/jobs.html.md new file mode 100644 index 000000000..a2d0ec5ac --- /dev/null +++ b/website/source/api/jobs.html.md @@ -0,0 +1,1249 @@ +--- +layout: api +page_title: Jobs - HTTP API +sidebar_current: api-jobs +description: |- + The /jobs endpoints are used to query for and interact with jobs. +--- + +# Jobs HTTP API + +The `/jobs` endpoints are used to query for and interact with jobs. + +## List Jobs + +This endpoint lists all known jobs in the system registered with Nomad. + +| Method | Path | Produces | +| ------ | ------------------------- | -------------------------- | +| `GET` | `/v1/jobs` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/index.html#blocking-queries), +[consistency modes](/api/index.html#consistency-modes), and +[required ACLs](/api/index.html#acls). + +| Blocking Queries | Consistency Modes | ACL Required | +| ---------------- | ----------------- | ------------ | +| `YES` | `all` | `none` | + +### Parameters + +- `prefix` `(string: "")`- Specifies a string to filter jobs on based on + an index prefix. This is specified as a querystring parameter. + +### Sample Request + +```text +$ curl \ + https://nomad.rocks/v1/jobs +``` + +```text +$ curl \ + https://nomad.rocks/v1/jobs?prefix=team +``` + +### Sample Response + +```json +[ + { + "ID": "example", + "ParentID": "", + "Name": "example", + "Type": "service", + "Priority": 50, + "Status": "pending", + "StatusDescription": "", + "JobSummary": { + "JobID": "example", + "Summary": { + "cache": { + "Queued": 1, + "Complete": 1, + "Failed": 0, + "Running": 0, + "Starting": 0, + "Lost": 0 + } + }, + "Children": { + "Pending": 0, + "Running": 0, + "Dead": 0 + }, + "CreateIndex": 52, + "ModifyIndex": 96 + }, + "CreateIndex": 52, + "ModifyIndex": 93, + "JobModifyIndex": 52 + } +] +``` + +## Create Job + +This endpoint creates (aka "registers") a new job in the system. + +| Method | Path | Produces | +| ------- | ------------------------- | -------------------------- | +| `POST` | `/v1/jobs` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/index.html#blocking-queries), +[consistency modes](/api/index.html#consistency-modes), and +[required ACLs](/api/index.html#acls). + +| Blocking Queries | Consistency Modes | ACL Required | +| ---------------- | ----------------- | ------------ | +| `NO` | `all` | `none` | + +### Parameters + +There are no parameters, but the request _body_ contains the entire job file. + +### Sample Payload + +```text +(any valid nomad job IN JSON FORMAT) +``` + +### Sample Request + +```text +$ curl \ + --request POST \ + --data @my-job.nomad \ + https://nomad.rocks/v1/jobs +``` + +### Sample Response + +```json +{ + "EvalID": "", + "EvalCreateIndex": 0, + "JobModifyIndex": 109, + "Index": 0, + "LastContact": 0, + "KnownLeader": false +} +``` + +## Read Job + +This endpoint reads information about a single job for its specification and +status. + +| Method | Path | Produces | +| ------ | ------------------------- | -------------------------- | +| `GET` | `/v1/job/:job_id` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/index.html#blocking-queries), +[consistency modes](/api/index.html#consistency-modes), and +[required ACLs](/api/index.html#acls). + +| Blocking Queries | Consistency Modes | ACL Required | +| ---------------- | ----------------- | ------------ | +| `YES` | `all` | `none` | + +### Parameters + +- `:job_id` `(string: )`- Specifies the ID of the job (as specified in + the job file during submission). This is specified as part of the path. + +### Sample Request + +```text +$ curl \ + https://nomad.rocks/v1/job/my-job +``` + +### Sample Response + +```json +{ + "Region": "global", + "ID": "example", + "ParentID": "", + "Name": "example", + "Type": "batch", + "Priority": 50, + "AllAtOnce": false, + "Datacenters": [ + "dc1" + ], + "Constraints": [ + { + "LTarget": "${attr.kernel.name}", + "RTarget": "linux", + "Operand": "=" + } + ], + "TaskGroups": [ + { + "Name": "cache", + "Count": 1, + "Constraints": [ + { + "LTarget": "${attr.os.signals}", + "RTarget": "SIGUSR1", + "Operand": "set_contains" + } + ], + "RestartPolicy": { + "Attempts": 10, + "Interval": 300000000000, + "Delay": 25000000000, + "Mode": "delay" + }, + "Tasks": [ + { + "Name": "redis", + "Driver": "docker", + "User": "foo-user", + "Config": { + "image": "redis:latest", + "port_map": [ + { + "db": 6379 + } + ] + }, + "Env": { + "foo": "bar", + "baz": "pipe" + }, + "Services": [ + { + "Name": "cache-redis", + "PortLabel": "db", + "Tags": [ + "global", + "cache" + ], + "Checks": [ + { + "Name": "alive", + "Type": "tcp", + "Command": "", + "Args": null, + "Path": "", + "Protocol": "", + "PortLabel": "", + "Interval": 10000000000, + "Timeout": 2000000000, + "InitialStatus": "" + } + ] + } + ], + "Vault": null, + "Templates": [ + { + "SourcePath": "local/config.conf.tpl", + "DestPath": "local/config.conf", + "EmbeddedTmpl": "", + "ChangeMode": "signal", + "ChangeSignal": "SIGUSR1", + "Splay": 5000000000, + "Perms": "" + } + ], + "Constraints": null, + "Resources": { + "CPU": 500, + "MemoryMB": 256, + "DiskMB": 0, + "IOPS": 0, + "Networks": [ + { + "Device": "", + "CIDR": "", + "IP": "", + "MBits": 10, + "ReservedPorts": [ + { + "Label": "rpc", + "Value": 25566 + } + ], + "DynamicPorts": [ + { + "Label": "db", + "Value": 0 + } + ] + } + ] + }, + "DispatchPayload": { + "File": "config.json" + }, + "Meta": { + "foo": "bar", + "baz": "pipe" + }, + "KillTimeout": 5000000000, + "LogConfig": { + "MaxFiles": 10, + "MaxFileSizeMB": 10 + }, + "Artifacts": [ + { + "GetterSource": "http://foo.com/artifact.tar.gz", + "GetterOptions": { + "checksum": "md5:c4aa853ad2215426eb7d70a21922e794" + }, + "RelativeDest": "local/" + } + ], + "Leader": false + } + ], + "EphemeralDisk": { + "Sticky": false, + "SizeMB": 300, + "Migrate": false + }, + "Meta": { + "foo": "bar", + "baz": "pipe" + } + } + ], + "Update": { + "Stagger": 10000000000, + "MaxParallel": 1 + }, + "Periodic": { + "Enabled": true, + "Spec": "* * * * *", + "SpecType": "cron", + "ProhibitOverlap": true + }, + "ParameterizedJob": { + "Payload": "required", + "MetaRequired": [ + "foo" + ], + "MetaOptional": [ + "bar" + ] + }, + "Payload": null, + "Meta": { + "foo": "bar", + "baz": "pipe" + }, + "VaultToken": "", + "Status": "running", + "StatusDescription": "", + "CreateIndex": 7, + "ModifyIndex": 7, + "JobModifyIndex": 7 +} +``` + +## List Job Versions + +This endpoint reads information about all versions of a job. + +| Method | Path | Produces | +| ------ | -------------------------- | -------------------------- | +| `GET` | `/v1/job/:job_id/versions` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/index.html#blocking-queries), +[consistency modes](/api/index.html#consistency-modes), and +[required ACLs](/api/index.html#acls). + +| Blocking Queries | Consistency Modes | ACL Required | +| ---------------- | ----------------- | ------------ | +| `YES` | `all` | `none` | + +### Parameters + +- `:job_id` `(string: )`- Specifies the ID of the job (as specified in + the job file during submission). This is specified as part of the path. + +### Sample Request + +```text +$ curl \ + https://nomad.rocks/v1/job/my-job/versions +``` + +### Sample Response + +```json +[ + { + "Stop": false, + "Region": "global", + "ID": "example", + "ParentID": "", + "Name": "example", + "Type": "service", + "Priority": 50, + "AllAtOnce": false, + "Datacenters": [ + "dc1" + ], + "Constraints": null, + "TaskGroups": [ + { + "Name": "cache", + "Count": 1, + "Update": { + "Stagger": 0, + "MaxParallel": 1, + "HealthCheck": "checks", + "MinHealthyTime": 10000000000, + "HealthyDeadline": 300000000000, + "AutoRevert": false, + "Canary": 0 + }, + "Constraints": null, + "RestartPolicy": { + "Attempts": 10, + "Interval": 300000000000, + "Delay": 25000000000, + "Mode": "delay" + }, + "Tasks": [ + { + "Name": "redis", + "Driver": "docker", + "User": "", + "Config": { + "image": "redis:3.2", + "port_map": [ + { + "db": 6379 + } + ] + }, + "Env": null, + "Services": [ + { + "Name": "global-redis-check", + "PortLabel": "db", + "Tags": [ + "global", + "cache" + ], + "Checks": [ + { + "Name": "alive", + "Type": "tcp", + "Command": "", + "Args": null, + "Path": "", + "Protocol": "", + "PortLabel": "", + "Interval": 10000000000, + "Timeout": 2000000000, + "InitialStatus": "", + "TLSSkipVerify": false + } + ] + } + ], + "Vault": null, + "Templates": null, + "Constraints": null, + "Resources": { + "CPU": 500, + "MemoryMB": 256, + "DiskMB": 0, + "IOPS": 0, + "Networks": [ + { + "Device": "", + "CIDR": "", + "IP": "", + "MBits": 10, + "ReservedPorts": null, + "DynamicPorts": [ + { + "Label": "db", + "Value": 0 + } + ] + } + ] + }, + "DispatchPayload": null, + "Meta": null, + "KillTimeout": 5000000000, + "LogConfig": { + "MaxFiles": 10, + "MaxFileSizeMB": 10 + }, + "Artifacts": null, + "Leader": false + } + ], + "EphemeralDisk": { + "Sticky": false, + "SizeMB": 300, + "Migrate": false + }, + "Meta": null + } + ], + "Update": { + "Stagger": 10000000000, + "MaxParallel": 1, + "HealthCheck": "", + "MinHealthyTime": 0, + "HealthyDeadline": 0, + "AutoRevert": false, + "Canary": 0 + }, + "Periodic": null, + "ParameterizedJob": null, + "Payload": null, + "Meta": null, + "VaultToken": "", + "Status": "pending", + "StatusDescription": "", + "Stable": false, + "Version": 0, + "CreateIndex": 7, + "ModifyIndex": 7, + "JobModifyIndex": 7 + } +] +``` + +## List Job Allocations + +This endpoint reads information about a single job's allocations. + +| Method | Path | Produces | +| ------ | ----------------------------- | -------------------------- | +| `GET` | `/v1/job/:job_id/allocations` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/index.html#blocking-queries), +[consistency modes](/api/index.html#consistency-modes), and +[required ACLs](/api/index.html#acls). + +| Blocking Queries | Consistency Modes | ACL Required | +| ---------------- | ----------------- | ------------ | +| `YES` | `all` | `none` | + +### Parameters + +- `:job_id` `(string: )`- Specifies the ID of the job (as specified in + the job file during submission). This is specified as part of the path. + +### Sample Request + +```text +$ curl \ + https://nomad.rocks/v1/job/my-job/allocations +``` + +### Sample Response + +```json +[ + { + "ID": "ed344e0a-7290-d117-41d3-a64f853ca3c2", + "EvalID": "a9c5effc-2242-51b2-f1fe-054ee11ab189", + "Name": "example.cache[0]", + "NodeID": "cb1f6030-a220-4f92-57dc-7baaabdc3823", + "JobID": "example", + "TaskGroup": "cache", + "DesiredStatus": "run", + "DesiredDescription": "", + "ClientStatus": "running", + "ClientDescription": "", + "TaskStates": { + "redis": { + "State": "running", + "Failed": false, + "StartedAt": "2017-05-25T23:41:23.240184101Z", + "FinishedAt": "0001-01-01T00:00:00Z", + "Events": [ + { + "Type": "Received", + "Time": 1495755675956923000, + "FailsTask": false, + "RestartReason": "", + "SetupError": "", + "DriverError": "", + "ExitCode": 0, + "Signal": 0, + "Message": "", + "KillTimeout": 0, + "KillError": "", + "KillReason": "", + "StartDelay": 0, + "DownloadError": "", + "ValidationError": "", + "DiskLimit": 0, + "FailedSibling": "", + "VaultError": "", + "TaskSignalReason": "", + "TaskSignal": "", + "DriverMessage": "" + }, + { + "Type": "Task Setup", + "Time": 1495755675957466400, + "FailsTask": false, + "RestartReason": "", + "SetupError": "", + "DriverError": "", + "ExitCode": 0, + "Signal": 0, + "Message": "Building Task Directory", + "KillTimeout": 0, + "KillError": "", + "KillReason": "", + "StartDelay": 0, + "DownloadError": "", + "ValidationError": "", + "DiskLimit": 0, + "FailedSibling": "", + "VaultError": "", + "TaskSignalReason": "", + "TaskSignal": "", + "DriverMessage": "" + }, + { + "Type": "Driver", + "Time": 1495755675970286800, + "FailsTask": false, + "RestartReason": "", + "SetupError": "", + "DriverError": "", + "ExitCode": 0, + "Signal": 0, + "Message": "", + "KillTimeout": 0, + "KillError": "", + "KillReason": "", + "StartDelay": 0, + "DownloadError": "", + "ValidationError": "", + "DiskLimit": 0, + "FailedSibling": "", + "VaultError": "", + "TaskSignalReason": "", + "TaskSignal": "", + "DriverMessage": "Downloading image redis:3.2" + }, + { + "Type": "Started", + "Time": 1495755683227522000, + "FailsTask": false, + "RestartReason": "", + "SetupError": "", + "DriverError": "", + "ExitCode": 0, + "Signal": 0, + "Message": "", + "KillTimeout": 0, + "KillError": "", + "KillReason": "", + "StartDelay": 0, + "DownloadError": "", + "ValidationError": "", + "DiskLimit": 0, + "FailedSibling": "", + "VaultError": "", + "TaskSignalReason": "", + "TaskSignal": "", + "DriverMessage": "" + } + ] + } + }, + "CreateIndex": 9, + "ModifyIndex": 13, + "CreateTime": 1495755675944527600 + } +] +``` + +## List Job Evaluations + +This endpoint reads information about a single job's evaluations + +| Method | Path | Produces | +| ------ | ----------------------------- | -------------------------- | +| `GET` | `/v1/job/:job_id/evaluations` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/index.html#blocking-queries), +[consistency modes](/api/index.html#consistency-modes), and +[required ACLs](/api/index.html#acls). + +| Blocking Queries | Consistency Modes | ACL Required | +| ---------------- | ----------------- | ------------ | +| `YES` | `all` | `none` | + +### Parameters + +- `:job_id` `(string: )`- Specifies the ID of the job (as specified in + the job file during submission). This is specified as part of the path. + +### Sample Request + +```text +$ curl \ + https://nomad.rocks/v1/job/my-job/evaluations +``` + +### Sample Response + +```json +[ + { + "ID": "a9c5effc-2242-51b2-f1fe-054ee11ab189", + "Priority": 50, + "Type": "service", + "TriggeredBy": "job-register", + "JobID": "example", + "JobModifyIndex": 7, + "NodeID": "", + "NodeModifyIndex": 0, + "Status": "complete", + "StatusDescription": "", + "Wait": 0, + "NextEval": "", + "PreviousEval": "", + "BlockedEval": "", + "FailedTGAllocs": null, + "ClassEligibility": null, + "EscapedComputedClass": false, + "AnnotatePlan": false, + "QueuedAllocations": { + "cache": 0 + }, + "SnapshotIndex": 8, + "CreateIndex": 8, + "ModifyIndex": 10 + } +] +``` + +## Read Job Summary + +This endpoint reads summary information about a job. + +| Method | Path | Produces | +| ------ | -------------------------- | -------------------------- | +| `GET` | `/v1/job/:job_id/summary` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/index.html#blocking-queries), +[consistency modes](/api/index.html#consistency-modes), and +[required ACLs](/api/index.html#acls). + +| Blocking Queries | Consistency Modes | ACL Required | +| ---------------- | ----------------- | ------------ | +| `YES` | `all` | `none` | + +### Parameters + +- `:job_id` `(string: )`- Specifies the ID of the job (as specified in + the job file during submission). This is specified as part of the path. + +### Sample Request + +```text +$ curl \ + https://nomad.rocks/v1/job/my-job/summary +``` + +### Sample Response + +```json +{ + "JobID": "example", + "Summary": { + "cache": { + "Queued": 0, + "Complete": 0, + "Failed": 0, + "Running": 1, + "Starting": 0, + "Lost": 0 + } + }, + "Children": { + "Pending": 0, + "Running": 0, + "Dead": 0 + }, + "CreateIndex": 7, + "ModifyIndex": 13 +} +``` + +## Update Existing Job + +This endpoint registers a new job or updates an existing job. + +| Method | Path | Produces | +| ------- | -------------------------- | -------------------------- | +| `POST` | `/v1/job/:job_id` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/index.html#blocking-queries), +[consistency modes](/api/index.html#consistency-modes), and +[required ACLs](/api/index.html#acls). + +| Blocking Queries | Consistency Modes | ACL Required | +| ---------------- | ----------------- | ------------ | +| `NO` | `all` | `none` | + +### Parameters + +- `:job_id` `(string: )`- Specifies the ID of the job (as specified in + the job file during submission). This is specified as part of the path. + +- `Job` `(Job: )` - Specifies the JSON definition of the job. + +- `EnforceIndex` `(int: 0)` - If set, the job will only be registered if the + passed `JobModifyIndex` matches the current job's index. If the index is zero, + the register only occurs if the job is new. This paradigm allows check-and-set + style job updating. + +- `JobModifyIndex` `(int: 0)` - Specifies the `JobModifyIndex` to enforce the + current job is at. + +### Sample Payload + +```javascript +{ + "Job": { + // ... + }, + "EnforceIndex": 1, + "JobModifyIndex": 4 +} +``` + +### Sample Request + +```text +$ curl \ + --request POST \ + --data @payload.json \ + https://nomad.rocks/v1/job/my-job +``` + +### Sample Response + +```json +{ + "EvalID": "d092fdc0-e1fd-2536-67d8-43af8ca798ac", + "EvalCreateIndex": 35, + "JobModifyIndex": 34, +} +``` + +## Dispatch Job + +This endpoint dispatches a new instance of a parameterized job. + +| Method | Path | Produces | +| ------- | -------------------------- | -------------------------- | +| `POST` | `/v1/job/:job_id/dispatch` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/index.html#blocking-queries), +[consistency modes](/api/index.html#consistency-modes), and +[required ACLs](/api/index.html#acls). + +| Blocking Queries | Consistency Modes | ACL Required | +| ---------------- | ----------------- | ------------ | +| `NO` | `all` | `none` | + +### Parameters + +- `:job_id` `(string: )`- Specifies the ID of the job (as specified in + the job file during submission). This is specified as part of the path. + +- `Payload` `(string: "")` - Specifies a base64 encoded string containing the + payload. This is limited to 15 KB. + +- `Meta` `(meta: nil)` - Specifies arbitrary metadata to pass to + the job. + +### Sample Payload + +```json +{ + "Payload": "A28C3==", + "Meta": { + "key": "Value" + } +} +``` + +### Sample Request + +```text +$ curl \ + https://nomad.rocks/v1/job/my-job/summary +``` + +### Sample Response + +```json +{ + "Index": 13, + "JobCreateIndex": 12, + "EvalCreateIndex": 13, + "EvalID": "e5f55fac-bc69-119d-528a-1fc7ade5e02c", + "DispatchedJobID": "example/dispatch-1485408778-81644024" +} +``` + + +## Create Job Evaluation + +This endpoint creates a new evaluation for the given job. This can be used to +force run the scheduling logic if necessary. + +| Method | Path | Produces | +| ------- | -------------------------- | -------------------------- | +| `POST` | `/v1/job/:job_id/evaluate` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/index.html#blocking-queries), +[consistency modes](/api/index.html#consistency-modes), and +[required ACLs](/api/index.html#acls). + +| Blocking Queries | Consistency Modes | ACL Required | +| ---------------- | ----------------- | ------------ | +| `NO` | `all` | `none` | + +### Parameters + +- `:job_id` `(string: )`- Specifies the ID of the job (as specified in + the job file during submission). This is specified as part of the path. + +### Sample Request + +```text +$ curl \ + --request POST \ + https://nomad.rocks/v1/job/my-job/evaluate +``` + +### Sample Response + +```json +{ + "EvalID": "d092fdc0-e1fd-2536-67d8-43af8ca798ac", + "EvalCreateIndex": 35, + "JobModifyIndex": 34, +} +``` + +## Create Job Plan + +This endpoint invokes a dry-run of the scheduler for the job. + +| Method | Path | Produces | +| ------- | -------------------------- | -------------------------- | +| `POST` | `/v1/job/:job_id/plan` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/index.html#blocking-queries), +[consistency modes](/api/index.html#consistency-modes), and +[required ACLs](/api/index.html#acls). + +| Blocking Queries | Consistency Modes | ACL Required | +| ---------------- | ----------------- | ------------ | +| `NO` | `all` | `none` | + +### Parameters + +- `:job_id` `(string: )`- Specifies the ID of the job (as specified in +- the job file during submission). This is specified as part of the path. + +- `Job` `(string: )` - Specifies the JSON definition of the job. + +- `Diff` `(bool: false)` - Specifies whether the diff structure between the + submitted and server side version of the job should be included in the + response. + +### Sample Payload + +```json +{ + "Job": "...", + "Diff": true +} +``` + +### Sample Request + +```text +$ curl \ + --request POST \ + --payload @payload.json \ + https://nomad.rocks/v1/job/my-job/plan +``` + +### Sample Response + +```json +{ + "Index": 0, + "NextPeriodicLaunch": "0001-01-01T00:00:00Z", + "Diff": { + "Type": "Added", + "TaskGroups": [ + { + "Updates": { + "create": 1 + }, + "Type": "Added", + "Tasks": [ + { + "Type": "Added", + "Objects": [ + "..." + ], + "Name": "redis", + "Fields": [ + { + "Type": "Added", + "Old": "", + "New": "docker", + "Name": "Driver", + "Annotations": null + }, + { + "Type": "Added", + "Old": "", + "New": "5000000000", + "Name": "KillTimeout", + "Annotations": null + } + ], + "Annotations": [ + "forces create" + ] + } + ], + "Objects": [ + "..." + ], + "Name": "cache", + "Fields": [ + "..." + ] + } + ], + "Objects": [ + { + "Type": "Added", + "Objects": null, + "Name": "Datacenters", + "Fields": [ + "..." + ] + }, + { + "Type": "Added", + "Objects": null, + "Name": "Constraint", + "Fields": [ + "..." + ] + }, + { + "Type": "Added", + "Objects": null, + "Name": "Update", + "Fields": [ + "..." + ] + } + ], + "ID": "example", + "Fields": [ + "..." + ] + }, + "CreatedEvals": [ + { + "ModifyIndex": 0, + "CreateIndex": 0, + "SnapshotIndex": 0, + "AnnotatePlan": false, + "EscapedComputedClass": false, + "NodeModifyIndex": 0, + "NodeID": "", + "JobModifyIndex": 0, + "JobID": "example", + "TriggeredBy": "job-register", + "Type": "batch", + "Priority": 50, + "ID": "312e6a6d-8d01-0daf-9105-14919a66dba3", + "Status": "blocked", + "StatusDescription": "created to place remaining allocations", + "Wait": 0, + "NextEval": "", + "PreviousEval": "80318ae4-7eda-e570-e59d-bc11df134817", + "BlockedEval": "", + "FailedTGAllocs": null, + "ClassEligibility": { + "v1:7968290453076422024": true + } + } + ], + "JobModifyIndex": 0, + "FailedTGAllocs": { + "cache": { + "CoalescedFailures": 3, + "AllocationTime": 46415, + "Scores": null, + "NodesEvaluated": 1, + "NodesFiltered": 0, + "NodesAvailable": { + "dc1": 1 + }, + "ClassFiltered": null, + "ConstraintFiltered": null, + "NodesExhausted": 1, + "ClassExhausted": null, + "DimensionExhausted": { + "cpu exhausted": 1 + } + } + }, + "Annotations": { + "DesiredTGUpdates": { + "cache": { + "DestructiveUpdate": 0, + "InPlaceUpdate": 0, + "Stop": 0, + "Migrate": 0, + "Place": 11, + "Ignore": 0 + } + } + } +} +``` + +#### Field Reference + +- `Diff` - A diff structure between the submitted job and the server side + version. The top-level object is a Job Diff which contains Task Group Diffs, + which in turn contain Task Diffs. Each of these objects then has Object and + Field Diff structures embedded. + +- `NextPeriodicLaunch`- If the job being planned is periodic, this field will + include the next launch time for the job. + +- `CreatedEvals` - A set of evaluations that were created as a result of the + dry-run. These evaluations can signify a follow-up rolling update evaluation + or a blocked evaluation. + +- `JobModifyIndex`- The `JobModifyIndex` of the server side version of this job. + +- `FailedTGAllocs` - A set of metrics to understand any allocation failures that + occurred for the Task Group. + +- `Annotations` - Annotations include the `DesiredTGUpdates`, which tracks what +- the scheduler would do given enough resources for each Task Group. + + +## Force New Periodic Instance + +This endpoint forces a new instance of the periodic job. A new instance will be +created even if it violates the job's +[`prohibit_overlap`](/docs/job-specification/periodic.html#prohibit_overlap) +settings. As such, this should be only used to immediately run a periodic job. + +| Method | Path | Produces | +| ------- | -------------------------------- | -------------------------- | +| `POST` | `/v1/job/:job_id/periodic/force` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/index.html#blocking-queries), +[consistency modes](/api/index.html#consistency-modes), and +[required ACLs](/api/index.html#acls). + +| Blocking Queries | Consistency Modes | ACL Required | +| ---------------- | ----------------- | ------------ | +| `NO` | `all` | `none` | + +### Parameters + +- `:job_id` `(string: )`- Specifies the ID of the job (as specified in + the job file during submission). This is specified as part of the path. + +### Sample Request + +```text +$ curl \ + --request POST \ + https://nomad.rocks/v1/job/my-job/periodic/force +``` + +### Sample Response + +```json +{ + "EvalCreateIndex": 7, + "EvalID": "57983ddd-7fcf-3e3a-fd24-f699ccfb36f4" +} +``` + +## Delete a Job + +This endpoint deregisters a job, and stops all allocations part of it. + +| Method | Path | Produces | +| -------- | -------------------------- | -------------------------- | +| `DELETE` | `/v1/job/:job_id` | `application/json` | + +The table below shows this endpoint's support for +[blocking queries](/api/index.html#blocking-queries), +[consistency modes](/api/index.html#consistency-modes), and +[required ACLs](/api/index.html#acls). + +| Blocking Queries | Consistency Modes | ACL Required | +| ---------------- | ----------------- | ------------ | +| `NO` | `all` | `none` | + +### Parameters + +- `:job_id` `(string: )`- Specifies the ID of the job (as specified in + the job file during submission). This is specified as part of the path. + +### Sample Request + +```text +$ curl \ + --request DELETE \ + https://nomad.rocks/v1/job/my-job +``` + +### Sample Response + +```json +{ + "EvalID": "d092fdc0-e1fd-2536-67d8-43af8ca798ac", + "EvalCreateIndex": 35, + "JobModifyIndex": 34, +} +``` diff --git a/website/source/docs/http/job.html.md b/website/source/docs/http/job.html.md deleted file mode 100644 index f201077b6..000000000 --- a/website/source/docs/http/job.html.md +++ /dev/null @@ -1,748 +0,0 @@ ---- -layout: "http" -page_title: "HTTP API: /v1/job" -sidebar_current: "docs-http-job-" -description: |- - The '/1/job' endpoint is used for CRUD on a single job. ---- - -# /v1/job - -The `job` endpoint is used for CRUD on a single job. By default, the agent's local -region is used; another region can be specified using the `?region=` query parameter. - -## GET - -
-
Description
-
- Query a single job for its specification and status. -
- -
Method
-
GET
- -
URL
-
`/v1/job/`
- -
Parameters
-
- None -
- -
Blocking Queries
-
- [Supported](/docs/http/index.html#blocking-queries) -
- -
Returns
-
- - ```javascript - { - "Region": "global", - "ID": "binstore-storagelocker", - "Name": "binstore-storagelocker", - "Type": "service", - "Priority": 50, - "AllAtOnce": false, - "Datacenters": [ - "us2", - "eu1" - ], - "Constraints": [ - { - "LTarget": "${attr.kernel.os}", - "RTarget": "windows", - "Operand": "=" - } - ], - "TaskGroups": [ - { - "Name": "binsl", - "Count": 5, - "Constraints": [ - { - "LTarget": "${attr.kernel.os}", - "RTarget": "linux", - "Operand": "=" - } - ], - "Tasks": [ - { - "Name": "binstore", - "Driver": "docker", - "Config": { - "image": "hashicorp/binstore" - }, - "Constraints": null, - "Resources": { - "CPU": 500, - "MemoryMB": 0, - "DiskMB": 0, - "IOPS": 0, - "Networks": [ - { - "Device": "", - "CIDR": "", - "IP": "", - "MBits": 100, - "ReservedPorts": null, - "DynamicPorts": null - } - ] - }, - "Meta": null - }, - { - "Name": "storagelocker", - "Driver": "java", - "Config": { - "image": "hashicorp/storagelocker" - }, - "Constraints": [ - { - "LTarget": "${attr.kernel.arch}", - "RTarget": "amd64", - "Operand": "=" - } - ], - "Resources": { - "CPU": 500, - "MemoryMB": 0, - "DiskMB": 0, - "IOPS": 0, - "Networks": null - }, - "Meta": null - } - ], - "Meta": { - "elb_checks": "3", - "elb_interval": "10", - "elb_mode": "tcp" - } - } - ], - "Update": { - "Stagger": 0, - "MaxParallel": 0 - }, - "Meta": { - "foo": "bar" - }, - "Status": "", - "StatusDescription": "", - "Version": 3, - "CreateIndex": 14, - "ModifyIndex": 14 - } - ``` -
-
- -
-
Description
-
- Query all versions of a single job. -
- -
Method
-
GET
- -
URL
-
`/v1/job//versions`
- -
Parameters
-
- None -
- -
Blocking Queries
-
- [Supported](/docs/http/index.html#blocking-queries) -
- -
Returns
-
- - ```javascript - [ - { - "Region": "global", - "ID": "binstore-storagelocker", - "Version": 2, - ... - }, - { - "Region": "global", - "ID": "binstore-storagelocker", - "Version": 1, - ... - }, - { - "Region": "global", - "ID": "binstore-storagelocker", - "Version": 0, - ... - } - ] - ``` -
-
- -
-
Description
-
- Query the allocations belonging to a single job. -
- -
Method
-
GET
- -
URL
-
`/v1/job//allocations`
- -
Parameters
-
-
    -
  • - all - optional - Returns all allocations of job with the given ID including those from - past instances of the job. -
  • -
-
- -
Blocking Queries
-
- [Supported](/docs/http/index.html#blocking-queries) -
- -
Returns
-
- - ```javascript - [ - { - "ID": "3575ba9d-7a12-0c96-7b28-add168c67984", - "EvalID": "151accaa-1ac6-90fe-d427-313e70ccbb88", - "Name": "binstore-storagelocker.binsl[0]", - "NodeID": "a703c3ca-5ff8-11e5-9213-970ee8879d1b", - "JobID": "binstore-storagelocker", - "TaskGroup": "binsl", - "DesiredStatus": "run", - "DesiredDescription": "", - "ClientStatus": "running", - "ClientDescription": "", - "CreateIndex": 16, - "ModifyIndex": 16 - }, - ... - ] - ``` - -
-
- -
-
Description
-
- Query the evaluations belonging to a single job. -
- -
Method
-
GET
- -
URL
-
`/v1/job//evaluations`
- -
Parameters
-
- None -
- -
Blocking Queries
-
- [Supported](/docs/http/index.html#blocking-queries) -
- -
Returns
-
- - ```javascript - [ - { - "ID": "151accaa-1ac6-90fe-d427-313e70ccbb88", - "Priority": 50, - "Type": "service", - "TriggeredBy": "job-register", - "JobID": "binstore-storagelocker", - "JobModifyIndex": 14, - "NodeID": "", - "NodeModifyIndex": 0, - "Status": "complete", - "StatusDescription": "", - "Wait": 0, - "NextEval": "", - "PreviousEval": "", - "CreateIndex": 15, - "ModifyIndex": 17 - }, - ... - ] - ``` - -
-
- -
-
Description
-
- Query the summary of a job. -
- -
Method
-
GET
- -
URL
-
`/v1/job//summary`
- -
Parameters
-
- None -
- -
Blocking Queries
-
- [Supported](/docs/http/index.html#blocking-queries) -
- -
Returns
-
- - ```javascript - { - "JobID": "example", - "Children": { - "Dead": 0, - "Running": 7, - "Pending": 2 - }, - "Summary": { - "cache": { - "Queued": 0, - "Complete": 0, - "Failed": 0, - "Running": 1, - "Starting": 0, - "Lost": 0 - } - }, - "CreateIndex": 6, - "ModifyIndex": 10 - } - ``` - -
-
- - -## PUT / POST - -
-
Description
-
- Registers a new job or updates an existing job -
- -
Method
-
PUT or POST
- -
URL
-
`/v1/job/`
- -
Parameters
-
-
    -
  • - Job - required - The JSON definition of the job. -
  • -
  • - EnforceIndex - optional - If EnforceIndex is set the job will only be registered if the passed - JobModifyIndex matches the current job's index. If the index is zero, - the register only occurs if the job is new. This paradigm allows - check-and-set style job updating. -
  • -
  • - JobModifyIndex - optional - The JobModifyIndex to enforce the current job is at. -
  • -
-
- -
Returns
-
- - ```javascript - { - "EvalID": "d092fdc0-e1fd-2536-67d8-43af8ca798ac", - "EvalCreateIndex": 35, - "JobModifyIndex": 34, - } - ``` - -
-
- -
-
Description
-
- Dispatch a new instance of a parameterized job. -
- -
Method
-
PUT or POST
- -
URL
-
`/v1/job//dispatch`
- -
Parameters
-
-
    -
  • - Payload - optional - A `[]byte` array encoded as a base64 string with a maximum size of 16KiB. -
  • -
  • - Meta - optional - A `map[string]string` of metadata keys to their values. -
  • -
-
- -
Returns
-
- - ```javascript - { - "Index": 13, - "JobCreateIndex": 12, - "EvalCreateIndex": 13, - "EvalID": "e5f55fac-bc69-119d-528a-1fc7ade5e02c", - "DispatchedJobID": "example/dispatch-1485408778-81644024" - } - ``` - -
-
- -
-
Description
-
- Creates a new evaluation for the given job. This can be used to force - run the scheduling logic if necessary. -
- -
Method
-
PUT or POST
- -
URL
-
`/v1/job//evaluate`
- -
Parameters
-
- None -
- -
Returns
-
- - ```javascript - { - "EvalID": "d092fdc0-e1fd-2536-67d8-43af8ca798ac", - "EvalCreateIndex": 35, - "JobModifyIndex": 34, - } - ``` - -
-
- -
-
Description
-
- Invoke a dry-run of the scheduler for the job. -
- -
Method
-
PUT or POST
- -
URL
-
`/v1/job//plan`
- -
Parameters
-
-
    -
  • - Job - required - The JSON definition of the job. -
  • -
  • - Diff - optional - Whether the diff structure between the submitted and server side version - of the job should be included in the response. -
  • -
-
- -
Returns
-
- - ```javascript - { - "Index": 0, - "NextPeriodicLaunch": "0001-01-01T00:00:00Z", - "Diff": { - "Type": "Added", - "TaskGroups": [ - { - "Updates": { - "create": 1 - }, - "Type": "Added", - "Tasks": [ - { - "Type": "Added", - "Objects": [...], - "Name": "redis", - "Fields": [ - { - "Type": "Added", - "Old": "", - "New": "docker", - "Name": "Driver", - "Annotations": null - }, - { - "Type": "Added", - "Old": "", - "New": "5000000000", - "Name": "KillTimeout", - "Annotations": null - } - ], - "Annotations": [ - "forces create" - ] - } - ], - "Objects": [...], - "Name": "cache", - "Fields": [...] - } - ], - "Objects": [ - { - "Type": "Added", - "Objects": null, - "Name": "Datacenters", - "Fields": [...] - }, - { - "Type": "Added", - "Objects": null, - "Name": "Constraint", - "Fields": [...] - }, - { - "Type": "Added", - "Objects": null, - "Name": "Update", - "Fields": [...] - } - ], - "ID": "example", - "Fields": [...], - ... - ] - }, - "CreatedEvals": [ - { - "ModifyIndex": 0, - "CreateIndex": 0, - "SnapshotIndex": 0, - "AnnotatePlan": false, - "EscapedComputedClass": false, - "NodeModifyIndex": 0, - "NodeID": "", - "JobModifyIndex": 0, - "JobID": "example", - "TriggeredBy": "job-register", - "Type": "batch", - "Priority": 50, - "ID": "312e6a6d-8d01-0daf-9105-14919a66dba3", - "Status": "blocked", - "StatusDescription": "created to place remaining allocations", - "Wait": 0, - "NextEval": "", - "PreviousEval": "80318ae4-7eda-e570-e59d-bc11df134817", - "BlockedEval": "", - "FailedTGAllocs": null, - "ClassEligibility": { - "v1:7968290453076422024": true - } - } - ], - "JobModifyIndex": 0, - "FailedTGAllocs": { - "cache": { - "CoalescedFailures": 3, - "AllocationTime": 46415, - "Scores": null, - "NodesEvaluated": 1, - "NodesFiltered": 0, - "NodesAvailable": { - "dc1": 1 - }, - "ClassFiltered": null, - "ConstraintFiltered": null, - "NodesExhausted": 1, - "ClassExhausted": null, - "DimensionExhausted": { - "cpu exhausted": 1 - } - } - }, - "Annotations": { - "DesiredTGUpdates": { - "cache": { - "DestructiveUpdate": 0, - "InPlaceUpdate": 0, - "Stop": 0, - "Migrate": 0, - "Place": 11, - "Ignore": 0 - } - } - } - } - ``` - -
- -
Field Reference
-
-
    -
  • - Diff - A diff structure between the submitted job and the server side version. - The top-level object is a Job Diff which contains Task Group Diffs, - which in turn contain Task Diffs. Each of these objects then has Object - and Field Diff structures embedded. -
  • -
  • - NextPeriodicLaunch - If the job being planned is periodic, this field will include the next - launch time for the job. -
  • -
  • - CreatedEvals - A set of evaluations that were created as a result of the dry-run. These - evaluations can signify a follow-up rolling update evaluation or a - blocked evaluation. -
  • -
  • - JobModifyIndex - The JobModifyIndex of the server side version of this job. -
  • -
  • - FailedTGAllocs - A set of metrics to understand any allocation failures that occurred for - the Task Group. -
  • -
  • - Annotations - Annotations include the DesiredTGUpdates, which tracks what the - scheduler would do given enough resources for each Task Group. -
  • -
-
-
- - -
-
Description
-
- Forces a new instance of the periodic job. A new instance will be created - even if it violates the job's - [`prohibit_overlap`](/docs/job-specification/periodic.html#prohibit_overlap) settings. As - such, this should be only used to immediately run a periodic job. -
- -
Method
-
PUT or POST
- -
URL
-
`/v1/job//periodic/force`
- -
Parameters
-
- None -
- -
Returns
-
- - ```javascript - { - "EvalCreateIndex": 7, - "EvalID": "57983ddd-7fcf-3e3a-fd24-f699ccfb36f4" - } - ``` - -
-
- -## DELETE - -
-
Description
-
- Deregisters a job, and stops all allocations part of it. -
- -
Method
-
DELETE
- -
URL
-
`/v1/job/`
- -
Parameters
-
- None -
- -
Returns
-
- - ```javascript - { - "EvalID": "d092fdc0-e1fd-2536-67d8-43af8ca798ac", - "EvalCreateIndex": 35, - "JobModifyIndex": 34, - } - ``` - -
-
diff --git a/website/source/docs/http/jobs.html.md b/website/source/docs/http/jobs.html.md deleted file mode 100644 index 34f5125cc..000000000 --- a/website/source/docs/http/jobs.html.md +++ /dev/null @@ -1,104 +0,0 @@ ---- -layout: "http" -page_title: "HTTP API: /v1/jobs" -sidebar_current: "docs-http-jobs" -description: |- - The '/1/jobs' endpoint is used list jobs and register new ones. ---- - -# /v1/jobs - -The `jobs` endpoint is used to query the status of existing jobs in Nomad -and to register new jobs. By default, the agent's local region is used; -another region can be specified using the `?region=` query parameter. - -## GET - -
-
Description
-
- Lists all the jobs registered with Nomad. -
- -
Method
-
GET
- -
URL
-
`/v1/jobs`
- -
Parameters
-
-
    -
  • - prefix - optional - Filter jobs based on an identifier prefix. -
  • -
-
- -
Blocking Queries
-
- [Supported](/docs/http/index.html#blocking-queries) -
- -
Returns
-
- - ```javascript - [ - { - "ID": "binstore-storagelocker", - "Name": "binstore-storagelocker", - "Type": "service", - "Priority": 50, - "Status": "", - "StatusDescription": "", - "CreateIndex": 14, - "ModifyIndex": 14 - }, - ... - ] - ``` - -
-
- -## PUT / POST - -
-
Description
-
- Registers a new job. -
- -
Method
-
PUT or POST
- -
URL
-
`/v1/jobs`
- -
Parameters
-
-
    -
  • - Job - required - The JSON definition of the job. The general structure is given - by the [job specification](/docs/http/json-jobs.html). -
  • -
-
-
Returns
-
- - ```javascript - { - "EvalID": "d092fdc0-e1fd-2536-67d8-43af8ca798ac", - "EvalCreateIndex": 35, - "JobModifyIndex": 34, - } - ``` - -
-