Metronome REST API documentation version 0.1
http://localhost:9000
/v1/jobs
Get the list of all jobs.
Create a new job.
get /v1/jobs
Get the list of all jobs.
Query Parameters
- embed: (one of activeRuns, schedules, history, historySummary - repeat: true)
Embeds nested resources that match the supplied path. You can specify this parameter multiple times with different values.
activeRuns
embed all current active runs of this jobschedules
embed all schedules assigned to this jobhistory
embed history information, attached to this jobhistorySummary
embed history summary information, attached to this job
Example:
activeRuns
HTTP status code 200
The list of jobs.
Body
Type: application/json
Example:
[
{
"description": "Send summary every day",
"id": "prod.email.summary",
"labels": {},
"run": {
"artifacts": [],
"cmd": "sendSummary",
"cpus": 0.1,
"disk": 0,
"env": {},
"maxLaunchDelay": 3600,
"mem": 32,
"placement": {
"constraints": []
},
"restart": {
"activeDeadlineSeconds": 120,
"policy": "NEVER"
},
"volumes": []
}
},
{
"description": "DB cleaner",
"id": "cleanDb --force",
"labels": {},
"run": {
"artifacts": [],
"cmd": "false",
"cpus": 0.1,
"disk": 0,
"env": {},
"maxLaunchDelay": 3600,
"mem": 32,
"placement": {
"constraints": []
},
"restart": {
"activeDeadlineSeconds": 120,
"policy": "NEVER"
},
"volumes": []
}
}
]
HTTP status code 401
Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.
Body
Type: application/json
Example:
{ "message": "Invalid username or password." }
HTTP status code 403
Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to perform that action.
Body
Type: application/json
Example:
{ "message": "Not Authorized to perform this action!" }
post /v1/jobs
Create a new job.
Body
Type: application/json
Schema:
{
"$schema": "http://json-schema.org/schema#",
"definitions": {
"pathType": {
"type": "string",
"pattern": "^([a-z0-9]([a-z0-9-]*[a-z0-9]+)*)([.][a-z0-9]([a-z0-9-]*[a-z0-9]+)*)*$",
"minLength": 1
}
},
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"$ref": "#/definitions/pathType",
"description": "Unique identifier for the job consisting of a series of names separated by dots. Each name must be at least 1 character and may only contain digits (`0-9`), dashes (`-`), and lowercase letters (`a-z`). The name may not begin or end with a dash."
},
"description": {
"type": "string",
"description": "A description of this job."
},
"labels": {
"type": "object",
"description": "Attaching metadata to jobs can be useful to expose additional information to other services, so we added the ability to place labels on jobs (for example, you could label jobs staging and production to mark services by their position in the pipeline).",
"additionalProperties": {
"type": "string"
}
},
"run": {
"type": "object",
"additionalProperties": false,
"description": "A run specification",
"properties": {
"args": {
"items": {
"type": "string"
},
"type": "array",
"description": "An array of strings that represents an alternative mode of specifying the command to run. This was motivated by safe usage of containerizer features like a custom Docker ENTRYPOINT. Either `cmd` or `args` must be supplied. It is invalid to supply both `cmd` and `args` in the same job."
},
"artifacts": {
"type": "array",
"description": "Provided URIs are passed to Mesos fetcher module and resolved in runtime.",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"uri": {
"type": "string",
"description": "URI to be fetched by Mesos fetcher module"
},
"executable": {
"type": "boolean",
"description": "Set fetched artifact as executable"
},
"extract": {
"type": "boolean",
"description": "Extract fetched artifact if supported by Mesos fetcher module"
},
"cache": {
"type": "boolean",
"description": "Cache fetched artifact if supported by Mesos fetcher module"
}
},
"required": [ "uri" ]
}
},
"cmd": {
"description": "The command that is executed. This value is wrapped by Mesos via `/bin/sh -c ${job.cmd}`. Either `cmd` or `args` must be supplied. It is invalid to supply both `cmd` and `args` in the same job.",
"type": "string",
"minLength": 1
},
"cpus": {
"type": "number",
"description": "The number of CPU shares this job needs per instance. This number does not have to be integer, but can be a fraction.",
"minimum": 0.01
},
"disk": {
"type": "number",
"description": "How much disk space is needed for this job. This number does not have to be an integer, but can be a fraction.",
"minimum": 0
},
"docker": {
"type": "object",
"additionalProperties": false,
"properties": {
"image": {
"type": "string",
"documentation": "The docker repository image name."
}
},
"required": ["image"]
},
"env": {
"type": "object",
"patternProperties": {
".*": {
"oneOf": [
{ "type": "string" }
]
}
}
},
"maxLaunchDelay": {
"type": "integer",
"minimum": 1,
"description": "The number of seconds until the job needs to be running. If the deadline is reached without successfully running the job, the job is aborted."
},
"mem": {
"type": "number",
"description": "The amount of memory in MB that is needed for the job per instance.",
"minimum": 32
},
"placement": {
"type": "object",
"additionalProperties": false,
"properties": {
"constraints": {
"type": "array",
"description": "The array of constraints to place this job.",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"attribute": {
"type": "string",
"description": "The attribute name for this constraint."
},
"operator": {
"type": "string",
"description": "The operator for this constraint.",
"enum": ["EQ", "LIKE", "UNLIKE"]
},
"value": {
"type": "string",
"description": "The value for this constraint."
}
},
"required": ["attribute", "operator"]
}
}
}
},
"user": {
"type": "string",
"description": "The user to use to run the tasks on the agent."
},
"restart": {
"type": "object",
"additionalProperties": false,
"documentation": "Defines the behavior if a task fails",
"properties": {
"policy": {
"type": "string",
"documentation": "The policy to use if a job fails. NEVER will never try to relaunch a job. ON_FAILURE will try to start a job in case of failure.",
"enum": ["NEVER", "ON_FAILURE"]
},
"activeDeadlineSeconds": {
"type": "integer",
"documentation": "If the job fails, how long should we try to restart the job. If no value is set, this means forever."
}
},
"required": ["policy"]
},
"volumes": {
"type": "array",
"documentation": "The list of volumes for this job.",
"items": {
"type": "object",
"additionalProperties": false,
"documentation": "A volume definition for this job.",
"properties": {
"containerPath": {
"type": "string",
"description": "The path of the volume in the container",
"minLength": 1,
"pattern": "^/[^/].*$"
},
"hostPath": {
"type": "string",
"description": "The path of the volume on the host",
"minLength": 1
},
"mode": {
"type": "string",
"description": "Possible values are RO for ReadOnly and RW for Read/Write",
"enum": ["RO", "RW"]
}
},
"required": ["containerPath", "hostPath", "mode"]
}
}
},
"required": ["cpus", "mem", "disk"]
}
},
"required": ["id", "run"]
}
Example:
{
"description": "Example Application",
"id": "prod.example.app",
"labels": {
"location": "olympus",
"owner": "zeus"
},
"run": {
"artifacts": [
{
"uri": "http://foo.example.com/application.zip",
"extract": true,
"executable": true,
"cache": false
}
],
"cmd": "nuke --dry --master local",
"cpus": 1.5,
"mem": 32,
"disk": 128,
"docker": {
"image": "foo/bla:test"
},
"env": {
"MON": "test",
"CONNECT": "direct"
},
"maxLaunchDelay": 3600,
"placement": {
"constraints": [
{
"attribute": "rack",
"operator": "EQ",
"value": "rack-2"
}
]
},
"restart": {
"activeDeadlineSeconds": 120,
"policy": "NEVER"
},
"user": "root",
"volumes": [
{
"containerPath": "/mnt/test",
"hostPath": "/etc/guest",
"mode": "RW"
}
]
}
}
HTTP status code 201
The job has been created.
Body
Type: application/json
Example:
{
"description": "Example Application",
"id": "prod.example.app",
"labels": {
"location": "olympus",
"owner": "zeus"
},
"run": {
"artifacts": [
{
"uri": "http://foo.example.com/application.zip",
"extract": true,
"executable": true,
"cache": false
}
],
"cmd": "nuke --dry --master local",
"cpus": 1.5,
"mem": 32,
"disk": 128,
"docker": {
"image": "foo/bla:test"
},
"env": {
"MON": "test",
"CONNECT": "direct"
},
"maxLaunchDelay": 3600,
"placement": {
"constraints": [
{
"attribute": "rack",
"operator": "EQ",
"value": "rack-2"
}
]
},
"restart": {
"activeDeadlineSeconds": 120,
"policy": "NEVER"
},
"user": "root",
"volumes": [
{
"containerPath": "/mnt/test",
"hostPath": "/etc/guest",
"mode": "RW"
}
]
}
}
HTTP status code 401
Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.
Body
Type: application/json
Example:
{ "message": "Invalid username or password." }
HTTP status code 403
Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to perform that action.
Body
Type: application/json
Example:
{ "message": "Not Authorized to perform this action!" }
HTTP status code 422
The given entity can not be processed due to validation errors.
Body
Type: application/json
Example:
{
"message": "Object is not valid",
"details": [
{
"path": "/mem",
"errors": [
"is less than than 32"
]
}
]
}
Get the job with id jobId
. You can specify optional embed arguments to get more embedded information.
Update an existing job.
Delete a job. All data about that job will be deleted.
get /v1/jobs/{jobId}
Get the job with id jobId
. You can specify optional embed arguments to get more embedded information.
URI Parameters
- jobId: required (string)
Query Parameters
- embed: (one of activeRuns, schedules, history, historySummary - repeat: true)
Embeds nested resources that match the supplied path. You can specify this parameter multiple times with different values.
activeRuns
embed all current active runs of this jobschedules
embed all schedules assigned to this jobhistorySummary
embed history summary information, attached to this job
Example:
activeRuns
HTTP status code 200
Body
Type: application/json
Example:
{
"description": "Example Application",
"id": "prod.example.app",
"labels": {
"location": "olympus",
"owner": "zeus"
},
"run": {
"artifacts": [
{
"uri": "http://foo.example.com/application.zip",
"extract": true,
"executable": true,
"cache": false
}
],
"cmd": "nuke --dry --master local",
"cpus": 1.5,
"mem": 32,
"disk": 128,
"docker": {
"image": "foo/bla:test"
},
"env": {
"MON": "test",
"CONNECT": "direct"
},
"maxLaunchDelay": 3600,
"placement": {
"constraints": [
{
"attribute": "rack",
"operator": "EQ",
"value": "rack-2"
}
]
},
"restart": {
"activeDeadlineSeconds": 120,
"policy": "NEVER"
},
"user": "root",
"volumes": [
{
"containerPath": "/mnt/test",
"hostPath": "/etc/guest",
"mode": "RW"
}
]
}
}
HTTP status code 401
Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.
Body
Type: application/json
Example:
{ "message": "Invalid username or password." }
HTTP status code 403
Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to perform that action.
Body
Type: application/json
Example:
{ "message": "Not Authorized to perform this action!" }
HTTP status code 404
No job found for given jobId
.
Body
Type: application/json
Example:
{ "message": "Job 'not_existent' does not exist" }
put /v1/jobs/{jobId}
Update an existing job.
URI Parameters
- jobId: required (string)
Body
Type: application/json
Schema:
{
"$schema": "http://json-schema.org/schema#",
"definitions": {
"pathType": {
"type": "string",
"pattern": "^([a-z0-9]([a-z0-9-]*[a-z0-9]+)*)([.][a-z0-9]([a-z0-9-]*[a-z0-9]+)*)*$",
"minLength": 1
}
},
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"$ref": "#/definitions/pathType",
"description": "Unique identifier for the job consisting of a series of names separated by dots. Each name must be at least 1 character and may only contain digits (`0-9`), dashes (`-`), and lowercase letters (`a-z`). The name may not begin or end with a dash."
},
"description": {
"type": "string",
"description": "A description of this job."
},
"labels": {
"type": "object",
"description": "Attaching metadata to jobs can be useful to expose additional information to other services, so we added the ability to place labels on jobs (for example, you could label jobs staging and production to mark services by their position in the pipeline).",
"additionalProperties": {
"type": "string"
}
},
"run": {
"type": "object",
"additionalProperties": false,
"description": "A run specification",
"properties": {
"args": {
"items": {
"type": "string"
},
"type": "array",
"description": "An array of strings that represents an alternative mode of specifying the command to run. This was motivated by safe usage of containerizer features like a custom Docker ENTRYPOINT. Either `cmd` or `args` must be supplied. It is invalid to supply both `cmd` and `args` in the same job."
},
"artifacts": {
"type": "array",
"description": "Provided URIs are passed to Mesos fetcher module and resolved in runtime.",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"uri": {
"type": "string",
"description": "URI to be fetched by Mesos fetcher module"
},
"executable": {
"type": "boolean",
"description": "Set fetched artifact as executable"
},
"extract": {
"type": "boolean",
"description": "Extract fetched artifact if supported by Mesos fetcher module"
},
"cache": {
"type": "boolean",
"description": "Cache fetched artifact if supported by Mesos fetcher module"
}
},
"required": [ "uri" ]
}
},
"cmd": {
"description": "The command that is executed. This value is wrapped by Mesos via `/bin/sh -c ${job.cmd}`. Either `cmd` or `args` must be supplied. It is invalid to supply both `cmd` and `args` in the same job.",
"type": "string",
"minLength": 1
},
"cpus": {
"type": "number",
"description": "The number of CPU shares this job needs per instance. This number does not have to be integer, but can be a fraction.",
"minimum": 0.01
},
"disk": {
"type": "number",
"description": "How much disk space is needed for this job. This number does not have to be an integer, but can be a fraction.",
"minimum": 0
},
"docker": {
"type": "object",
"additionalProperties": false,
"properties": {
"image": {
"type": "string",
"documentation": "The docker repository image name."
}
},
"required": ["image"]
},
"env": {
"type": "object",
"patternProperties": {
".*": {
"oneOf": [
{ "type": "string" }
]
}
}
},
"maxLaunchDelay": {
"type": "integer",
"minimum": 1,
"description": "The number of seconds until the job needs to be running. If the deadline is reached without successfully running the job, the job is aborted."
},
"mem": {
"type": "number",
"description": "The amount of memory in MB that is needed for the job per instance.",
"minimum": 32
},
"placement": {
"type": "object",
"additionalProperties": false,
"properties": {
"constraints": {
"type": "array",
"description": "The array of constraints to place this job.",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"attribute": {
"type": "string",
"description": "The attribute name for this constraint."
},
"operator": {
"type": "string",
"description": "The operator for this constraint.",
"enum": ["EQ", "LIKE", "UNLIKE"]
},
"value": {
"type": "string",
"description": "The value for this constraint."
}
},
"required": ["attribute", "operator"]
}
}
}
},
"user": {
"type": "string",
"description": "The user to use to run the tasks on the agent."
},
"restart": {
"type": "object",
"additionalProperties": false,
"documentation": "Defines the behavior if a task fails",
"properties": {
"policy": {
"type": "string",
"documentation": "The policy to use if a job fails. NEVER will never try to relaunch a job. ON_FAILURE will try to start a job in case of failure.",
"enum": ["NEVER", "ON_FAILURE"]
},
"activeDeadlineSeconds": {
"type": "integer",
"documentation": "If the job fails, how long should we try to restart the job. If no value is set, this means forever."
}
},
"required": ["policy"]
},
"volumes": {
"type": "array",
"documentation": "The list of volumes for this job.",
"items": {
"type": "object",
"additionalProperties": false,
"documentation": "A volume definition for this job.",
"properties": {
"containerPath": {
"type": "string",
"description": "The path of the volume in the container",
"minLength": 1,
"pattern": "^/[^/].*$"
},
"hostPath": {
"type": "string",
"description": "The path of the volume on the host",
"minLength": 1
},
"mode": {
"type": "string",
"description": "Possible values are RO for ReadOnly and RW for Read/Write",
"enum": ["RO", "RW"]
}
},
"required": ["containerPath", "hostPath", "mode"]
}
}
},
"required": ["cpus", "mem", "disk"]
}
},
"required": ["id", "run"]
}
Example:
{
"description": "Example Application",
"id": "prod.example.app",
"labels": {
"location": "olympus",
"owner": "zeus"
},
"run": {
"artifacts": [
{
"uri": "http://foo.example.com/application.zip",
"extract": true,
"executable": true,
"cache": false
}
],
"cmd": "nuke --dry --master local",
"cpus": 1.5,
"mem": 32,
"disk": 128,
"docker": {
"image": "foo/bla:test"
},
"env": {
"MON": "test",
"CONNECT": "direct"
},
"maxLaunchDelay": 3600,
"placement": {
"constraints": [
{
"attribute": "rack",
"operator": "EQ",
"value": "rack-2"
}
]
},
"restart": {
"activeDeadlineSeconds": 120,
"policy": "NEVER"
},
"user": "root",
"volumes": [
{
"containerPath": "/mnt/test",
"hostPath": "/etc/guest",
"mode": "RW"
}
]
}
}
HTTP status code 401
Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.
Body
Type: application/json
Example:
{ "message": "Invalid username or password." }
HTTP status code 403
Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to perform that action.
Body
Type: application/json
Example:
{ "message": "Not Authorized to perform this action!" }
HTTP status code 404
No job found for given jobId
.
Body
Type: application/json
Example:
{ "message": "Job 'not_existent' does not exist" }
HTTP status code 422
The given entity can not be processed due to validation errors.
Body
Type: application/json
Example:
{
"message": "Object is not valid",
"details": [
{
"path": "/mem",
"errors": [
"is less than 32"
]
}
]
}
delete /v1/jobs/{jobId}
Delete a job. All data about that job will be deleted.
URI Parameters
- jobId: required (string)
HTTP status code 401
Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.
Body
Type: application/json
Example:
{ "message": "Invalid username or password." }
HTTP status code 403
Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to perform that action.
Body
Type: application/json
Example:
{ "message": "Not Authorized to perform this action!" }
HTTP status code 404
No job found for given jobId
.
Body
Type: application/json
Example:
{"message":"Job 'not-existing' does not exist"}
Get the list of all schedules for this jobId.
Create a new schedule.
get /v1/jobs/{jobId}/schedules
Get the list of all schedules for this jobId.
URI Parameters
- jobId: required (string)
HTTP status code 200
The list of schedules for this job
Body
Type: application/json
Example:
[
{
"id": "everyminute",
"cron": "* * * * *",
"concurrencyPolicy": "ALLOW",
"enabled": true,
"startingDeadlineSeconds": 60,
"timezone": "America/Chicago"
},
{
"id": "christmas",
"cron": "* * * * *",
"concurrencyPolicy": "ALLOW",
"enabled": true,
"startingDeadlineSeconds": 60,
"timezone": "America/Chicago"
}
]
HTTP status code 401
Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.
Body
Type: application/json
Example:
{ "message": "Invalid username or password." }
HTTP status code 403
Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to perform that action.
Body
Type: application/json
Example:
{ "message": "Not Authorized to perform this action!" }
post /v1/jobs/{jobId}/schedules
Create a new schedule.
URI Parameters
- jobId: required (string)
Body
Type: application/json
Schema:
{
"$schema": "http://json-schema.org/schema#",
"additionalProperties": true,
"definitions": {
"pathType": {
"type": "string",
"pattern": "^([a-z0-9][a-z0-9\\-]*[a-z0-9]+)$",
"minLength": 1
}
},
"type": "object",
"properties": {
"id": {
"$ref": "#/definitions/pathType",
"description": "Unique identifier for the job schedule of a string with at least 1 character and may only contain digits (`0-9`), dashes (`-`), and lowercase letters (`a-z`). The id may not begin or end with a dash."
},
"cron": {
"type": "string",
"description": "Cron based schedule string."
},
"timezone": {
"type": "string",
"description": "IANA based time zone string. See http://www.iana.org/time-zones for a list of available time zones."
},
"startingDeadlineSeconds": {
"type": "integer",
"minimum": 1,
"description": "The number of seconds until the job is still considered valid to start."
},
"concurrencyPolicy": {
"type": "string",
"enum": ["ALLOW"],
"description": "Defines the behavior if a job is started, before the current job has finished. ALLOW will launch a new job, even if there is an existing run."
},
"enabled": {
"type": "boolean",
"description": "Defines if the schedule is enabled or not."
}
},
"required": [
"id", "cron"
]
}
Example:
{
"id": "everyminute",
"cron": "* * * * *",
"concurrencyPolicy": "ALLOW",
"enabled": true,
"startingDeadlineSeconds": 60,
"timezone": "America/Chicago"
}
HTTP status code 201
The schedule has been created.
Body
Type: application/json
Example:
{
"id": "everyminute",
"cron": "* * * * *",
"concurrencyPolicy": "ALLOW",
"enabled": true,
"startingDeadlineSeconds": 60,
"timezone": "America/Chicago"
}
HTTP status code 401
Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.
Body
Type: application/json
Example:
{ "message": "Invalid username or password." }
HTTP status code 403
Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to perform that action.
Body
Type: application/json
Example:
{ "message": "Not Authorized to perform this action!" }
HTTP status code 422
The given entity can not be processed due to validation errors.
Body
Type: application/json
Example:
{
"message": "Object is not valid",
"details": [
{
"path": "/mem",
"errors": [
"is less than than 32"
]
}
]
}
Get the schedule for job jobId
with schedule scheduleId
.
Replaces an existing schedule.
Destroy a schedule.
get /v1/jobs/{jobId}/schedules/{scheduleId}
Get the schedule for job jobId
with schedule scheduleId
.
URI Parameters
- jobId: required (string)
- scheduleId: required (string)
HTTP status code 200
Body
Type: application/json
Schema:
{
"$schema": "http://json-schema.org/schema#",
"additionalProperties": true,
"definitions": {
"pathType": {
"type": "string",
"pattern": "^([a-z0-9][a-z0-9\\-]*[a-z0-9]+)$",
"minLength": 1
}
},
"type": "object",
"properties": {
"id": {
"$ref": "#/definitions/pathType",
"description": "Unique identifier for the job schedule of a string with at least 1 character and may only contain digits (`0-9`), dashes (`-`), and lowercase letters (`a-z`). The id may not begin or end with a dash."
},
"cron": {
"type": "string",
"description": "Cron based schedule string."
},
"timezone": {
"type": "string",
"description": "IANA based time zone string. See http://www.iana.org/time-zones for a list of available time zones."
},
"startingDeadlineSeconds": {
"type": "integer",
"minimum": 1,
"description": "The number of seconds until the job is still considered valid to start."
},
"concurrencyPolicy": {
"type": "string",
"enum": ["ALLOW"],
"description": "Defines the behavior if a job is started, before the current job has finished. ALLOW will launch a new job, even if there is an existing run."
},
"enabled": {
"type": "boolean",
"description": "Defines if the schedule is enabled or not."
}
},
"required": [
"id", "cron"
]
}
Example:
{
"id": "everyminute",
"cron": "* * * * *",
"concurrencyPolicy": "ALLOW",
"enabled": true,
"startingDeadlineSeconds": 60,
"timezone": "America/Chicago"
}
HTTP status code 401
Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.
Body
Type: application/json
Example:
{ "message": "Invalid username or password." }
HTTP status code 403
Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to perform that action.
Body
Type: application/json
Example:
{ "message": "Not Authorized to perform this action!" }
HTTP status code 404
No schedule found for givenscheduleId
.
Body
Type: application/json
Example:
{ "message": "Schedule 'not_existent' does not exist" }
put /v1/jobs/{jobId}/schedules/{scheduleId}
Replaces an existing schedule.
URI Parameters
- jobId: required (string)
- scheduleId: required (string)
Body
Type: application/json
Schema:
{
"$schema": "http://json-schema.org/schema#",
"additionalProperties": true,
"definitions": {
"pathType": {
"type": "string",
"pattern": "^([a-z0-9][a-z0-9\\-]*[a-z0-9]+)$",
"minLength": 1
}
},
"type": "object",
"properties": {
"id": {
"$ref": "#/definitions/pathType",
"description": "Unique identifier for the job schedule of a string with at least 1 character and may only contain digits (`0-9`), dashes (`-`), and lowercase letters (`a-z`). The id may not begin or end with a dash."
},
"cron": {
"type": "string",
"description": "Cron based schedule string."
},
"timezone": {
"type": "string",
"description": "IANA based time zone string. See http://www.iana.org/time-zones for a list of available time zones."
},
"startingDeadlineSeconds": {
"type": "integer",
"minimum": 1,
"description": "The number of seconds until the job is still considered valid to start."
},
"concurrencyPolicy": {
"type": "string",
"enum": ["ALLOW"],
"description": "Defines the behavior if a job is started, before the current job has finished. ALLOW will launch a new job, even if there is an existing run."
},
"enabled": {
"type": "boolean",
"description": "Defines if the schedule is enabled or not."
}
},
"required": [
"id", "cron"
]
}
Example:
{
"id": "everyminute",
"cron": "* * * * *",
"concurrencyPolicy": "ALLOW",
"enabled": true,
"startingDeadlineSeconds": 60,
"timezone": "America/Chicago"
}
HTTP status code 401
Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.
Body
Type: application/json
Example:
{ "message": "Invalid username or password." }
HTTP status code 403
Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to perform that action.
Body
Type: application/json
Example:
{ "message": "Not Authorized to perform this action!" }
HTTP status code 404
No schedule found with this scheduleId
.
Body
Type: application/json
Example:
{ "message": "Schedule 'not_existent' does not exist" }
HTTP status code 422
The given entity can not be processed due to validation errors.
Body
Type: application/json
Example:
{
"message": "Object is not valid",
"details": [
{
"path": "/mem",
"errors": [
"is less than 32"
]
}
]
}
delete /v1/jobs/{jobId}/schedules/{scheduleId}
Destroy a schedule.
URI Parameters
- jobId: required (string)
- scheduleId: required (string)
HTTP status code 401
Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.
Body
Type: application/json
Example:
{ "message": "Invalid username or password." }
HTTP status code 403
Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to perform that action.
Body
Type: application/json
Example:
{ "message": "Not Authorized to perform this action!" }
HTTP status code 404
No schedule found for given id
.
Body
Type: application/json
Example:
{"message":"Schedule 'not-existing' does not exist"}
Get the list of all runs for this jobId.
Trigger a new job run
get /v1/jobs/{jobId}/runs
Get the list of all runs for this jobId.
URI Parameters
- jobId: required (string)
HTTP status code 200
The list of runs for this job
Body
Type: application/json
Example:
[
{
"completedAt": null,
"createdAt": "2016-07-15T13:02:59.735+0000",
"id": "20160715130259A34HX",
"jobId": "prod",
"status": "STARTING",
"tasks": []
},
{
"completedAt": null,
"createdAt": "2016-07-12T08:11:59.966+0000",
"id": "20160712081159ORxez",
"jobId": "prod",
"status": "STARTING",
"tasks": []
},
{
"completedAt": null,
"createdAt": "2016-07-12T08:10:59.947+0000",
"id": "20160712081059ergsi",
"jobId": "prod",
"status": "STARTING",
"tasks": []
},
{
"completedAt": null,
"createdAt": "2016-07-12T08:17:59.562+0000",
"id": "20160712081759HIjWP",
"jobId": "prod",
"status": "STARTING",
"tasks": []
}
]
HTTP status code 401
Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.
Body
Type: application/json
Example:
{ "message": "Invalid username or password." }
HTTP status code 403
Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to perform that action.
Body
Type: application/json
Example:
{ "message": "Not Authorized to perform this action!" }
post /v1/jobs/{jobId}/runs
Trigger a new job run
URI Parameters
- jobId: required (string)
HTTP status code 201
The job run has been created.
Body
Type: application/json
Example:
{
"completedAt": null,
"createdAt": "2016-07-15T13:02:59.735+0000",
"id": "20160715130259A34HX",
"jobId": "prod",
"status": "STARTING",
"tasks": []
}
HTTP status code 401
Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.
Body
Type: application/json
Example:
{ "message": "Invalid username or password." }
HTTP status code 403
Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to perform that action.
Body
Type: application/json
Example:
{ "message": "Not Authorized to perform this action!" }
Get the job run for job jobId
with id runId
.
get /v1/jobs/{jobId}/runs/{runId}
Get the job run for job jobId
with id runId
.
URI Parameters
- jobId: required (string)
- runId: required (string)
HTTP status code 200
Body
Type: application/json
Example:
{
"completedAt": null,
"createdAt": "2016-07-15T13:02:59.735+0000",
"id": "20160715130259A34HX",
"jobId": "prod",
"status": "STARTING",
"tasks": []
}
HTTP status code 401
Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.
Body
Type: application/json
Example:
{ "message": "Invalid username or password." }
HTTP status code 403
Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to perform that action.
Body
Type: application/json
Example:
{ "message": "Not Authorized to perform this action!" }
HTTP status code 404
No run found for given runId
.
Body
Type: application/json
Example:
{ "message": "JobRun 'not_existent' does not exist" }
Stop an existing job run
post /v1/jobs/{jobId}/runs/{runId}/actions/stop
Stop an existing job run
URI Parameters
- jobId: required (string)
- runId: required (string)
HTTP status code 401
Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.
Body
Type: application/json
Example:
{ "message": "Invalid username or password." }
HTTP status code 403
Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to perform that action.
Body
Type: application/json
Example:
{ "message": "Not Authorized to perform this action!" }
HTTP status code 404
No run found for givenrunId
.
Body
Type: application/json
Example:
{"message":"JobRun 'not-existing' does not exist"}
/v1/metrics
Get metrics data from this Metronome instance
get /v1/metrics
Get metrics data from this Metronome instance
HTTP status code 200
All aggregated runtime metrics for this Metronome instance.
Body
Type: application/json
Example:
{
"counters": {
"name.of.counter": {
"count": 1
}
},
"gauges": {
"name.of.gauge": {
"value": 7248
}
},
"histograms": {
"name.of.histogram": {
"count": 0,
"max": 0,
"mean": 0.0,
"min": 0,
"p50": 0.0,
"p75": 0.0,
"p95": 0.0,
"p98": 0.0,
"p99": 0.0,
"p999": 0.0,
"stddev": 0.0
}
},
"meters": {
"name.of.meter": {
"count": 0,
"m15_rate": 0.0,
"m1_rate": 0.0,
"m5_rate": 0.0,
"mean_rate": 0.0,
"units": "events/second"
}
},
"timers": {
"name.of.timer": {
"count": 1,
"duration_units": "seconds",
"m15_rate": 0.2,
"m1_rate": 0.2,
"m5_rate": 0.2,
"max": 0.0021718640000000003,
"mean": 0.0021718640000000003,
"mean_rate": 0.13897812037014803,
"min": 0.0021718640000000003,
"p50": 0.0021718640000000003,
"p75": 0.0021718640000000003,
"p95": 0.0021718640000000003,
"p98": 0.0021718640000000003,
"p99": 0.0021718640000000003,
"p999": 0.0021718640000000003,
"rate_units": "calls/second",
"stddev": 0.0
}
},
"version": "3.0.0"
}
/v0/scheduled-jobs
Create a new job together with schedules.
post /v0/scheduled-jobs
Create a new job together with schedules.
Body
Type: application/json
Schema:
{
"$schema": "http://json-schema.org/schema#",
"definitions": {
"pathType": {
"type": "string",
"pattern": "^([a-z0-9]([a-z0-9-]*[a-z0-9]+)*)([.][a-z0-9]([a-z0-9-]*[a-z0-9]+)*)*$",
"minLength": 1
}
},
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"$ref": "#/definitions/pathType",
"description": "Unique identifier for the job consisting of a series of names separated by dots. Each name must be at least 1 character and may only contain digits (`0-9`), dashes (`-`), and lowercase letters (`a-z`). The name may not begin or end with a dash."
},
"description": {
"type": "string",
"description": "A description of this job."
},
"labels": {
"type": "object",
"description": "Attaching metadata to jobs can be useful to expose additional information to other services, so we added the ability to place labels on jobs (for example, you could label jobs staging and production to mark services by their position in the pipeline).",
"additionalProperties": {
"type": "string"
}
},
"run": {
"type": "object",
"additionalProperties": false,
"description": "A run specification",
"properties": {
"args": {
"items": {
"type": "string"
},
"type": "array",
"description": "An array of strings that represents an alternative mode of specifying the command to run. This was motivated by safe usage of containerizer features like a custom Docker ENTRYPOINT. Either `cmd` or `args` must be supplied. It is invalid to supply both `cmd` and `args` in the same job."
},
"artifacts": {
"type": "array",
"description": "Provided URIs are passed to Mesos fetcher module and resolved in runtime.",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"uri": {
"type": "string",
"description": "URI to be fetched by Mesos fetcher module"
},
"executable": {
"type": "boolean",
"description": "Set fetched artifact as executable"
},
"extract": {
"type": "boolean",
"description": "Extract fetched artifact if supported by Mesos fetcher module"
},
"cache": {
"type": "boolean",
"description": "Cache fetched artifact if supported by Mesos fetcher module"
}
},
"required": [ "uri" ]
}
},
"cmd": {
"description": "The command that is executed. This value is wrapped by Mesos via `/bin/sh -c ${job.cmd}`. Either `cmd` or `args` must be supplied. It is invalid to supply both `cmd` and `args` in the same job.",
"type": "string",
"minLength": 1
},
"cpus": {
"type": "number",
"description": "The number of CPU shares this job needs per instance. This number does not have to be integer, but can be a fraction.",
"minimum": 0.01
},
"disk": {
"type": "number",
"description": "How much disk space is needed for this job. This number does not have to be an integer, but can be a fraction.",
"minimum": 0
},
"docker": {
"type": "object",
"additionalProperties": false,
"properties": {
"image": {
"type": "string",
"documentation": "The docker repository image name."
}
},
"required": ["image"]
},
"env": {
"type": "object",
"patternProperties": {
".*": {
"oneOf": [
{ "type": "string" }
]
}
}
},
"maxLaunchDelay": {
"type": "integer",
"minimum": 1,
"description": "The number of seconds until the job needs to be running. If the deadline is reached without successfully running the job, the job is aborted."
},
"mem": {
"type": "number",
"description": "The amount of memory in MB that is needed for the job per instance.",
"minimum": 32
},
"placement": {
"type": "object",
"additionalProperties": false,
"properties": {
"constraints": {
"type": "array",
"description": "The array of constraints to place this job.",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"attribute": {
"type": "string",
"description": "The attribute name for this constraint."
},
"operator": {
"type": "string",
"description": "The operator for this constraint.",
"enum": ["EQ", "LIKE", "UNLIKE"]
},
"value": {
"type": "string",
"description": "The value for this constraint."
}
},
"required": ["attribute", "operator"]
}
}
}
},
"user": {
"type": "string",
"description": "The user to use to run the tasks on the agent."
},
"restart": {
"type": "object",
"additionalProperties": false,
"documentation": "Defines the behavior if a task fails",
"properties": {
"policy": {
"type": "string",
"documentation": "The policy to use if a job fails. NEVER will never try to relaunch a job. ON_FAILURE will try to start a job in case of failure.",
"enum": ["NEVER", "ON_FAILURE"]
},
"activeDeadlineSeconds": {
"type": "integer",
"documentation": "If the job fails, how long should we try to restart the job. If no value is set, this means forever."
}
},
"required": ["policy"]
},
"volumes": {
"type": "array",
"documentation": "The list of volumes for this job.",
"items": {
"type": "object",
"additionalProperties": false,
"documentation": "A volume definition for this job.",
"properties": {
"containerPath": {
"type": "string",
"description": "The path of the volume in the container",
"minLength": 1
},
"hostPath": {
"type": "string",
"description": "The path of the volume on the host",
"minLength": 1
},
"mode": {
"type": "string",
"description": "Possible values are RO for ReadOnly and RW for Read/Write",
"enum": ["RO", "RW"]
}
},
"required": ["containerPath", "hostPath", "mode"]
}
}
},
"required": ["cpus", "mem", "disk"]
},
"schedules": {
"type": "array",
"description": "All schedules for this job.",
"items": {
"type": "object",
"properties": {
"id": {
"$ref": "#/definitions/pathType",
"description": "Unique identifier for the job schedule of a string with at least 1 character and may only contain digits (`0-9`), dashes (`-`), and lowercase letters (`a-z`). The id may not begin or end with a dash."
},
"cron": {
"type": "string",
"description": "Cron based schedule string."
},
"timezone": {
"type": "string",
"description": "IANA based time zone string. See http://www.iana.org/time-zones for a list of available time zones."
},
"startingDeadlineSeconds": {
"type": "integer",
"minimum": 1,
"description": "The number of seconds until the job is still considered valid to start."
},
"concurrencyPolicy": {
"type": "string",
"enum": [
"ALLOW"
],
"description": "Defines the behavior if a job is started, before the current job has finished. ALLOW will launch a new job, even if there is an existing run."
},
"enabled": {
"type": "boolean",
"description": "Defines if the schedule is enabled or not."
}
},
"required": [
"id",
"cron"
]
}
}
},
"required": ["id", "run"]
}
Example:
{
"description": "Example Application",
"id": "prod.example.app",
"labels": {
"location": "olympus",
"owner": "zeus"
},
"schedules": [
{
"id": "sleep-nightly",
"enabled": true,
"cron": "20 0 * * *",
"concurrencyPolicy": "ALLOW"
}
],
"run": {
"artifacts": [
{
"uri": "http://foo.example.com/application.zip",
"extract": true,
"executable": true,
"cache": false
}
],
"cmd": "nuke --dry --master local",
"cpus": 1.5,
"mem": 32,
"disk": 128,
"docker": {
"image": "foo/bla:test"
},
"env": {
"MON": "test",
"CONNECT": "direct"
},
"maxLaunchDelay": 3600,
"placement": {
"constraints": [
{
"attribute": "rack",
"operator": "EQ",
"value": "rack-2"
}
]
},
"restart": {
"activeDeadlineSeconds": 120,
"policy": "NEVER"
},
"user": "root",
"volumes": [
{
"containerPath": "/mnt/test",
"hostPath": "/etc/guest",
"mode": "RW"
}
]
}
}
HTTP status code 201
The job has been created.
Body
Type: application/json
Example:
{
"description": "Example Application",
"id": "prod.example.app",
"labels": {
"location": "olympus",
"owner": "zeus"
},
"schedules": [
{
"id": "sleep-nightly",
"enabled": true,
"cron": "20 0 * * *",
"concurrencyPolicy": "ALLOW"
}
],
"run": {
"artifacts": [
{
"uri": "http://foo.example.com/application.zip",
"extract": true,
"executable": true,
"cache": false
}
],
"cmd": "nuke --dry --master local",
"cpus": 1.5,
"mem": 32,
"disk": 128,
"docker": {
"image": "foo/bla:test"
},
"env": {
"MON": "test",
"CONNECT": "direct"
},
"maxLaunchDelay": 3600,
"placement": {
"constraints": [
{
"attribute": "rack",
"operator": "EQ",
"value": "rack-2"
}
]
},
"restart": {
"activeDeadlineSeconds": 120,
"policy": "NEVER"
},
"user": "root",
"volumes": [
{
"containerPath": "/mnt/test",
"hostPath": "/etc/guest",
"mode": "RW"
}
]
}
}
HTTP status code 401
Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.
Body
Type: application/json
Example:
{ "message": "Invalid username or password." }
HTTP status code 403
Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to perform that action.
Body
Type: application/json
Example:
{ "message": "Not Authorized to perform this action!" }
HTTP status code 422
The given entity can not be processed due to validation errors.
Body
Type: application/json
Example:
{
"message": "Object is not valid",
"details": [
{
"path": "/mem",
"errors": [
"is less than than 32"
]
}
]
}
Update an existing job together with all schedules. If you want to update the job without changing the schedules, use the /v1/jobs endpoint.
put /v0/scheduled-jobs/{jobId}
Update an existing job together with all schedules. If you want to update the job without changing the schedules, use the /v1/jobs endpoint.
URI Parameters
- jobId: required (string)
Body
Type: application/json
Schema:
{
"$schema": "http://json-schema.org/schema#",
"definitions": {
"pathType": {
"type": "string",
"pattern": "^([a-z0-9]([a-z0-9-]*[a-z0-9]+)*)([.][a-z0-9]([a-z0-9-]*[a-z0-9]+)*)*$",
"minLength": 1
}
},
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"$ref": "#/definitions/pathType",
"description": "Unique identifier for the job consisting of a series of names separated by dots. Each name must be at least 1 character and may only contain digits (`0-9`), dashes (`-`), and lowercase letters (`a-z`). The name may not begin or end with a dash."
},
"description": {
"type": "string",
"description": "A description of this job."
},
"labels": {
"type": "object",
"description": "Attaching metadata to jobs can be useful to expose additional information to other services, so we added the ability to place labels on jobs (for example, you could label jobs staging and production to mark services by their position in the pipeline).",
"additionalProperties": {
"type": "string"
}
},
"run": {
"type": "object",
"additionalProperties": false,
"description": "A run specification",
"properties": {
"args": {
"items": {
"type": "string"
},
"type": "array",
"description": "An array of strings that represents an alternative mode of specifying the command to run. This was motivated by safe usage of containerizer features like a custom Docker ENTRYPOINT. Either `cmd` or `args` must be supplied. It is invalid to supply both `cmd` and `args` in the same job."
},
"artifacts": {
"type": "array",
"description": "Provided URIs are passed to Mesos fetcher module and resolved in runtime.",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"uri": {
"type": "string",
"description": "URI to be fetched by Mesos fetcher module"
},
"executable": {
"type": "boolean",
"description": "Set fetched artifact as executable"
},
"extract": {
"type": "boolean",
"description": "Extract fetched artifact if supported by Mesos fetcher module"
},
"cache": {
"type": "boolean",
"description": "Cache fetched artifact if supported by Mesos fetcher module"
}
},
"required": [ "uri" ]
}
},
"cmd": {
"description": "The command that is executed. This value is wrapped by Mesos via `/bin/sh -c ${job.cmd}`. Either `cmd` or `args` must be supplied. It is invalid to supply both `cmd` and `args` in the same job.",
"type": "string",
"minLength": 1
},
"cpus": {
"type": "number",
"description": "The number of CPU shares this job needs per instance. This number does not have to be integer, but can be a fraction.",
"minimum": 0.01
},
"disk": {
"type": "number",
"description": "How much disk space is needed for this job. This number does not have to be an integer, but can be a fraction.",
"minimum": 0
},
"docker": {
"type": "object",
"additionalProperties": false,
"properties": {
"image": {
"type": "string",
"documentation": "The docker repository image name."
}
},
"required": ["image"]
},
"env": {
"type": "object",
"patternProperties": {
".*": {
"oneOf": [
{ "type": "string" }
]
}
}
},
"maxLaunchDelay": {
"type": "integer",
"minimum": 1,
"description": "The number of seconds until the job needs to be running. If the deadline is reached without successfully running the job, the job is aborted."
},
"mem": {
"type": "number",
"description": "The amount of memory in MB that is needed for the job per instance.",
"minimum": 32
},
"placement": {
"type": "object",
"additionalProperties": false,
"properties": {
"constraints": {
"type": "array",
"description": "The array of constraints to place this job.",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"attribute": {
"type": "string",
"description": "The attribute name for this constraint."
},
"operator": {
"type": "string",
"description": "The operator for this constraint.",
"enum": ["EQ", "LIKE", "UNLIKE"]
},
"value": {
"type": "string",
"description": "The value for this constraint."
}
},
"required": ["attribute", "operator"]
}
}
}
},
"user": {
"type": "string",
"description": "The user to use to run the tasks on the agent."
},
"restart": {
"type": "object",
"additionalProperties": false,
"documentation": "Defines the behavior if a task fails",
"properties": {
"policy": {
"type": "string",
"documentation": "The policy to use if a job fails. NEVER will never try to relaunch a job. ON_FAILURE will try to start a job in case of failure.",
"enum": ["NEVER", "ON_FAILURE"]
},
"activeDeadlineSeconds": {
"type": "integer",
"documentation": "If the job fails, how long should we try to restart the job. If no value is set, this means forever."
}
},
"required": ["policy"]
},
"volumes": {
"type": "array",
"documentation": "The list of volumes for this job.",
"items": {
"type": "object",
"additionalProperties": false,
"documentation": "A volume definition for this job.",
"properties": {
"containerPath": {
"type": "string",
"description": "The path of the volume in the container",
"minLength": 1
},
"hostPath": {
"type": "string",
"description": "The path of the volume on the host",
"minLength": 1
},
"mode": {
"type": "string",
"description": "Possible values are RO for ReadOnly and RW for Read/Write",
"enum": ["RO", "RW"]
}
},
"required": ["containerPath", "hostPath", "mode"]
}
}
},
"required": ["cpus", "mem", "disk"]
},
"schedules": {
"type": "array",
"description": "All schedules for this job.",
"items": {
"type": "object",
"properties": {
"id": {
"$ref": "#/definitions/pathType",
"description": "Unique identifier for the job schedule of a string with at least 1 character and may only contain digits (`0-9`), dashes (`-`), and lowercase letters (`a-z`). The id may not begin or end with a dash."
},
"cron": {
"type": "string",
"description": "Cron based schedule string."
},
"timezone": {
"type": "string",
"description": "IANA based time zone string. See http://www.iana.org/time-zones for a list of available time zones."
},
"startingDeadlineSeconds": {
"type": "integer",
"minimum": 1,
"description": "The number of seconds until the job is still considered valid to start."
},
"concurrencyPolicy": {
"type": "string",
"enum": [
"ALLOW"
],
"description": "Defines the behavior if a job is started, before the current job has finished. ALLOW will launch a new job, even if there is an existing run."
},
"enabled": {
"type": "boolean",
"description": "Defines if the schedule is enabled or not."
}
},
"required": [
"id",
"cron"
]
}
}
},
"required": ["id", "run"]
}
Example:
{
"description": "Example Application",
"id": "prod.example.app",
"labels": {
"location": "olympus",
"owner": "zeus"
},
"schedules": [
{
"id": "sleep-nightly",
"enabled": true,
"cron": "20 0 * * *",
"concurrencyPolicy": "ALLOW"
}
],
"run": {
"artifacts": [
{
"uri": "http://foo.example.com/application.zip",
"extract": true,
"executable": true,
"cache": false
}
],
"cmd": "nuke --dry --master local",
"cpus": 1.5,
"mem": 32,
"disk": 128,
"docker": {
"image": "foo/bla:test"
},
"env": {
"MON": "test",
"CONNECT": "direct"
},
"maxLaunchDelay": 3600,
"placement": {
"constraints": [
{
"attribute": "rack",
"operator": "EQ",
"value": "rack-2"
}
]
},
"restart": {
"activeDeadlineSeconds": 120,
"policy": "NEVER"
},
"user": "root",
"volumes": [
{
"containerPath": "/mnt/test",
"hostPath": "/etc/guest",
"mode": "RW"
}
]
}
}
HTTP status code 401
Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.
Body
Type: application/json
Example:
{ "message": "Invalid username or password." }
HTTP status code 403
Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to perform that action.
Body
Type: application/json
Example:
{ "message": "Not Authorized to perform this action!" }
HTTP status code 404
No job found for given jobId
.
Body
Type: application/json
Example:
{ "message": "Job 'not_existent' does not exist" }
HTTP status code 422
The given entity can not be processed due to validation errors.
Body
Type: application/json
Example:
{
"message": "Object is not valid",
"details": [
{
"path": "/mem",
"errors": [
"is less than 32"
]
}
]
}