github.com/anuvu/nomad@v0.8.7-atom1/website/source/api/jobs.html.md (about)

     1  ---
     2  layout: api
     3  page_title: Jobs - HTTP API
     4  sidebar_current: api-jobs
     5  description: |-
     6    The /jobs endpoints are used to query for and interact with jobs.
     7  ---
     8  
     9  # Jobs HTTP API
    10  
    11  The `/jobs` endpoints are used to query for and interact with jobs.
    12  
    13  ## List Jobs
    14  
    15  This endpoint lists all known jobs in the system registered with Nomad.
    16  
    17  | Method | Path                      | Produces                   |
    18  | ------ | ------------------------- | -------------------------- |
    19  | `GET`  | `/v1/jobs`                | `application/json`         |
    20  
    21  The table below shows this endpoint's support for
    22  [blocking queries](/api/index.html#blocking-queries) and
    23  [required ACLs](/api/index.html#acls).
    24  
    25  | Blocking Queries | ACL Required                |
    26  | ---------------- | --------------------------- |
    27  | `YES`            | `namespace:list-jobs`       |
    28  
    29  ### Parameters
    30  
    31  - `prefix` `(string: "")` - Specifies a string to filter jobs on based on
    32    an index prefix. This is specified as a querystring parameter.
    33  
    34  ### Sample Request
    35  
    36  ```text
    37  $ curl \
    38      https://localhost:4646/v1/jobs
    39  ```
    40  
    41  ```text
    42  $ curl \
    43      https://localhost:4646/v1/jobs?prefix=team
    44  ```
    45  
    46  ### Sample Response
    47  
    48  ```json
    49  [
    50    {
    51      "ID": "example",
    52      "ParentID": "",
    53      "Name": "example",
    54      "Type": "service",
    55      "Priority": 50,
    56      "Status": "pending",
    57      "StatusDescription": "",
    58      "JobSummary": {
    59        "JobID": "example",
    60        "Summary": {
    61          "cache": {
    62            "Queued": 1,
    63            "Complete": 1,
    64            "Failed": 0,
    65            "Running": 0,
    66            "Starting": 0,
    67            "Lost": 0
    68          }
    69        },
    70        "Children": {
    71          "Pending": 0,
    72          "Running": 0,
    73          "Dead": 0
    74        },
    75        "CreateIndex": 52,
    76        "ModifyIndex": 96
    77      },
    78      "CreateIndex": 52,
    79      "ModifyIndex": 93,
    80      "JobModifyIndex": 52
    81    }
    82  ]
    83  ```
    84  
    85  ## Create Job
    86  
    87  This endpoint creates (aka "registers") a new job in the system.
    88  
    89  | Method  | Path                      | Produces                   |
    90  | ------- | ------------------------- | -------------------------- |
    91  | `POST`  | `/v1/jobs`                | `application/json`         |
    92  
    93  The table below shows this endpoint's support for
    94  [blocking queries](/api/index.html#blocking-queries) and
    95  [required ACLs](/api/index.html#acls).
    96  
    97  | Blocking Queries | ACL Required |
    98  | ---------------- | ------------ |
    99  | `NO`             | `namespace:submit-job`<br>`namespace:sentinel-override` if `PolicyOverride` set |
   100  
   101  ### Parameters
   102  
   103  - `Job` `(Job: <required>)` - Specifies the JSON definition of the job.
   104  
   105  - `EnforceIndex` `(bool: false)` - If set, the job will only be registered if the
   106    passed `JobModifyIndex` matches the current job's index. If the index is zero,
   107    the register only occurs if the job is new. This paradigm allows check-and-set
   108    style job updating.
   109  
   110  - `JobModifyIndex` `(int: 0)` - Specifies the `JobModifyIndex` to enforce the
   111    current job is at.
   112  
   113  - `PolicyOverride` `(bool: false)` - If set, any soft mandatory Sentinel policies
   114    will be overridden. This allows a job to be registered when it would be denied
   115    by policy.
   116  
   117  ### Sample Payload
   118  
   119  ```json
   120  {
   121      "Job": {
   122          "ID": "example",
   123          "Name": "example",
   124          "Type": "service",
   125          "Priority": 50,
   126          "Datacenters": [
   127              "dc1"
   128          ],
   129          "TaskGroups": [{
   130              "Name": "cache",
   131              "Count": 1,
   132              "Tasks": [{
   133                  "Name": "redis",
   134                  "Driver": "docker",
   135                  "User": "",
   136                  "Config": {
   137                      "image": "redis:3.2",
   138                      "port_map": [{
   139                          "db": 6379
   140                      }]
   141                  },
   142                  "Services": [{
   143                      "Id": "",
   144                      "Name": "redis-cache",
   145                      "Tags": [
   146                          "global",
   147                          "cache"
   148                      ],
   149                      "PortLabel": "db",
   150                      "AddressMode": "",
   151                      "Checks": [{
   152                          "Id": "",
   153                          "Name": "alive",
   154                          "Type": "tcp",
   155                          "Command": "",
   156                          "Args": null,
   157                          "Path": "",
   158                          "Protocol": "",
   159                          "PortLabel": "",
   160                          "Interval": 10000000000,
   161                          "Timeout": 2000000000,
   162                          "InitialStatus": "",
   163                          "TLSSkipVerify": false
   164                      }]
   165                  }],
   166                  "Resources": {
   167                      "CPU": 500,
   168                      "MemoryMB": 256,
   169                      "Networks": [{
   170                          "Device": "",
   171                          "CIDR": "",
   172                          "IP": "",
   173                          "MBits": 10,
   174                          "DynamicPorts": [{
   175                              "Label": "db",
   176                              "Value": 0
   177                          }]
   178                      }]
   179                  },
   180                  "Leader": false
   181              }],
   182              "RestartPolicy": {
   183                  "Interval": 300000000000,
   184                  "Attempts": 10,
   185                  "Delay": 25000000000,
   186                  "Mode": "delay"
   187              },
   188              "ReschedulePolicy": {
   189                  "Attempts": 10,
   190                  "Delay": 30000000000,
   191                  "DelayFunction": "exponential",
   192                  "Interval": 0,
   193                  "MaxDelay": 3600000000000,
   194                  "Unlimited": true
   195              },
   196              "EphemeralDisk": {
   197                  "SizeMB": 300
   198              }
   199          }],
   200          "Update": {
   201              "MaxParallel": 1,
   202              "MinHealthyTime": 10000000000,
   203              "HealthyDeadline": 180000000000,
   204              "AutoRevert": false,
   205              "Canary": 0
   206          }
   207      }
   208  }
   209  ```
   210  
   211  ### Sample Request
   212  
   213  ```text
   214  $ curl \
   215      --request POST \
   216      --data @my-job.nomad \
   217      https://localhost:4646/v1/jobs
   218  ```
   219  
   220  ### Sample Response
   221  
   222  ```json
   223  {
   224    "EvalID": "",
   225    "EvalCreateIndex": 0,
   226    "JobModifyIndex": 109,
   227    "Warnings": "",
   228    "Index": 0,
   229    "LastContact": 0,
   230    "KnownLeader": false
   231  }
   232  ```
   233  
   234  ## Parse Job
   235  
   236  This endpoint will parse a HCL jobspec and produce the equivalent JSON encoded
   237  job.
   238  
   239  | Method | Path                      | Produces                   |
   240  | ------ | ------------------------- | -------------------------- |
   241  | `POST` | `/v1/jobs/parse`          | `application/json`         |
   242  
   243  The table below shows this endpoint's support for
   244  [blocking queries](/api/index.html#blocking-queries) and
   245  [required ACLs](/api/index.html#acls).
   246  
   247  | Blocking Queries | ACL Required |
   248  | ---------------- | ------------ |
   249  | `NO`             | `none`       |
   250  
   251  ### Parameters
   252  
   253  - `JobHCL` `(string: <required>)` - Specifies the HCL definition of the job
   254    encoded in a JSON string.
   255  - `Canonicalize` `(bool: false)` - Flag to enable setting any unset fields to
   256    their default values.
   257  
   258  ## Sample Payload
   259  
   260  ```json
   261  {
   262      "JobHCL":"job \"example\" { type = \"service\" group \"cache\" {} }",
   263      "Canonicalize": true
   264  }
   265  ```
   266  
   267  ### Sample Request
   268  
   269  ```text
   270  $ curl \
   271      --request POST \
   272      --data '{"Canonicalize": true, "JobHCL": "job \"my-job\" {}"}' \
   273      https://localhost:4646/v1/jobs/parse
   274  ```
   275  
   276  ### Sample Response
   277  
   278  ```json
   279  {
   280      "AllAtOnce": false,
   281      "Constraints": null,
   282      "CreateIndex": 0,
   283      "Datacenters": null,
   284      "ID": "my-job",
   285      "JobModifyIndex": 0,
   286      "Meta": null,
   287      "Migrate": null,
   288      "ModifyIndex": 0,
   289      "Name": "my-job",
   290      "Namespace": "default",
   291      "ParameterizedJob": null,
   292      "ParentID": "",
   293      "Payload": null,
   294      "Periodic": null,
   295      "Priority": 50,
   296      "Region": "global",
   297      "Reschedule": null,
   298      "Stable": false,
   299      "Status": "",
   300      "StatusDescription": "",
   301      "Stop": false,
   302      "SubmitTime": null,
   303      "TaskGroups": null,
   304      "Type": "service",
   305      "Update": null,
   306      "VaultToken": "",
   307      "Version": 0
   308  }
   309  ```
   310  
   311  ## Read Job
   312  
   313  This endpoint reads information about a single job for its specification and
   314  status.
   315  
   316  | Method | Path                      | Produces                   |
   317  | ------ | ------------------------- | -------------------------- |
   318  | `GET`  | `/v1/job/:job_id`         | `application/json`         |
   319  
   320  The table below shows this endpoint's support for
   321  [blocking queries](/api/index.html#blocking-queries) and
   322  [required ACLs](/api/index.html#acls).
   323  
   324  | Blocking Queries | ACL Required               |
   325  | ---------------- | -------------------------- |
   326  | `YES`            | `namespace:read-job`       |
   327  
   328  ### Parameters
   329  
   330  - `:job_id` `(string: <required>)` - Specifies the ID of the job (as specified in
   331    the job file during submission). This is specified as part of the path.
   332  
   333  ### Sample Request
   334  
   335  ```text
   336  $ curl \
   337      https://localhost:4646/v1/job/my-job
   338  ```
   339  
   340  ### Sample Response
   341  
   342  ```json
   343  {
   344    "Region": "global",
   345    "ID": "example",
   346    "ParentID": "",
   347    "Name": "example",
   348    "Type": "batch",
   349    "Priority": 50,
   350    "AllAtOnce": false,
   351    "Datacenters": [
   352      "dc1"
   353    ],
   354    "Constraints": [
   355      {
   356        "LTarget": "${attr.kernel.name}",
   357        "RTarget": "linux",
   358        "Operand": "="
   359      }
   360    ],
   361    "TaskGroups": [
   362      {
   363        "Name": "cache",
   364        "Count": 1,
   365        "Constraints": [
   366          {
   367            "LTarget": "${attr.os.signals}",
   368            "RTarget": "SIGUSR1",
   369            "Operand": "set_contains"
   370          }
   371        ],
   372        "RestartPolicy": {
   373          "Attempts": 10,
   374          "Interval": 300000000000,
   375          "Delay": 25000000000,
   376          "Mode": "delay"
   377        },
   378        "Tasks": [
   379          {
   380            "Name": "redis",
   381            "Driver": "docker",
   382            "User": "foo-user",
   383            "Config": {
   384              "image": "redis:latest",
   385              "port_map": [
   386                {
   387                  "db": 6379
   388                }
   389              ]
   390            },
   391            "Env": {
   392              "foo": "bar",
   393              "baz": "pipe"
   394            },
   395            "Services": [
   396              {
   397                "Name": "cache-redis",
   398                "PortLabel": "db",
   399                "Tags": [
   400                  "global",
   401                  "cache"
   402                ],
   403                "Checks": [
   404                  {
   405                    "Name": "alive",
   406                    "Type": "tcp",
   407                    "Command": "",
   408                    "Args": null,
   409                    "Path": "",
   410                    "Protocol": "",
   411                    "PortLabel": "",
   412                    "Interval": 10000000000,
   413                    "Timeout": 2000000000,
   414                    "InitialStatus": ""
   415                  }
   416                ]
   417              }
   418            ],
   419            "Vault": null,
   420            "Templates": [
   421              {
   422                "SourcePath": "local/config.conf.tpl",
   423                "DestPath": "local/config.conf",
   424                "EmbeddedTmpl": "",
   425                "ChangeMode": "signal",
   426                "ChangeSignal": "SIGUSR1",
   427                "Splay": 5000000000,
   428                "Perms": ""
   429              }
   430            ],
   431            "Constraints": null,
   432            "Resources": {
   433              "CPU": 500,
   434              "MemoryMB": 256,
   435              "DiskMB": 0,
   436              "IOPS": 0,
   437              "Networks": [
   438                {
   439                  "Device": "",
   440                  "CIDR": "",
   441                  "IP": "",
   442                  "MBits": 10,
   443                  "ReservedPorts": [
   444                    {
   445                      "Label": "rpc",
   446                      "Value": 25566
   447                    }
   448                  ],
   449                  "DynamicPorts": [
   450                    {
   451                      "Label": "db",
   452                      "Value": 0
   453                    }
   454                  ]
   455                }
   456              ]
   457            },
   458            "DispatchPayload": {
   459              "File": "config.json"
   460            },
   461            "Meta": {
   462              "foo": "bar",
   463              "baz": "pipe"
   464            },
   465            "KillTimeout": 5000000000,
   466            "LogConfig": {
   467              "MaxFiles": 10,
   468              "MaxFileSizeMB": 10
   469            },
   470            "Artifacts": [
   471              {
   472                "GetterSource": "http://foo.com/artifact.tar.gz",
   473                "GetterOptions": {
   474                  "checksum": "md5:c4aa853ad2215426eb7d70a21922e794"
   475                },
   476                "RelativeDest": "local/"
   477              }
   478            ],
   479            "Leader": false
   480          }
   481        ],
   482        "EphemeralDisk": {
   483          "Sticky": false,
   484          "SizeMB": 300,
   485          "Migrate": false
   486        },
   487        "Meta": {
   488          "foo": "bar",
   489          "baz": "pipe"
   490        }
   491      }
   492    ],
   493    "Update": {
   494      "Stagger": 10000000000,
   495      "MaxParallel": 1
   496    },
   497    "Periodic": {
   498      "Enabled": true,
   499      "Spec": "* * * * *",
   500      "SpecType": "cron",
   501      "ProhibitOverlap": true
   502    },
   503    "ParameterizedJob": {
   504      "Payload": "required",
   505      "MetaRequired": [
   506        "foo"
   507      ],
   508      "MetaOptional": [
   509        "bar"
   510      ]
   511    },
   512    "Payload": null,
   513    "Meta": {
   514      "foo": "bar",
   515      "baz": "pipe"
   516    },
   517    "VaultToken": "",
   518    "Status": "running",
   519    "StatusDescription": "",
   520    "CreateIndex": 7,
   521    "ModifyIndex": 7,
   522    "JobModifyIndex": 7
   523  }
   524  ```
   525  
   526  ## List Job Versions
   527  
   528  This endpoint reads information about all versions of a job.
   529  
   530  | Method | Path                       | Produces                   |
   531  | ------ | -------------------------- | -------------------------- |
   532  | `GET`  | `/v1/job/:job_id/versions` | `application/json`         |
   533  
   534  The table below shows this endpoint's support for
   535  [blocking queries](/api/index.html#blocking-queries) and
   536  [required ACLs](/api/index.html#acls).
   537  
   538  | Blocking Queries | ACL Required               |
   539  | ---------------- | -------------------------- |
   540  | `YES`            | `namespace:read-job`       |
   541  
   542  ### Parameters
   543  
   544  - `:job_id` `(string: <required>)` - Specifies the ID of the job (as specified in
   545    the job file during submission). This is specified as part of the path.
   546  
   547  ### Sample Request
   548  
   549  ```text
   550  $ curl \
   551      https://localhost:4646/v1/job/my-job/versions
   552  ```
   553  
   554  ### Sample Response
   555  
   556  ```json
   557  [
   558    {
   559      "Stop": false,
   560      "Region": "global",
   561      "ID": "example",
   562      "ParentID": "",
   563      "Name": "example",
   564      "Type": "service",
   565      "Priority": 50,
   566      "AllAtOnce": false,
   567      "Datacenters": [
   568        "dc1"
   569      ],
   570      "Constraints": null,
   571      "TaskGroups": [
   572        {
   573          "Name": "cache",
   574          "Count": 1,
   575          "Update": {
   576            "Stagger": 0,
   577            "MaxParallel": 1,
   578            "HealthCheck": "checks",
   579            "MinHealthyTime": 10000000000,
   580            "HealthyDeadline": 300000000000,
   581            "AutoRevert": false,
   582            "Canary": 0
   583          },
   584          "Constraints": null,
   585          "RestartPolicy": {
   586            "Attempts": 10,
   587            "Interval": 300000000000,
   588            "Delay": 25000000000,
   589            "Mode": "delay"
   590          },
   591          "Tasks": [
   592            {
   593              "Name": "redis",
   594              "Driver": "docker",
   595              "User": "",
   596              "Config": {
   597                "image": "redis:3.2",
   598                "port_map": [
   599                  {
   600                    "db": 6379
   601                  }
   602                ]
   603              },
   604              "Env": null,
   605              "Services": [
   606                {
   607                  "Name": "redis-cache",
   608                  "PortLabel": "db",
   609                  "Tags": [
   610                    "global",
   611                    "cache"
   612                  ],
   613                  "Checks": [
   614                    {
   615                      "Name": "alive",
   616                      "Type": "tcp",
   617                      "Command": "",
   618                      "Args": null,
   619                      "Path": "",
   620                      "Protocol": "",
   621                      "PortLabel": "",
   622                      "Interval": 10000000000,
   623                      "Timeout": 2000000000,
   624                      "InitialStatus": "",
   625                      "TLSSkipVerify": false
   626                    }
   627                  ]
   628                }
   629              ],
   630              "Vault": null,
   631              "Templates": null,
   632              "Constraints": null,
   633              "Resources": {
   634                "CPU": 500,
   635                "MemoryMB": 256,
   636                "DiskMB": 0,
   637                "IOPS": 0,
   638                "Networks": [
   639                  {
   640                    "Device": "",
   641                    "CIDR": "",
   642                    "IP": "",
   643                    "MBits": 10,
   644                    "ReservedPorts": null,
   645                    "DynamicPorts": [
   646                      {
   647                        "Label": "db",
   648                        "Value": 0
   649                      }
   650                    ]
   651                  }
   652                ]
   653              },
   654              "DispatchPayload": null,
   655              "Meta": null,
   656              "KillTimeout": 5000000000,
   657              "LogConfig": {
   658                "MaxFiles": 10,
   659                "MaxFileSizeMB": 10
   660              },
   661              "Artifacts": null,
   662              "Leader": false
   663            }
   664          ],
   665          "EphemeralDisk": {
   666            "Sticky": false,
   667            "SizeMB": 300,
   668            "Migrate": false
   669          },
   670          "Meta": null
   671        }
   672      ],
   673      "Update": {
   674        "Stagger": 10000000000,
   675        "MaxParallel": 1,
   676        "HealthCheck": "",
   677        "MinHealthyTime": 0,
   678        "HealthyDeadline": 0,
   679        "AutoRevert": false,
   680        "Canary": 0
   681      },
   682      "Periodic": null,
   683      "ParameterizedJob": null,
   684      "Payload": null,
   685      "Meta": null,
   686      "VaultToken": "",
   687      "Status": "pending",
   688      "StatusDescription": "",
   689      "Stable": false,
   690      "Version": 0,
   691      "CreateIndex": 7,
   692      "ModifyIndex": 7,
   693      "JobModifyIndex": 7
   694    }
   695  ]
   696  ```
   697  
   698  ## List Job Allocations
   699  
   700  This endpoint reads information about a single job's allocations.
   701  
   702  | Method | Path                          | Produces                   |
   703  | ------ | ----------------------------- | -------------------------- |
   704  | `GET`  | `/v1/job/:job_id/allocations` | `application/json`         |
   705  
   706  The table below shows this endpoint's support for
   707  [blocking queries](/api/index.html#blocking-queries) and
   708  [required ACLs](/api/index.html#acls).
   709  
   710  | Blocking Queries | ACL Required               |
   711  | ---------------- | -------------------------- |
   712  | `YES`            | `namespace:read-job`       |
   713  
   714  ### Parameters
   715  
   716  - `:job_id` `(string: <required>)` - Specifies the ID of the job (as specified in
   717    the job file during submission). This is specified as part of the path.
   718  
   719  - `all` `(bool: false)` - Specifies whether the list of allocations should
   720    include allocations from a previously registered job with the same ID. This is
   721    possible if the job is deregistered and reregistered.
   722  
   723  ### Sample Request
   724  
   725  ```text
   726  $ curl \
   727      https://localhost:4646/v1/job/my-job/allocations
   728  ```
   729  
   730  ### Sample Response
   731  
   732  ```json
   733  [
   734    {
   735      "ID": "ed344e0a-7290-d117-41d3-a64f853ca3c2",
   736      "EvalID": "a9c5effc-2242-51b2-f1fe-054ee11ab189",
   737      "Name": "example.cache[0]",
   738      "NodeID": "cb1f6030-a220-4f92-57dc-7baaabdc3823",
   739      "PreviousAllocation": "516d2753-0513-cfc7-57ac-2d6fac18b9dc",
   740         "NextAllocation": "cd13d9b9-4f97-7184-c88b-7b451981616b",
   741         "RescheduleTracker": {
   742            "Events": [
   743               {
   744                 "PrevAllocID": "516d2753-0513-cfc7-57ac-2d6fac18b9dc",
   745                 "PrevNodeID": "9230cd3b-3bda-9a3f-82f9-b2ea8dedb20e",
   746                 "RescheduleTime": 1517434161192946200,
   747                 "Delay":5000000000,
   748                },
   749              ]
   750      },
   751      "JobID": "example",
   752      "TaskGroup": "cache",
   753      "DesiredStatus": "run",
   754      "DesiredDescription": "",
   755      "ClientStatus": "running",
   756      "ClientDescription": "",
   757      "TaskStates": {
   758        "redis": {
   759          "State": "running",
   760          "Failed": false,
   761          "StartedAt": "2017-05-25T23:41:23.240184101Z",
   762          "FinishedAt": "0001-01-01T00:00:00Z",
   763          "Events": [
   764            {
   765              "Type": "Received",
   766              "Time": 1495755675956923000,
   767              "FailsTask": false,
   768              "RestartReason": "",
   769              "SetupError": "",
   770              "DriverError": "",
   771              "ExitCode": 0,
   772              "Signal": 0,
   773              "Message": "",
   774              "KillTimeout": 0,
   775              "KillError": "",
   776              "KillReason": "",
   777              "StartDelay": 0,
   778              "DownloadError": "",
   779              "ValidationError": "",
   780              "DiskLimit": 0,
   781              "FailedSibling": "",
   782              "VaultError": "",
   783              "TaskSignalReason": "",
   784              "TaskSignal": "",
   785              "DriverMessage": ""
   786            },
   787            {
   788              "Type": "Task Setup",
   789              "Time": 1495755675957466400,
   790              "FailsTask": false,
   791              "RestartReason": "",
   792              "SetupError": "",
   793              "DriverError": "",
   794              "ExitCode": 0,
   795              "Signal": 0,
   796              "Message": "Building Task Directory",
   797              "KillTimeout": 0,
   798              "KillError": "",
   799              "KillReason": "",
   800              "StartDelay": 0,
   801              "DownloadError": "",
   802              "ValidationError": "",
   803              "DiskLimit": 0,
   804              "FailedSibling": "",
   805              "VaultError": "",
   806              "TaskSignalReason": "",
   807              "TaskSignal": "",
   808              "DriverMessage": ""
   809            },
   810            {
   811              "Type": "Driver",
   812              "Time": 1495755675970286800,
   813              "FailsTask": false,
   814              "RestartReason": "",
   815              "SetupError": "",
   816              "DriverError": "",
   817              "ExitCode": 0,
   818              "Signal": 0,
   819              "Message": "",
   820              "KillTimeout": 0,
   821              "KillError": "",
   822              "KillReason": "",
   823              "StartDelay": 0,
   824              "DownloadError": "",
   825              "ValidationError": "",
   826              "DiskLimit": 0,
   827              "FailedSibling": "",
   828              "VaultError": "",
   829              "TaskSignalReason": "",
   830              "TaskSignal": "",
   831              "DriverMessage": "Downloading image redis:3.2"
   832            },
   833            {
   834              "Type": "Started",
   835              "Time": 1495755683227522000,
   836              "FailsTask": false,
   837              "RestartReason": "",
   838              "SetupError": "",
   839              "DriverError": "",
   840              "ExitCode": 0,
   841              "Signal": 0,
   842              "Message": "",
   843              "KillTimeout": 0,
   844              "KillError": "",
   845              "KillReason": "",
   846              "StartDelay": 0,
   847              "DownloadError": "",
   848              "ValidationError": "",
   849              "DiskLimit": 0,
   850              "FailedSibling": "",
   851              "VaultError": "",
   852              "TaskSignalReason": "",
   853              "TaskSignal": "",
   854              "DriverMessage": ""
   855            }
   856          ]
   857        }
   858      },
   859      "CreateIndex": 9,
   860      "ModifyIndex": 13,
   861      "CreateTime": 1495755675944527600,
   862      "ModifyTime": 1495755675944527600
   863    }
   864  ]
   865  ```
   866  
   867  ## List Job Evaluations
   868  
   869  This endpoint reads information about a single job's evaluations
   870  
   871  | Method | Path                          | Produces                   |
   872  | ------ | ----------------------------- | -------------------------- |
   873  | `GET`  | `/v1/job/:job_id/evaluations` | `application/json`         |
   874  
   875  The table below shows this endpoint's support for
   876  [blocking queries](/api/index.html#blocking-queries) and
   877  [required ACLs](/api/index.html#acls).
   878  
   879  | Blocking Queries | ACL Required               |
   880  | ---------------- | -------------------------- |
   881  | `YES`            | `namespace:read-job`       |
   882  
   883  ### Parameters
   884  
   885  - `:job_id` `(string: <required>)` - Specifies the ID of the job (as specified in
   886    the job file during submission). This is specified as part of the path.
   887  
   888  ### Sample Request
   889  
   890  ```text
   891  $ curl \
   892      https://localhost:4646/v1/job/my-job/evaluations
   893  ```
   894  
   895  ### Sample Response
   896  
   897  ```json
   898  [
   899    {
   900      "ID": "a9c5effc-2242-51b2-f1fe-054ee11ab189",
   901      "Priority": 50,
   902      "Type": "service",
   903      "TriggeredBy": "job-register",
   904      "JobID": "example",
   905      "JobModifyIndex": 7,
   906      "NodeID": "",
   907      "NodeModifyIndex": 0,
   908      "Status": "complete",
   909      "StatusDescription": "",
   910      "Wait": 0,
   911      "NextEval": "",
   912      "PreviousEval": "",
   913      "BlockedEval": "",
   914      "FailedTGAllocs": null,
   915      "ClassEligibility": null,
   916      "EscapedComputedClass": false,
   917      "AnnotatePlan": false,
   918      "QueuedAllocations": {
   919        "cache": 0
   920      },
   921      "SnapshotIndex": 8,
   922      "CreateIndex": 8,
   923      "ModifyIndex": 10
   924    }
   925  ]
   926  ```
   927  
   928  ## List Job Deployments
   929  
   930  This endpoint lists a single job's deployments
   931  
   932  | Method | Path                          | Produces                   |
   933  | ------ | ----------------------------- | -------------------------- |
   934  | `GET`  | `/v1/job/:job_id/deployments` | `application/json`         |
   935  
   936  The table below shows this endpoint's support for
   937  [blocking queries](/api/index.html#blocking-queries) and
   938  [required ACLs](/api/index.html#acls).
   939  
   940  | Blocking Queries | ACL Required               |
   941  | ---------------- | -------------------------- |
   942  | `YES`            | `namespace:read-job`       |
   943  
   944  ### Parameters
   945  
   946  - `:job_id` `(string: <required>)` - Specifies the ID of the job (as specified in
   947    the job file during submission). This is specified as part of the path.
   948  
   949  ### Sample Request
   950  
   951  ```text
   952  $ curl \
   953      https://localhost:4646/v1/job/my-job/deployments
   954  ```
   955  
   956  ### Sample Response
   957  
   958  ```json
   959  [
   960    {
   961      "ID": "85ee4a9a-339f-a921-a9ef-0550d20b2c61",
   962      "JobID": "my-job",
   963      "JobVersion": 1,
   964      "JobModifyIndex": 19,
   965      "JobCreateIndex": 7,
   966      "TaskGroups": {
   967        "cache": {
   968          "AutoRevert": true,
   969          "Promoted": false,
   970          "PlacedCanaries": [
   971            "d0ad0808-2765-abf6-1e15-79fb7fe5a416",
   972            "38c70cd8-81f2-1489-a328-87bb29ec0e0f"
   973          ],
   974          "DesiredCanaries": 2,
   975          "DesiredTotal": 3,
   976          "PlacedAllocs": 2,
   977          "HealthyAllocs": 2,
   978          "UnhealthyAllocs": 0
   979        }
   980      },
   981      "Status": "running",
   982      "StatusDescription": "Deployment is running",
   983      "CreateIndex": 21,
   984      "ModifyIndex": 25
   985    },
   986    {
   987      "ID": "fb6070fb-4a44-e255-4e6f-8213eba3871a",
   988      "JobID": "my-job",
   989      "JobVersion": 0,
   990      "JobModifyIndex": 7,
   991      "JobCreateIndex": 7,
   992      "TaskGroups": {
   993        "cache": {
   994          "AutoRevert": true,
   995          "Promoted": false,
   996          "PlacedCanaries": null,
   997          "DesiredCanaries": 0,
   998          "DesiredTotal": 3,
   999          "PlacedAllocs": 3,
  1000          "HealthyAllocs": 3,
  1001          "UnhealthyAllocs": 0
  1002        }
  1003      },
  1004      "Status": "successful",
  1005      "StatusDescription": "Deployment completed successfully",
  1006      "CreateIndex": 9,
  1007      "ModifyIndex": 17
  1008    }
  1009  ]
  1010  ```
  1011  
  1012  
  1013  ## Read Job's Most Recent Deployment
  1014  
  1015  This endpoint returns a single job's most recent deployment.
  1016  
  1017  | Method | Path                          | Produces                   |
  1018  | ------ | ----------------------------- | -------------------------- |
  1019  | `GET`  | `/v1/job/:job_id/deployment`  | `application/json`         |
  1020  
  1021  The table below shows this endpoint's support for
  1022  [blocking queries](/api/index.html#blocking-queries) and
  1023  [required ACLs](/api/index.html#acls).
  1024  
  1025  | Blocking Queries | ACL Required               |
  1026  | ---------------- | -------------------------- |
  1027  | `YES`            | `namespace:read-job`       |
  1028  
  1029  ### Parameters
  1030  
  1031  - `:job_id` `(string: <required>)` - Specifies the ID of the job (as specified in
  1032    the job file during submission). This is specified as part of the path.
  1033  
  1034  ### Sample Request
  1035  
  1036  ```text
  1037  $ curl \
  1038      https://localhost:4646/v1/job/my-job/deployment
  1039  ```
  1040  
  1041  ### Sample Response
  1042  
  1043  ```json
  1044  {
  1045    "ID": "85ee4a9a-339f-a921-a9ef-0550d20b2c61",
  1046    "JobID": "my-job",
  1047    "JobVersion": 1,
  1048    "JobModifyIndex": 19,
  1049    "JobCreateIndex": 7,
  1050    "TaskGroups": {
  1051      "cache": {
  1052        "AutoRevert": true,
  1053        "Promoted": false,
  1054        "PlacedCanaries": [
  1055          "d0ad0808-2765-abf6-1e15-79fb7fe5a416",
  1056          "38c70cd8-81f2-1489-a328-87bb29ec0e0f"
  1057        ],
  1058        "DesiredCanaries": 2,
  1059        "DesiredTotal": 3,
  1060        "PlacedAllocs": 2,
  1061        "HealthyAllocs": 2,
  1062        "UnhealthyAllocs": 0
  1063      }
  1064    },
  1065    "Status": "running",
  1066    "StatusDescription": "Deployment is running",
  1067    "CreateIndex": 21,
  1068    "ModifyIndex": 25
  1069  }
  1070  ```
  1071  
  1072  
  1073  ## Read Job Summary
  1074  
  1075  This endpoint reads summary information about a job.
  1076  
  1077  | Method | Path                       | Produces                   |
  1078  | ------ | -------------------------- | -------------------------- |
  1079  | `GET`  | `/v1/job/:job_id/summary`  | `application/json`         |
  1080  
  1081  The table below shows this endpoint's support for
  1082  [blocking queries](/api/index.html#blocking-queries) and
  1083  [required ACLs](/api/index.html#acls).
  1084  
  1085  | Blocking Queries | ACL Required               |
  1086  | ---------------- | -------------------------- |
  1087  | `YES`            | `namespace:read-job`       |
  1088  
  1089  ### Parameters
  1090  
  1091  - `:job_id` `(string: <required>)` - Specifies the ID of the job (as specified in
  1092    the job file during submission). This is specified as part of the path.
  1093  
  1094  ### Sample Request
  1095  
  1096  ```text
  1097  $ curl \
  1098      https://localhost:4646/v1/job/my-job/summary
  1099  ```
  1100  
  1101  ### Sample Response
  1102  
  1103  ```json
  1104  {
  1105    "JobID": "example",
  1106    "Summary": {
  1107      "cache": {
  1108        "Queued": 0,
  1109        "Complete": 0,
  1110        "Failed": 0,
  1111        "Running": 1,
  1112        "Starting": 0,
  1113        "Lost": 0
  1114      }
  1115    },
  1116    "Children": {
  1117      "Pending": 0,
  1118      "Running": 0,
  1119      "Dead": 0
  1120    },
  1121    "CreateIndex": 7,
  1122    "ModifyIndex": 13
  1123  }
  1124  ```
  1125  
  1126  ## Update Existing Job
  1127  
  1128  This endpoint registers a new job or updates an existing job.
  1129  
  1130  | Method  | Path                       | Produces                   |
  1131  | ------- | -------------------------- | -------------------------- |
  1132  | `POST`  | `/v1/job/:job_id`          | `application/json`         |
  1133  
  1134  The table below shows this endpoint's support for
  1135  [blocking queries](/api/index.html#blocking-queries) and
  1136  [required ACLs](/api/index.html#acls).
  1137  
  1138  | Blocking Queries | ACL Required |
  1139  | ---------------- | ------------ |
  1140  | `NO`             | `namespace:submit-job`<br>`namespace:sentinel-override` if `PolicyOverride` set |
  1141  
  1142  ### Parameters
  1143  
  1144  - `:job_id` `(string: <required>)` - Specifies the ID of the job (as specified in
  1145    the job file during submission). This is specified as part of the path.
  1146  
  1147  - `Job` `(Job: <required>)` - Specifies the JSON definition of the job.
  1148  
  1149  - `EnforceIndex` `(bool: false)` - If set, the job will only be registered if the
  1150    passed `JobModifyIndex` matches the current job's index. If the index is zero,
  1151    the register only occurs if the job is new. This paradigm allows check-and-set
  1152    style job updating.
  1153  
  1154  - `JobModifyIndex` `(int: 0)` - Specifies the `JobModifyIndex` to enforce the
  1155    current job is at.
  1156  
  1157  - `PolicyOverride` `(bool: false)` - If set, any soft mandatory Sentinel policies
  1158    will be overridden. This allows a job to be registered when it would be denied
  1159    by policy.
  1160  
  1161  ### Sample Payload
  1162  
  1163  ```javascript
  1164  {
  1165    "Job": {
  1166      // ...
  1167    },
  1168    "EnforceIndex": true,
  1169    "JobModifyIndex": 4
  1170  }
  1171  ```
  1172  
  1173  ### Sample Request
  1174  
  1175  ```text
  1176  $ curl \
  1177      --request POST \
  1178      --data @payload.json \
  1179      https://localhost:4646/v1/job/my-job
  1180  ```
  1181  
  1182  ### Sample Response
  1183  
  1184  ```json
  1185  {
  1186    "EvalID": "d092fdc0-e1fd-2536-67d8-43af8ca798ac",
  1187    "EvalCreateIndex": 35,
  1188    "JobModifyIndex": 34,
  1189  }
  1190  ```
  1191  
  1192  ## Dispatch Job
  1193  
  1194  This endpoint dispatches a new instance of a parameterized job.
  1195  
  1196  | Method  | Path                       | Produces                   |
  1197  | ------- | -------------------------- | -------------------------- |
  1198  | `POST`  | `/v1/job/:job_id/dispatch` | `application/json`         |
  1199  
  1200  The table below shows this endpoint's support for
  1201  [blocking queries](/api/index.html#blocking-queries) and
  1202  [required ACLs](/api/index.html#acls).
  1203  
  1204  | Blocking Queries | ACL Required                   |
  1205  | ---------------- | ------------------------------ |
  1206  | `NO`             | `namespace:dispatch-job`       |
  1207  
  1208  ### Parameters
  1209  
  1210  - `:job_id` `(string: <required>)` - Specifies the ID of the job (as specified
  1211    in the job file during submission). This is specified as part of the path.
  1212  
  1213  - `Payload` `(string: "")` - Specifies a base64 encoded string containing the
  1214    payload. This is limited to 15 KB.
  1215  
  1216  - `Meta` `(meta<string|string>: nil)` - Specifies arbitrary metadata to pass to
  1217    the job.
  1218  
  1219  ### Sample Payload
  1220  
  1221  ```json
  1222  {
  1223    "Payload": "A28C3==",
  1224    "Meta": {
  1225      "key": "Value"
  1226    }
  1227  }
  1228  ```
  1229  
  1230  ### Sample Request
  1231  
  1232  ```text
  1233  $ curl \
  1234      --request POST \
  1235      --payload @payload.json \
  1236      https://localhost:4646/v1/job/my-job/dispatch
  1237  ```
  1238  
  1239  ### Sample Response
  1240  
  1241  ```json
  1242  {
  1243    "Index": 13,
  1244    "JobCreateIndex": 12,
  1245    "EvalCreateIndex": 13,
  1246    "EvalID": "e5f55fac-bc69-119d-528a-1fc7ade5e02c",
  1247    "DispatchedJobID": "example/dispatch-1485408778-81644024"
  1248  }
  1249  ```
  1250  
  1251  ## Revert to older Job Version
  1252  
  1253  This endpoint reverts the job to an older version.
  1254  
  1255  | Method  | Path                       | Produces                   |
  1256  | ------- | -------------------------- | -------------------------- |
  1257  | `POST`  | `/v1/job/:job_id/revert` | `application/json`         |
  1258  
  1259  The table below shows this endpoint's support for
  1260  [blocking queries](/api/index.html#blocking-queries) and
  1261  [required ACLs](/api/index.html#acls).
  1262  
  1263  | Blocking Queries | ACL Required                 |
  1264  | ---------------- | ---------------------------- |
  1265  | `NO`             | `namespace:submit-job`       |
  1266  
  1267  ### Parameters
  1268  
  1269  - `JobID` `(string: <required>)` - Specifies the ID of the job (as specified
  1270    in the job file during submission). This is specified as part of the path.
  1271  
  1272  - `JobVersion` `(integer: 0)` - Specifies the job version to revert to.
  1273  
  1274  - `EnforcePriorVersion` `(integer: nil)` - Optional value specifying the current
  1275    job's version. This is checked and acts as a check-and-set value before
  1276    reverting to the specified job.
  1277  
  1278  ### Sample Payload
  1279  
  1280  ```json
  1281  {
  1282    "JobID": "my-job",
  1283    "JobVersion": 2,
  1284  }
  1285  ```
  1286  
  1287  ### Sample Request
  1288  
  1289  ```text
  1290  $ curl \
  1291      --request POST \
  1292      --payload @payload.json \
  1293      https://localhost:4646/v1/job/my-job/revert
  1294  ```
  1295  
  1296  ### Sample Response
  1297  
  1298  ```json
  1299  {
  1300    "EvalID": "d092fdc0-e1fd-2536-67d8-43af8ca798ac",
  1301    "EvalCreateIndex": 35,
  1302    "JobModifyIndex": 34,
  1303  }
  1304  ```
  1305  
  1306  
  1307  ## Set Job Stability
  1308  
  1309  This endpoint sets the job's stability.
  1310  
  1311  | Method  | Path                       | Produces                   |
  1312  | ------- | -------------------------- | -------------------------- |
  1313  | `POST`  | `/v1/job/:job_id/stable`   | `application/json`         |
  1314  
  1315  The table below shows this endpoint's support for
  1316  [blocking queries](/api/index.html#blocking-queries) and
  1317  [required ACLs](/api/index.html#acls).
  1318  
  1319  | Blocking Queries | ACL Required                 |
  1320  | ---------------- | ---------------------------- |
  1321  | `NO`             | `namespace:submit-job`       |
  1322  
  1323  ### Parameters
  1324  
  1325  - `JobID` `(string: <required>)` - Specifies the ID of the job (as specified
  1326    in the job file during submission). This is specified as part of the path.
  1327  
  1328  - `JobVersion` `(integer: 0)` - Specifies the job version to set the stability on.
  1329  
  1330  - `Stable` `(bool: false)` - Specifies whether the job should be marked as
  1331    stable or not.
  1332  
  1333  ### Sample Payload
  1334  
  1335  ```json
  1336  {
  1337    "JobID": "my-job",
  1338    "JobVersion": 2,
  1339    "Stable": true
  1340  }
  1341  ```
  1342  
  1343  ### Sample Request
  1344  
  1345  ```text
  1346  $ curl \
  1347      --request POST \
  1348      --payload @payload.json \
  1349      https://localhost:4646/v1/job/my-job/stable
  1350  ```
  1351  
  1352  ### Sample Response
  1353  
  1354  ```json
  1355  {
  1356    "JobModifyIndex": 34,
  1357  }
  1358  ```
  1359  
  1360  
  1361  ## Create Job Evaluation
  1362  
  1363  This endpoint creates a new evaluation for the given job. This can be used to
  1364  force run the scheduling logic if necessary. Since Nomad 0.8.4, this endpoint
  1365  supports a JSON payload with additional options. Support for calling this end point
  1366  without a JSON payload will be removed in Nomad 0.9.
  1367  
  1368  | Method  | Path                       | Produces                   |
  1369  | ------- | -------------------------- | -------------------------- |
  1370  | `POST`  | `/v1/job/:job_id/evaluate` | `application/json`         |
  1371  
  1372  The table below shows this endpoint's support for
  1373  [blocking queries](/api/index.html#blocking-queries) and
  1374  [required ACLs](/api/index.html#acls).
  1375  
  1376  | Blocking Queries | ACL Required               |
  1377  | ---------------- | -------------------------- |
  1378  | `NO`             | `namespace:read-job`       |
  1379  
  1380  ### Parameters
  1381  
  1382  - `:job_id` `(string: <required>)` - Specifies the ID of the job (as specified in
  1383    the job file during submission). This is specified as part of the path.
  1384  
  1385  - `JobID` `(string: <required>)` - Specify the ID of the job in the JSON payload
  1386  
  1387  - `EvalOptions` `(<optional>)` - Specify additional options to be used during the forced evaluation.
  1388      - `ForceReschedule` `(bool: false)` - If set, failed allocations of the job are rescheduled
  1389      immediately. This is useful for operators to force immediate placement even if the failed allocations are past
  1390      their reschedule limit, or are delayed by several hours because the allocation's reschedule policy has exponential delay.
  1391  
  1392  ### Sample Payload
  1393  
  1394  ```json
  1395  {
  1396    "JobID": "my-job",
  1397    "EvalOptions": {
  1398       "ForceReschedule":true
  1399    }
  1400  }
  1401  ```
  1402  
  1403  ### Sample Request
  1404  
  1405  ```text
  1406  $ curl \
  1407      --request POST \
  1408      -d @sample.json \
  1409      https://localhost:4646/v1/job/my-job/evaluate
  1410  ```
  1411  
  1412  ### Sample Response
  1413  
  1414  ```json
  1415  {
  1416    "EvalID": "d092fdc0-e1fd-2536-67d8-43af8ca798ac",
  1417    "EvalCreateIndex": 35,
  1418    "JobModifyIndex": 34,
  1419  }
  1420  ```
  1421  
  1422  ## Create Job Plan
  1423  
  1424  This endpoint invokes a dry-run of the scheduler for the job.
  1425  
  1426  | Method  | Path                       | Produces                   |
  1427  | ------- | -------------------------- | -------------------------- |
  1428  | `POST`  | `/v1/job/:job_id/plan`     | `application/json`         |
  1429  
  1430  The table below shows this endpoint's support for
  1431  [blocking queries](/api/index.html#blocking-queries) and
  1432  [required ACLs](/api/index.html#acls).
  1433  
  1434  | Blocking Queries | ACL Required |
  1435  | ---------------- | ------------ |
  1436  | `NO`             | `namespace:submit-job`<br>`namespace:sentinel-override` if `PolicyOverride` set |
  1437  
  1438  ### Parameters
  1439  
  1440  - `:job_id` `(string: <required>)` - Specifies the ID of the job (as specified in
  1441  - the job file during submission). This is specified as part of the path.
  1442  
  1443  - `Job` `(string: <required>)` - Specifies the JSON definition of the job.
  1444  
  1445  - `Diff` `(bool: false)` - Specifies whether the diff structure between the
  1446    submitted and server side version of the job should be included in the
  1447    response.
  1448  
  1449  - `PolicyOverride` `(bool: false)` - If set, any soft mandatory Sentinel policies
  1450    will be overridden. This allows a job to be registered when it would be denied
  1451    by policy.
  1452  
  1453  ### Sample Payload
  1454  
  1455  ```json
  1456  {
  1457    "Job": "...",
  1458    "Diff": true,
  1459    "PolicyOverride": false
  1460  }
  1461  ```
  1462  
  1463  ### Sample Request
  1464  
  1465  ```text
  1466  $ curl \
  1467      --request POST \
  1468      --payload @payload.json \
  1469      https://localhost:4646/v1/job/my-job/plan
  1470  ```
  1471  
  1472  ### Sample Response
  1473  
  1474  ```json
  1475  {
  1476    "Index": 0,
  1477    "NextPeriodicLaunch": "0001-01-01T00:00:00Z",
  1478    "Warnings": "",
  1479    "Diff": {
  1480      "Type": "Added",
  1481      "TaskGroups": [
  1482        {
  1483          "Updates": {
  1484            "create": 1
  1485          },
  1486          "Type": "Added",
  1487          "Tasks": [
  1488            {
  1489              "Type": "Added",
  1490              "Objects": [
  1491                "..."
  1492              ],
  1493              "Name": "redis",
  1494              "Fields": [
  1495                {
  1496                  "Type": "Added",
  1497                  "Old": "",
  1498                  "New": "docker",
  1499                  "Name": "Driver",
  1500                  "Annotations": null
  1501                },
  1502                {
  1503                  "Type": "Added",
  1504                  "Old": "",
  1505                  "New": "5000000000",
  1506                  "Name": "KillTimeout",
  1507                  "Annotations": null
  1508                }
  1509              ],
  1510              "Annotations": [
  1511                "forces create"
  1512              ]
  1513            }
  1514          ],
  1515          "Objects": [
  1516            "..."
  1517          ],
  1518          "Name": "cache",
  1519          "Fields": [
  1520            "..."
  1521          ]
  1522        }
  1523      ],
  1524      "Objects": [
  1525        {
  1526          "Type": "Added",
  1527          "Objects": null,
  1528          "Name": "Datacenters",
  1529          "Fields": [
  1530            "..."
  1531          ]
  1532        },
  1533        {
  1534          "Type": "Added",
  1535          "Objects": null,
  1536          "Name": "Constraint",
  1537          "Fields": [
  1538            "..."
  1539          ]
  1540        },
  1541        {
  1542          "Type": "Added",
  1543          "Objects": null,
  1544          "Name": "Update",
  1545          "Fields": [
  1546            "..."
  1547          ]
  1548        }
  1549      ],
  1550      "ID": "example",
  1551      "Fields": [
  1552        "..."
  1553      ]
  1554    },
  1555    "CreatedEvals": [
  1556      {
  1557        "ModifyIndex": 0,
  1558        "CreateIndex": 0,
  1559        "SnapshotIndex": 0,
  1560        "AnnotatePlan": false,
  1561        "EscapedComputedClass": false,
  1562        "NodeModifyIndex": 0,
  1563        "NodeID": "",
  1564        "JobModifyIndex": 0,
  1565        "JobID": "example",
  1566        "TriggeredBy": "job-register",
  1567        "Type": "batch",
  1568        "Priority": 50,
  1569        "ID": "312e6a6d-8d01-0daf-9105-14919a66dba3",
  1570        "Status": "blocked",
  1571        "StatusDescription": "created to place remaining allocations",
  1572        "Wait": 0,
  1573        "NextEval": "",
  1574        "PreviousEval": "80318ae4-7eda-e570-e59d-bc11df134817",
  1575        "BlockedEval": "",
  1576        "FailedTGAllocs": null,
  1577        "ClassEligibility": {
  1578          "v1:7968290453076422024": true
  1579        }
  1580      }
  1581    ],
  1582    "JobModifyIndex": 0,
  1583    "FailedTGAllocs": {
  1584      "cache": {
  1585        "CoalescedFailures": 3,
  1586        "AllocationTime": 46415,
  1587        "Scores": null,
  1588        "NodesEvaluated": 1,
  1589        "NodesFiltered": 0,
  1590        "NodesAvailable": {
  1591          "dc1": 1
  1592        },
  1593        "ClassFiltered": null,
  1594        "ConstraintFiltered": null,
  1595        "NodesExhausted": 1,
  1596        "ClassExhausted": null,
  1597        "DimensionExhausted": {
  1598          "cpu": 1
  1599        }
  1600      }
  1601    },
  1602    "Annotations": {
  1603      "DesiredTGUpdates": {
  1604        "cache": {
  1605          "DestructiveUpdate": 0,
  1606          "InPlaceUpdate": 0,
  1607          "Stop": 0,
  1608          "Migrate": 0,
  1609          "Place": 11,
  1610          "Ignore": 0
  1611        }
  1612      }
  1613    }
  1614  }
  1615  ```
  1616  
  1617  #### Field Reference
  1618  
  1619  - `Diff` - A diff structure between the submitted job and the server side
  1620    version. The top-level object is a Job Diff which contains Task Group Diffs,
  1621    which in turn contain Task Diffs. Each of these objects then has Object and
  1622    Field Diff structures embedded.
  1623  
  1624  - `NextPeriodicLaunch` - If the job being planned is periodic, this field will
  1625    include the next launch time for the job.
  1626  
  1627  - `CreatedEvals` - A set of evaluations that were created as a result of the
  1628    dry-run. These evaluations can signify a follow-up rolling update evaluation
  1629    or a blocked evaluation.
  1630  
  1631  - `JobModifyIndex` - The `JobModifyIndex` of the server side version of this job.
  1632  
  1633  - `FailedTGAllocs` - A set of metrics to understand any allocation failures that
  1634    occurred for the Task Group.
  1635  
  1636  - `Annotations` - Annotations include the `DesiredTGUpdates`, which tracks what
  1637  - the scheduler would do given enough resources for each Task Group.
  1638  
  1639  
  1640  ## Force New Periodic Instance
  1641  
  1642  This endpoint forces a new instance of the periodic job. A new instance will be
  1643  created even if it violates the job's
  1644  [`prohibit_overlap`](/docs/job-specification/periodic.html#prohibit_overlap)
  1645  settings. As such, this should be only used to immediately run a periodic job.
  1646  
  1647  | Method  | Path                             | Produces                   |
  1648  | ------- | -------------------------------- | -------------------------- |
  1649  | `POST`  | `/v1/job/:job_id/periodic/force` | `application/json`         |
  1650  
  1651  The table below shows this endpoint's support for
  1652  [blocking queries](/api/index.html#blocking-queries) and
  1653  [required ACLs](/api/index.html#acls).
  1654  
  1655  | Blocking Queries | ACL Required           |
  1656  | ---------------- | ---------------------- |
  1657  | `NO`             | `namespace:submit-job` |
  1658  
  1659  ### Parameters
  1660  
  1661  - `:job_id` `(string: <required>)` - Specifies the ID of the job (as specified in
  1662    the job file during submission). This is specified as part of the path.
  1663  
  1664  ### Sample Request
  1665  
  1666  ```text
  1667  $ curl \
  1668      --request POST \
  1669      https://localhost:4646/v1/job/my-job/periodic/force
  1670  ```
  1671  
  1672  ### Sample Response
  1673  
  1674  ```json
  1675  {
  1676    "EvalCreateIndex": 7,
  1677    "EvalID": "57983ddd-7fcf-3e3a-fd24-f699ccfb36f4"
  1678  }
  1679  ```
  1680  
  1681  ## Stop a Job
  1682  
  1683  This endpoint deregisters a job, and stops all allocations part of it.
  1684  
  1685  | Method   | Path                       | Produces                   |
  1686  | -------- | -------------------------- | -------------------------- |
  1687  | `DELETE` | `/v1/job/:job_id`          | `application/json`         |
  1688  
  1689  The table below shows this endpoint's support for
  1690  [blocking queries](/api/index.html#blocking-queries) and
  1691  [required ACLs](/api/index.html#acls).
  1692  
  1693  | Blocking Queries | ACL Required                 |
  1694  | ---------------- | ---------------------------- |
  1695  | `NO`             | `namespace:submit-job`       |
  1696  
  1697  ### Parameters
  1698  
  1699  - `:job_id` `(string: <required>)` - Specifies the ID of the job (as specified in
  1700    the job file during submission). This is specified as part of the path.
  1701  
  1702  - `Purge` `(bool: false)` - Specifies that the job should stopped and purged
  1703    immediately. This means the job will not be queryable after being stopped. If
  1704    not set, the job will be purged by the garbage collector.
  1705  
  1706  ### Sample Request
  1707  
  1708  ```text
  1709  $ curl \
  1710      --request DELETE \
  1711      https://localhost:4646/v1/job/my-job?purge=true
  1712  ```
  1713  
  1714  ### Sample Response
  1715  
  1716  ```json
  1717  {
  1718    "EvalID": "d092fdc0-e1fd-2536-67d8-43af8ca798ac",
  1719    "EvalCreateIndex": 35,
  1720    "JobModifyIndex": 34,
  1721  }
  1722  ```