1. Introduction

This is the REST API documentation for Genie version 4.3.0. Here you will find specific details of how to invoke the Genie REST API and what you can expect as return values.

For more Genie information see the website.
For high level information and installation instructions please see the reference guide.
For a demo of this version of Genie please see demo guide.

2. Assumptions

This documentation assumes a basic knowledge of how REST APIs work. If you don’t know things like HTTP verbs see websites like this one.

3. HATEOAS

A lot of the API’s return application/hal+json as a content type. This is a superset of JSON built to support HATEOAS (Hypermedia as the Engine of Application State). Rather than re-writing what HATEOAS is see this great write up on the Spring Website about it.

HATEOAS has several ways to represent the state in return payloads. Genie uses HAL. You can find documentation about it here or here.

4. Security

All of this documentation assumes security is disabled for Genie. If your installation has security enabled the REST APIs will be secured via OAuth2 or x509 certs or both.

These are the currently supported API security mechanisms but others could be plugged in. We’ll only talk about OAuth2 here for now until another implementation is done.

4.1. OAuth2

If OAuth2 is enabled you’ll need to send your JWT you got back from your provider along with your API request. This is accomplished by setting your Authorization header to a value of Bearer {your token here}.

4.2. x509

If your admin has security Genie using client and server certificates mechanisms you’ll need to send your client certificate along with your request.

Something like curl --cert {your cert} {genie endpoint}

5. Resources

This section contains the documentation for various resources sent to and from the various Genie APIs. Note their structure and fields, particularly what is marked optional. Optional means when you submit one of these resources to Genie you don’t need to set that field. Genie either doesn’t require it or if it does, as is the case with ID’s, it will create one if you don’t provide it. When you get a resource all fields Genie has stored will be returned.

5.1. Application

Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

name

String

The name

Must not be empty. Size must be between 0 and 255 inclusive

false

user

String

The user

Must not be empty. Size must be between 0 and 255 inclusive

false

version

String

The version

Must not be empty. Size must be between 0 and 255 inclusive

false

description

String

Any description

Size must be between 0 and 1000 inclusive

true

metadata

Object

Any semi-structured metadata. Must be valid JSON

true

tags

Array

The tags

true

setupFile

String

A location for any setup that needs to be done when installing

Size must be between 0 and 1024 inclusive

true

configs

Array

Any configuration files needed for the resource

true

type

String

The type of application this is (e.g. hadoop, presto, spark). Can be used to group.

true

status

String

The status of the application. Options: [ACTIVE, DEPRECATED, INACTIVE]

Must not be null

false

dependencies

Array

The dependencies for the application

true

5.2. Cluster

Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

name

String

The name

Must not be empty. Size must be between 0 and 255 inclusive

false

user

String

The user

Must not be empty. Size must be between 0 and 255 inclusive

false

version

String

The version

Must not be empty. Size must be between 0 and 255 inclusive

false

description

String

Any description

Size must be between 0 and 1000 inclusive

true

metadata

Object

Any semi-structured metadata. Must be valid JSON

true

tags

Array

The tags

true

setupFile

String

A location for any setup that needs to be done when installing

Size must be between 0 and 1024 inclusive

true

configs

Array

Any configuration files needed for the resource

true

status

String

The status of the cluster. Options: [UP, OUT_OF_SERVICE, TERMINATED]

Must not be null

false

dependencies

Array

The dependencies for the cluster

true

5.3. Command

Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

name

String

The name

Must not be empty. Size must be between 0 and 255 inclusive

false

user

String

The user

Must not be empty. Size must be between 0 and 255 inclusive

false

version

String

The version

Must not be empty. Size must be between 0 and 255 inclusive

false

description

String

Any description

Size must be between 0 and 1000 inclusive

true

metadata

Object

Any semi-structured metadata. Must be valid JSON

true

tags

Array

The tags

true

setupFile

String

A location for any setup that needs to be done when installing

Size must be between 0 and 1024 inclusive

true

configs

Array

Any configuration files needed for the resource

true

status

String

The status of the command. Options: [ACTIVE, DEPRECATED, INACTIVE]

Must not be null

false

executable

String

The executable to run on the Genie node when this command is used. e.g. /usr/bin/hadoop

Must not be empty. Size must be between 0 and 1024 inclusive

false

executableAndArguments

Array

The executable and arguments to run on the Genie node when this command is used. e.g. /usr/bin/hadoop

Must not be empty

false

checkDelay

Number

Deprecated as of 4.3.0. Now is a no-op on the server side.

false

memory

Number

The default amount of memory (in MB) that should be allocated for instances of this command client

Must be at least 1

true

dependencies

Array

The dependencies for the command

true

clusterCriteria

Array

The priority ordered list of criteria to resolve clusters that this command can run jobs on

true

runtime

Object

The various job runtime parameters that should be used if this command is used

false

5.4. Job Request

Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

name

String

The name

Must not be empty. Size must be between 0 and 255 inclusive

false

user

String

The user

Must not be empty. Size must be between 0 and 255 inclusive

false

version

String

The version

Must not be empty. Size must be between 0 and 255 inclusive

false

description

String

Any description

Size must be between 0 and 1000 inclusive

true

metadata

Object

Any semi-structured metadata. Must be valid JSON

true

tags

Array

The tags

true

setupFile

String

A location for any setup that needs to be done when installing

Size must be between 0 and 1024 inclusive

true

commandArgs

String

Any arguments to append to the command executable when the job is run

Size must be between 0 and 10000 inclusive

true

clusterCriterias

Array

List of cluster criteria’s for which a match will be attempted with register cluster tags. Each set of tags within a given cluster criteria must have at least one non-blank (e.g. ' ', ' ', null) tag.

Must not be empty

false

commandCriteria

Array

Set of tags which will attempt to match against the commands linked to selected cluster. There must be at least one non-blank (e.g. ' ', ' ', null) criteria within the set

Must not be empty

false

group

String

A group that the job should be run under on the linux system

Size must be between 0 and 255 inclusive

true

disableLogArchival

Boolean

If you want to disable backing up job output files set this to true. Default: false

true

email

String

If you want e-mail notification on job completion enter address here

Must be a well-formed email address. Size must be between 0 and 255 inclusive

true

cpu

Number

For future use. Currently has no impact.

Must be at least 1

true

memory

Number

The amount of memory (in MB) desired for job client. Cannot exceed configured max.

Must be at least 1

true

timeout

Number

The timeout (in seconds) after which job will be killed by system, system setting used if not set

Must be at least 1

true

configs

Array

URI’s of configuration files which will be downloaded into job working directory at runtime

true

dependencies

Array

URI’s of dependency files which will be downloaded into job working directory at runtime

true

applications

Array

Complete list of application ids if power user wishes to override selected command defaults

true

grouping

String

The grouping of the job relative to other jobs. e.g. scheduler job name

true

groupingInstance

String

The grouping instance of the job relative to other jobs. e.g. scheduler job run

true

runtime

Object

The requested job runtime values

false

5.5. Job

Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

name

String

The name

Must not be empty. Size must be between 0 and 255 inclusive

false

user

String

The user

Must not be empty. Size must be between 0 and 255 inclusive

false

version

String

The version

Must not be empty. Size must be between 0 and 255 inclusive

false

description

String

Any description

Size must be between 0 and 1000 inclusive

true

metadata

Object

Any semi-structured metadata. Must be valid JSON

true

tags

Array

The tags

true

commandArgs

String

Any arguments to append to the command executable when the job is run

Size must be between 0 and 10000 inclusive

true

status

String

The status of the job. Options: [RESERVED, RESOLVED, ACCEPTED, CLAIMED, INIT, RUNNING, SUCCEEDED, KILLED, FAILED, INVALID]

Must not be null

false

statusMsg

String

The status message of the job

Size must be between 0 and 255 inclusive

true

started

String

The time (UTC ISO8601 with millis) the job was started

true

finished

String

The time (UTC ISO8601 with millis) the job finished

true

archiveLocation

String

The URI where the working directory zip was stored

Size must be between 0 and 1024 inclusive

true

clusterName

String

The name of the cluster the job was run on if it’s been determined

Size must be between 0 and 255 inclusive

true

commandName

String

The name of the command the job was run with if it’s been determined

Size must be between 0 and 255 inclusive

true

runtime

String

Runtime of the job in ISO8601 duration format

Must not be null

true

grouping

String

The grouping of the job relative to other jobs. e.g. scheduler job name

true

groupingInstance

String

The grouping instance of the job relative to other jobs. e.g. scheduler job run

true

5.6. Job Execution

Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

hostName

String

The host name of the Genie node responsible for the job

Size must be between 1 and 1024 inclusive

false

processId

Number

The id of the job client process on the Genie node

true

checkDelay

Number

The amount of time in milliseconds between checks of the job status by Genie

Must be at least 1

true

timeout

String

The date (UTC ISO8601 with millis) when the job will be killed by Genie due to timeout

true

exitCode

Number

The job client process exit code after the job is done

true

memory

Number

The amount of memory (in MB) allocated to the job client

Must be at least 1

true

archiveStatus

String

The archival status of the job directory

true

launcherExt

Object

JSON object that contains metadata specific to the launcher implementation for the job

true

runtime

Object

The runtime execution environment for a job

false

5.7. Job Metadata

Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

clientHost

String

The host name of the client that submitted the job to Genie

true

userAgent

String

The user agent string that was passed to Genie on job request

true

numAttachments

Number

The number of attachments sent to Genie with the job request

true

totalSizeOfAttachments

Number

The total size of all attachments sent to Genie with the job request. In bytes.

true

stdOutSize

Number

The final size of the stdout file after a job is completed. In bytes.

true

stdErrSize

Number

The final size of the stderr file after a job is completed. In bytes.

true

5.8. Criterion

Path Type Description Constraints Optional

id

String

The unique identifier a resource needs to have to match this criterion

true

name

String

The name a resource needs to have to match this criterion

true

version

String

The version a resource needs to have to match this criterion

true

status

String

The status a resource needs to have to match this criterion

true

tags

Array

The set of tags a resource needs to have to match this criterion

true

6. Jobs API

6.1. Submit a Job

6.1.1. Description

The main API in Genie. Submitting a job to be run.

There are two different ways to submit a job to Genie. Both go to the same endpoint but you can simply send a JSON payload if you have no attachments. This means setting your content type to application/json. If you do have attachments you want to send with your job request you need to set the content type to multipart/form-data and post the request that way. Examples are below.

6.1.2. Endpoint

POST /api/v3/jobs

The id in this example is optional. If you include one Genie will use it. If not it will provide one. If you provide one it must be unique.
This Example is without attachments

6.1.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Payload Fields
Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

name

String

The name

Must not be empty. Size must be between 0 and 255 inclusive

false

user

String

The user

Must not be empty. Size must be between 0 and 255 inclusive

false

version

String

The version

Must not be empty. Size must be between 0 and 255 inclusive

false

description

String

Any description

Size must be between 0 and 1000 inclusive

true

metadata

Object

Any semi-structured metadata. Must be valid JSON

true

tags

Array

The tags

true

setupFile

String

A location for any setup that needs to be done when installing

Size must be between 0 and 1024 inclusive

true

commandArgs

String

Any arguments to append to the command executable when the job is run

Size must be between 0 and 10000 inclusive

true

clusterCriterias

Array

List of cluster criteria’s for which a match will be attempted with register cluster tags. Each set of tags within a given cluster criteria must have at least one non-blank (e.g. ' ', ' ', null) tag.

Must not be empty

false

commandCriteria

Array

Set of tags which will attempt to match against the commands linked to selected cluster. There must be at least one non-blank (e.g. ' ', ' ', null) criteria within the set

Must not be empty

false

group

String

A group that the job should be run under on the linux system

Size must be between 0 and 255 inclusive

true

disableLogArchival

Boolean

If you want to disable backing up job output files set this to true. Default: false

true

email

String

If you want e-mail notification on job completion enter address here

Must be a well-formed email address. Size must be between 0 and 255 inclusive

true

cpu

Number

For future use. Currently has no impact.

Must be at least 1

true

memory

Number

The amount of memory (in MB) desired for job client. Cannot exceed configured max.

Must be at least 1

true

timeout

Number

The timeout (in seconds) after which job will be killed by system, system setting used if not set

Must be at least 1

true

configs

Array

URI’s of configuration files which will be downloaded into job working directory at runtime

true

dependencies

Array

URI’s of dependency files which will be downloaded into job working directory at runtime

true

applications

Array

Complete list of application ids if power user wishes to override selected command defaults

true

grouping

String

The grouping of the job relative to other jobs. e.g. scheduler job name

true

groupingInstance

String

The grouping instance of the job relative to other jobs. e.g. scheduler job run

true

runtime

Object

The requested job runtime values

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/jobs' -i -X POST \
    -H 'Content-Type: application/json' \
    -d '{
  "id" : null,
  "created" : null,
  "updated" : null,
  "version" : "1.0",
  "user" : "genie",
  "name" : "List * ... Directories bash job",
  "description" : "Genie 3 Test Job",
  "metadata" : {
    "schedulerJobName" : "6a113c50-45af-4e9a-a91e-91c9a2357a87",
    "schedulerRunId" : "303bff20-8981-458c-a6c1-63f18f89f826"
  },
  "tags" : [ "aTag", "zTag" ],
  "configs" : [ "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/job/config1" ],
  "dependencies" : [ "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/job/dep1" ],
  "setupFile" : "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/job/jobsetupfile",
  "commandArgs" : "-c 'sleep 5 && echo hello world'",
  "clusterCriterias" : [ {
    "tags" : [ "localhost" ]
  } ],
  "commandCriteria" : [ "bash" ],
  "group" : null,
  "disableLogArchival" : false,
  "email" : null,
  "cpu" : null,
  "memory" : null,
  "timeout" : null,
  "applications" : [ ],
  "grouping" : "Workflow.Foo",
  "groupingInstance" : "Workflow.Foo_Step.Blah-2020021919:12:34.000_1",
  "runtime" : {
    "resources" : {
      "cpu" : null,
      "gpu" : null,
      "memoryMb" : null,
      "diskMb" : null,
      "networkMbps" : null
    },
    "images" : { }
  }
}'
HTTPie
$ echo '{
  "id" : null,
  "created" : null,
  "updated" : null,
  "version" : "1.0",
  "user" : "genie",
  "name" : "List * ... Directories bash job",
  "description" : "Genie 3 Test Job",
  "metadata" : {
    "schedulerJobName" : "6a113c50-45af-4e9a-a91e-91c9a2357a87",
    "schedulerRunId" : "303bff20-8981-458c-a6c1-63f18f89f826"
  },
  "tags" : [ "aTag", "zTag" ],
  "configs" : [ "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/job/config1" ],
  "dependencies" : [ "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/job/dep1" ],
  "setupFile" : "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/job/jobsetupfile",
  "commandArgs" : "-c 'sleep 5 && echo hello world'",
  "clusterCriterias" : [ {
    "tags" : [ "localhost" ]
  } ],
  "commandCriteria" : [ "bash" ],
  "group" : null,
  "disableLogArchival" : false,
  "email" : null,
  "cpu" : null,
  "memory" : null,
  "timeout" : null,
  "applications" : [ ],
  "grouping" : "Workflow.Foo",
  "groupingInstance" : "Workflow.Foo_Step.Blah-2020021919:12:34.000_1",
  "runtime" : {
    "resources" : {
      "cpu" : null,
      "gpu" : null,
      "memoryMb" : null,
      "diskMb" : null,
      "networkMbps" : null
    },
    "images" : { }
  }
}' | http POST 'https://genie.example.com/api/v3/jobs' \
    'Content-Type:application/json'
Response Documentation
Headers
Name Description

Location

The URI

HTTP Messages
Request
POST /api/v3/jobs HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 1514

{
  "id" : null,
  "created" : null,
  "updated" : null,
  "version" : "1.0",
  "user" : "genie",
  "name" : "List * ... Directories bash job",
  "description" : "Genie 3 Test Job",
  "metadata" : {
    "schedulerJobName" : "6a113c50-45af-4e9a-a91e-91c9a2357a87",
    "schedulerRunId" : "303bff20-8981-458c-a6c1-63f18f89f826"
  },
  "tags" : [ "aTag", "zTag" ],
  "configs" : [ "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/job/config1" ],
  "dependencies" : [ "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/job/dep1" ],
  "setupFile" : "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/job/jobsetupfile",
  "commandArgs" : "-c 'sleep 5 && echo hello world'",
  "clusterCriterias" : [ {
    "tags" : [ "localhost" ]
  } ],
  "commandCriteria" : [ "bash" ],
  "group" : null,
  "disableLogArchival" : false,
  "email" : null,
  "cpu" : null,
  "memory" : null,
  "timeout" : null,
  "applications" : [ ],
  "grouping" : "Workflow.Foo",
  "groupingInstance" : "Workflow.Foo_Step.Blah-2020021919:12:34.000_1",
  "runtime" : {
    "resources" : {
      "cpu" : null,
      "gpu" : null,
      "memoryMb" : null,
      "diskMb" : null,
      "networkMbps" : null
    },
    "images" : { }
  }
}
Response
HTTP/1.1 202 Accepted
Location: https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06
Date: Fri, 16 Sep 2022 00:49:49 GMT
Keep-Alive: timeout=60
Connection: keep-alive
This example is with attachments

6.1.4. API Docs

Request Documentation
Headers
Name Description

Content-Type

multipart/form-data

Payload Fields
Part Description

request

The job request JSON. Content type must be application/json for part

attachment

An attachment file. There can be multiple. Type should be octet-stream

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/jobs' -i -X POST \
    -H 'Content-Type: multipart/form-data; boundary="aKg0RRFtTGHZJmXQdEVZjjlJoWyTXePqTD5yT"' \
    -F 'request=@file;type=application/json' \
    -F 'attachment=@query.sql;type=application/octet-stream' \
    -F 'attachment=@query2.sql;type=application/octet-stream'
HTTPie
$ http --multipart POST 'https://genie.example.com/api/v3/jobs' \
    'request'@'file' \
    'attachment'@'query.sql' \
    'attachment'@'query2.sql'
Response Documentation
Headers
Name Description

Location

The URI

HTTP Messages
Request
POST /api/v3/jobs HTTP/1.1
Content-Type: multipart/form-data; boundary="aKg0RRFtTGHZJmXQdEVZjjlJoWyTXePqTD5yT"; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Host: genie.example.com

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=request; filename=file
Content-Type: application/json

{"id":null,"created":null,"updated":null,"version":"1.0","user":"genie","name":"List * ... Directories bash job","description":"Genie 3 Test Job","metadata":null,"tags":[],"configs":[],"dependencies":[],"setupFile":"file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/job/jobsetupfile","commandArgs":"-c 'sleep 5 && echo hello world'","clusterCriterias":[{"tags":["localhost"]}],"commandCriteria":["bash"],"group":null,"disableLogArchival":true,"email":null,"cpu":null,"memory":null,"timeout":null,"applications":[],"grouping":null,"groupingInstance":null,"runtime":{"resources":{"cpu":null,"gpu":null,"memoryMb":null,"diskMb":null,"networkMbps":null},"images":{}}}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=attachment; filename=query.sql
Content-Type: application/octet-stream

--
--
--  Copyright 2018 Netflix, Inc.
--
--     Licensed under the Apache License, Version 2.0 (the "License");
--     you may not use this file except in compliance with the License.
--     You may obtain a copy of the License at
--
--         https://genie.example.com/licenses/LICENSE-2.0
--
--     Unless required by applicable law or agreed to in writing, software
--     distributed under the License is distributed on an "AS IS" BASIS,
--     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--     See the License for the specific language governing permissions and
--     limitations under the License.
--
--
select * from myTable;

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name=attachment; filename=query2.sql
Content-Type: application/octet-stream

--
--
--  Copyright 2018 Netflix, Inc.
--
--     Licensed under the Apache License, Version 2.0 (the "License");
--     you may not use this file except in compliance with the License.
--     You may obtain a copy of the License at
--
--         https://genie.example.com/licenses/LICENSE-2.0
--
--     Unless required by applicable law or agreed to in writing, software
--     distributed under the License is distributed on an "AS IS" BASIS,
--     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--     See the License for the specific language governing permissions and
--     limitations under the License.
--
--
SELECT * FROM your_table JOIN my_table ON your_table.id = my_table.id WHERE x > 50;

--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
Response
HTTP/1.1 202 Accepted
Location: https://genie.example.com/api/v3/jobs/04f95b01-c313-4042-a61c-49947a371ba6
Date: Fri, 16 Sep 2022 00:50:34 GMT
Keep-Alive: timeout=60
Connection: keep-alive

6.2. Find Jobs

6.2.1. Description

Search for jobs using query parameters.

6.2.2. Endpoint

GET /api/v3/jobs

6.2.3. API Docs

Request Documentation
Headers

None

Query Parameters
Parameter Description

page

The page number to get. Default to 0.

size

The size of the page to get. Default to 64.

sort

The fields to sort the results by. Defaults to 'updated,desc'.

id

The id of the jobs to find. Use % symbol for regex like search.

name

The name of the jobs to find. Use % symbol for regex like search.

user

The user of the jobs to find. Use % symbol for regex like search.

status

The status(es) of the jobs to find. Can have multiple. Options: [RESERVED, RESOLVED, ACCEPTED, CLAIMED, INIT, RUNNING, SUCCEEDED, KILLED, FAILED, INVALID]

tag

The tag(s) of the jobs to find. Can have multiple.

clusterName

The name of the cluster on which the jobs ran. Use % symbol for regex like search.

clusterId

The id of the cluster on which the jobs ran.

commandName

The name of the command which was executed by the job. Use % symbol for regex like search.

commandId

The id of the command which was executed by the job.

minStarted

The minimum started time of the job in milliseconds since epoch. (inclusive)

maxStarted

The maximum started time of the job in milliseconds since epoch. (exclusive)

minFinished

The minimum finished time of the job in milliseconds since epoch. (inclusive)

maxFinished

The maximum finished time of the job in milliseconds since epoch. (exclusive)

grouping

The grouping the job should be a member of. Use % symbol for regex like search.

groupingInstance

The grouping instance the job should be a member of. Use % symbol for regex like search.

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/jobs?user=genie' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/jobs?user=genie'
Response Documentation
Headers
Name Description

Content-Type

application/hal+json

Payload Fields
Path Type Description Constraints Optional

_links

Object

Links to other resources.

false

page

Object

The result page information.

false

page.size

Number

The number of elements in this page result.

false

page.totalElements

Number

The total number of elements this search result could return.

false

page.totalPages

Number

The total number of pages there could be at the current page size.

false

page.number

Number

The current page number.

false

_embedded.jobSearchResultList

Array

The found jobs.

false

Relation Description

self

The current search

first

The first page for this search

prev

The previous page for this search

next

The next page for this search

last

The last page for this search

HTTP Messages
Request
GET /api/v3/jobs?user=genie HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:50:08 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 947

{
  "_embedded" : {
    "jobSearchResultList" : [ {
      "id" : "52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06",
      "name" : "List * ... Directories bash job",
      "user" : "genie",
      "status" : "SUCCEEDED",
      "started" : "2022-09-16T00:50:01.081Z",
      "finished" : "2022-09-16T00:50:06.310Z",
      "clusterName" : "Local laptop",
      "commandName" : "Unix Bash command",
      "runtime" : "PT5.229S",
      "_links" : {
        "self" : {
          "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06"
        }
      }
    } ]
  },
  "_links" : {
    "self" : {
      "href" : "https://genie.example.com/api/v3/jobs?user=genie{&id,name,status,tag,clusterName,clusterId,commandName,commandId,minStarted,maxStarted,minFinished,maxFinished,grouping,groupingInstance}",
      "templated" : true
    }
  },
  "page" : {
    "size" : 10,
    "totalElements" : 1,
    "totalPages" : 1,
    "number" : 0
  }
}

6.3. Get a Job

6.3.1. Description

Get metadata about a specific job.

6.3.2. Endpoint

GET /api/v3/jobs/{id}

6.3.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 1. /api/v3/jobs/{id}
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06'
Response Documentation
Headers
Name Description

Content-Type

application/hal+json

Payload Fields
Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

name

String

The name

Must not be empty. Size must be between 0 and 255 inclusive

false

user

String

The user

Must not be empty. Size must be between 0 and 255 inclusive

false

version

String

The version

Must not be empty. Size must be between 0 and 255 inclusive

false

description

String

Any description

Size must be between 0 and 1000 inclusive

true

metadata

Object

Any semi-structured metadata. Must be valid JSON

true

tags

Array

The tags

true

commandArgs

String

Any arguments to append to the command executable when the job is run

Size must be between 0 and 10000 inclusive

true

status

String

The status of the job. Options: [RESERVED, RESOLVED, ACCEPTED, CLAIMED, INIT, RUNNING, SUCCEEDED, KILLED, FAILED, INVALID]

Must not be null

false

statusMsg

String

The status message of the job

Size must be between 0 and 255 inclusive

true

started

String

The time (UTC ISO8601 with millis) the job was started

true

finished

String

The time (UTC ISO8601 with millis) the job finished

true

archiveLocation

String

The URI where the working directory zip was stored

Size must be between 0 and 1024 inclusive

true

clusterName

String

The name of the cluster the job was run on if it’s been determined

Size must be between 0 and 255 inclusive

true

commandName

String

The name of the command the job was run with if it’s been determined

Size must be between 0 and 255 inclusive

true

runtime

String

Runtime of the job in ISO8601 duration format

Must not be null

true

grouping

String

The grouping of the job relative to other jobs. e.g. scheduler job name

true

groupingInstance

String

The grouping instance of the job relative to other jobs. e.g. scheduler job run

true

Relation Description

self

URI for this job

request

The request that kicked off this job

execution

The job execution information for this job

metadata

The job metadata information for this job

output

The output URI for the job

status

The current status of the job

cluster

The cluster this job ran on

command

The command this job executed

applications

The applications this job used

HTTP Messages
Request
GET /api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06 HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:50:06 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 2087

{
  "id" : "52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06",
  "created" : "2022-09-16T00:49:49.264Z",
  "updated" : "2022-09-16T00:50:06.484Z",
  "version" : "1.0",
  "user" : "genie",
  "name" : "List * ... Directories bash job",
  "description" : "Genie 3 Test Job",
  "metadata" : {
    "schedulerJobName" : "6a113c50-45af-4e9a-a91e-91c9a2357a87",
    "schedulerRunId" : "303bff20-8981-458c-a6c1-63f18f89f826"
  },
  "tags" : [ "aTag", "zTag" ],
  "status" : "SUCCEEDED",
  "statusMsg" : "Job finished successfully.",
  "started" : "2022-09-16T00:50:01.081Z",
  "finished" : "2022-09-16T00:50:06.310Z",
  "archiveLocation" : "file:///tmp/genie/archives/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06",
  "clusterName" : "Local laptop",
  "commandName" : "Unix Bash command",
  "runtime" : "PT5.229S",
  "commandArgs" : "-c 'sleep 5 && echo hello world'",
  "grouping" : "Workflow.Foo",
  "groupingInstance" : "Workflow.Foo_Step.Blah-2020021919:12:34.000_1",
  "_links" : {
    "self" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06"
    },
    "output" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output"
    },
    "request" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/request"
    },
    "execution" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/execution"
    },
    "metadata" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/metadata"
    },
    "status" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/status"
    },
    "cluster" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/cluster"
    },
    "command" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/command"
    },
    "applications" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/applications"
    }
  }
}

6.4. Kill a Job

6.4.1. Description

Request for a job to be killed.

6.4.2. Endpoint

DELETE /api/v3/jobs/{id}

6.4.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 2. /api/v3/jobs/{id}
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/jobs/69e5803d-ae50-45ae-8732-da1d172b443f' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/jobs/69e5803d-ae50-45ae-8732-da1d172b443f'
HTTP Messages
Request
DELETE /api/v3/jobs/69e5803d-ae50-45ae-8732-da1d172b443f HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 202 Accepted
Date: Fri, 16 Sep 2022 00:49:48 GMT
Keep-Alive: timeout=60
Connection: keep-alive

6.5. Get Job Status

6.5.1. Description

Get the current status of a job.

6.5.2. Endpoint

GET /api/v3/jobs/{id}/status

6.5.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 3. /api/v3/jobs/{id}/status
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/status' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/status'
Response Documentation
Headers
Name Description

Content-Type

application/json

Payload Fields
Path Type Description Constraints Optional

status

String

The job status. One of: [RESERVED, RESOLVED, ACCEPTED, CLAIMED, INIT, RUNNING, SUCCEEDED, KILLED, FAILED, INVALID]

false

HTTP Messages
Request
GET /api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/status HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:50:06 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 28

{
  "status" : "SUCCEEDED"
}

6.6. Get Contents From the Job Working Directory

6.6.1. Description

This API acts as a file browser for the remote working directory of your job. You can request endpoints and if it is a directory you will be shown the contents of the directory and be able to navigate. If the endpoint points to a file it will return the file.

6.6.2. Endpoint

GET /api/v3/jobs/{id}/output/{path}**

6.6.3. Getting a directory as JSON

This is the default behavior for directories if no Accept header is present

6.6.4. API Docs

Request Documentation
Headers
Name Description

Accept

application/json

Path Parameters
Table 4. /api/v3/jobs/{id}/output/{filePath}
Parameter Description

id

The resource id

filePath

The path to the directory to get

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/' -i -X GET \
    -H 'Accept: application/json'
HTTPie
$ http GET 'https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/' \
    'Accept:application/json'
Response Documentation
Headers
Name Description

Content-Type

application/json

Payload Fields
Path Type Description Constraints Optional

parent

Object

Information about the parent of this directory

true

parent.name

String

The name of the parent directory

true

parent.url

String

The url to get the parent

true

parent.size

Number

The size of the parent in bytes

true

parent.lastModified

String

The last time the parent was modified in ISO8601 UTC with milliseconds included

true

directories

Array

All the subdirectories of this directory

false

directories[].name

String

The name of the directory

false

directories[].url

String

The url to get the directory

false

directories[].size

Number

The size of the directory in bytes

false

directories[].lastModified

String

The last time the directory was modified in ISO8601 UTC with milliseconds included

false

files

Array

All the files in this directory

false

files[].name

String

The name of the file

false

files[].url

String

The url to get the file

false

files[].size

Number

The size of the file in bytes

false

files[].lastModified

String

The last time the file was modified in ISO8601 UTC with milliseconds included

false

HTTP Messages
Request
GET /api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/ HTTP/1.1
Accept: application/json
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 1459
Date: Fri, 16 Sep 2022 00:50:07 GMT
Keep-Alive: timeout=60
Connection: keep-alive

{
  "parent" : null,
  "directories" : [ {
    "name" : "genie/",
    "url" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/genie",
    "size" : 4096,
    "lastModified" : "2022-09-16T00:50:00.981Z"
  } ],
  "files" : [ {
    "name" : "config1",
    "url" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/config1",
    "size" : 0,
    "lastModified" : "2022-09-16T00:50:00.329Z"
  }, {
    "name" : "dep1",
    "url" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/dep1",
    "size" : 0,
    "lastModified" : "2022-09-16T00:50:00.329Z"
  }, {
    "name" : "genie_setup.sh",
    "url" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/genie_setup.sh",
    "size" : 0,
    "lastModified" : "2022-09-16T00:50:00.329Z"
  }, {
    "name" : "run",
    "url" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/run",
    "size" : 3828,
    "lastModified" : "2022-09-16T00:50:00.281Z"
  }, {
    "name" : "stderr",
    "url" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/stderr",
    "size" : 0,
    "lastModified" : "2022-09-16T00:50:00.941Z"
  }, {
    "name" : "stdout",
    "url" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/stdout",
    "size" : 12,
    "lastModified" : "2022-09-16T00:50:06.029Z"
  } ]
}

6.6.5. Getting a directory as HTML

This would happen automatically if you called from browser due to browser default accept header

6.6.6. API Docs

Request Documentation
Headers
Name Description

Accept

text/html

Path Parameters
Table 5. /api/v3/jobs/{id}/output/{filePath}
Parameter Description

id

The resource id

filePath

The path to the directory to get

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/' -i -X GET \
    -H 'Accept: text/html'
HTTPie
$ http GET 'https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/' \
    'Accept:text/html'
Response Documentation
Headers
Name Description

Content-Type

text/html

HTTP Messages
Request
GET /api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/ HTTP/1.1
Accept: text/html
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 2729
Date: Fri, 16 Sep 2022 00:50:07 GMT
Keep-Alive: timeout=60
Connection: keep-alive

<!DOCTYPE html><html><head><title>52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06</title><style type="text/css"><!--body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}--></style> </head><body><h1>52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06</h1><HR size="1" noshade="noshade"><table width="100%" cellspacing="0" cellpadding="5" align="center"><tr><td align="left"><font size="+1"><strong>Filename</strong></font></td><td align="right"><font size="+1"><strong>Size</strong></font></td><td align="right"><font size="+1"><strong>Last Modified</strong></font></td></tr><tr bgcolor="#eeeeee"><td align="left">&nbsp;&nbsp;<a href="https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/genie"><tt>genie/</tt></a></td><td align="right"><tt>-</tt></td><td align="right"><tt>Fri, 16 Sep 2022 00:50:00 GMT</tt></td></tr><tr><td align="left">&nbsp;&nbsp;<a href="https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/config1"><tt>config1</tt></a></td><td align="right"><tt>0 bytes</tt></td><td align="right"><tt>Fri, 16 Sep 2022 00:50:00 GMT</tt></td></tr><tr bgcolor="#eeeeee"><td align="left">&nbsp;&nbsp;<a href="https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/dep1"><tt>dep1</tt></a></td><td align="right"><tt>0 bytes</tt></td><td align="right"><tt>Fri, 16 Sep 2022 00:50:00 GMT</tt></td></tr><tr><td align="left">&nbsp;&nbsp;<a href="https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/genie_setup.sh"><tt>genie_setup.sh</tt></a></td><td align="right"><tt>0 bytes</tt></td><td align="right"><tt>Fri, 16 Sep 2022 00:50:00 GMT</tt></td></tr><tr bgcolor="#eeeeee"><td align="left">&nbsp;&nbsp;<a href="https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/run"><tt>run</tt></a></td><td align="right"><tt>3 KB</tt></td><td align="right"><tt>Fri, 16 Sep 2022 00:50:00 GMT</tt></td></tr><tr><td align="left">&nbsp;&nbsp;<a href="https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/stderr"><tt>stderr</tt></a></td><td align="right"><tt>0 bytes</tt></td><td align="right"><tt>Fri, 16 Sep 2022 00:50:00 GMT</tt></td></tr><tr bgcolor="#eeeeee"><td align="left">&nbsp;&nbsp;<a href="https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/stdout"><tt>stdout</tt></a></td><td align="right"><tt>12 bytes</tt></td><td align="right"><tt>Fri, 16 Sep 2022 00:50:06 GMT</tt></td></tr></table><HR size="1" noshade="noshade"><h3>Apache Tomcat/9.0.62</h3></body></html>

6.6.8. API Docs

Request Documentation
Headers
Name Description

Accept

/

Path Parameters
Table 6. /api/v3/jobs/{id}/output/{filePath}
Parameter Description

id

The resource id

filePath

The path to the file to get

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/run' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/run'
Response Documentation
Headers
Name Description

Content-Type

The content type of the file being returned

HTTP Messages
Request
GET /api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output/run HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Last-Modified: Fri, 16 Sep 2022 00:50:00 GMT
Accept-Ranges: bytes
Content-Type: text/plain;charset=UTF-8
Content-Length: 3828
Date: Fri, 16 Sep 2022 00:50:07 GMT
Keep-Alive: timeout=60
Connection: keep-alive

#!/usr/bin/env bash

#
# Generated by Genie for job: 52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06
#

# Error out if any command fails
set -o errexit
# Error out if any command in a pipeline fails
set -o pipefail
# Error out if unknown variable is used
set -o nounset
# Save original stdout and stderr in fd 6 and 7
exec 6>&1
exec 7>&2


# Trap exit signals to ensure children processes are dead before returning
function handle_kill_request {
    echo "Handling $1 signal" >&2
    # Update trap
    trap wait SIGTERM SIGINT SIGHUP
    # Send SIGTERM to all children
    pkill -P $$ || true
    for ((iteration=1; iteration < 30; iteration++))
    {
        if pkill -0 -P $$ &> /dev/null;
        then
            echo "Waiting for children to terminate" >&2
            sleep 1
        else
            echo "All children terminated" >&2
            exit 1
        fi
    }
    # Reaching this point means the children did not die. Kill with SIGKILL
    echo "Terminating all children with SIGKILL" >&2
    pkill -9 -P $$
}
trap 'handle_kill_request SIGTERM' SIGTERM
trap 'handle_kill_request SIGINT' SIGINT
trap 'handle_kill_request SIGHUP' SIGHUP

# Locally-generated environment variables

export GENIE_JOB_DIR="/tmp/genie/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06"

export GENIE_APPLICATION_DIR="${GENIE_JOB_DIR}/genie/applications"

export GENIE_COMMAND_DIR="${GENIE_JOB_DIR}/genie/command/cmd1"

export GENIE_CLUSTER_DIR="${GENIE_JOB_DIR}/genie/cluster/cluster1"

export __GENIE_SETUP_LOG_FILE="${GENIE_JOB_DIR}/genie/logs/setup.log"

export __GENIE_ENVIRONMENT_DUMP_FILE="${GENIE_JOB_DIR}/genie/logs/env.log"

export __GENIE_SETUP_ERROR_MARKER_FILE="${GENIE_JOB_DIR}/genie/setup_failed.txt"


# Mark the beginnig of the setup by creating a marker file
echo "The job script failed during setup. See ${__GENIE_SETUP_LOG_FILE} for details" > ${__GENIE_SETUP_ERROR_MARKER_FILE}

# During setup, redirect stdout and stderr of this script to a log file
exec > ${__GENIE_SETUP_LOG_FILE}
exec 2>&1

echo "Setup start: $(date '+%Y-%m-%d %H:%M:%S')"

# Server-provided environment variables

export GENIE_CLUSTER_ID="cluster1"

export GENIE_CLUSTER_NAME="Local laptop"

export GENIE_CLUSTER_TAGS="localhost"

export GENIE_COMMAND_ID="cmd1"

export GENIE_COMMAND_NAME="Unix Bash command"

export GENIE_COMMAND_TAGS="bash"

export GENIE_JOB_GROUPING="Workflow.Foo"

export GENIE_JOB_GROUPING_INSTANCE="Workflow.Foo_Step.Blah-2020021919:12:34.000_1"

export GENIE_JOB_ID="52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06"

export GENIE_JOB_MEMORY="1500"

export GENIE_JOB_NAME="List * ... Directories bash job"

export GENIE_JOB_TAGS="aTag,zTag"

export GENIE_REQUESTED_CLUSTER_TAGS="[[localhost]]"

export GENIE_REQUESTED_CLUSTER_TAGS_0="localhost"

export GENIE_REQUESTED_COMMAND_TAGS="bash"

export GENIE_USER="genie"

export GENIE_USER_GROUP=""

export GENIE_VERSION="4"


echo "Sourcing setup script for cluster cluster1"
source ${GENIE_JOB_DIR}/genie/cluster/cluster1/genie_setup.sh

echo "Sourcing setup script for application app1"
source ${GENIE_JOB_DIR}/genie/applications/app1/genie_setup.sh

echo "Sourcing setup script for application app2"
source ${GENIE_JOB_DIR}/genie/applications/app2/genie_setup.sh

echo "Sourcing setup script for command cmd1"
source ${GENIE_JOB_DIR}/genie/command/cmd1/genie_setup.sh

echo "Sourcing setup script for job 52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06"
source ${GENIE_JOB_DIR}/genie_setup.sh


echo "Setup end: $(date '+%Y-%m-%d %H:%M:%S')"

# Setup completed successfully, delete marker file
rm ${__GENIE_SETUP_ERROR_MARKER_FILE}

# Restore the original stdout and stderr. Close fd 6 and 7
exec 1>&6 6>&-
exec 2>&7 7>&-

# Dump environment post-setup
env | grep -E --regex='.*' | sort > ${__GENIE_ENVIRONMENT_DUMP_FILE}

# Launch the command
/bin/bash -c 'sleep 5 && echo hello world' <&0 &
wait %1
exit $?

6.7. Get a Job Request

6.7.1. Description

Get the original request which spawned the job.

6.7.2. Endpoint

GET /api/v3/jobs/{id}/request

6.7.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 7. /api/v3/jobs/{id}/request
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/request' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/request'
Response Documentation
Headers
Name Description

Content-Type

application/hal+json

Payload Fields
Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

name

String

The name

Must not be empty. Size must be between 0 and 255 inclusive

false

user

String

The user

Must not be empty. Size must be between 0 and 255 inclusive

false

version

String

The version

Must not be empty. Size must be between 0 and 255 inclusive

false

description

String

Any description

Size must be between 0 and 1000 inclusive

true

metadata

Object

Any semi-structured metadata. Must be valid JSON

true

tags

Array

The tags

true

setupFile

String

A location for any setup that needs to be done when installing

Size must be between 0 and 1024 inclusive

true

commandArgs

String

Any arguments to append to the command executable when the job is run

Size must be between 0 and 10000 inclusive

true

clusterCriterias

Array

List of cluster criteria’s for which a match will be attempted with register cluster tags. Each set of tags within a given cluster criteria must have at least one non-blank (e.g. ' ', ' ', null) tag.

Must not be empty

false

commandCriteria

Array

Set of tags which will attempt to match against the commands linked to selected cluster. There must be at least one non-blank (e.g. ' ', ' ', null) criteria within the set

Must not be empty

false

group

String

A group that the job should be run under on the linux system

Size must be between 0 and 255 inclusive

true

disableLogArchival

Boolean

If you want to disable backing up job output files set this to true. Default: false

true

email

String

If you want e-mail notification on job completion enter address here

Must be a well-formed email address. Size must be between 0 and 255 inclusive

true

cpu

Number

For future use. Currently has no impact.

Must be at least 1

true

memory

Number

The amount of memory (in MB) desired for job client. Cannot exceed configured max.

Must be at least 1

true

timeout

Number

The timeout (in seconds) after which job will be killed by system, system setting used if not set

Must be at least 1

true

configs

Array

URI’s of configuration files which will be downloaded into job working directory at runtime

true

dependencies

Array

URI’s of dependency files which will be downloaded into job working directory at runtime

true

applications

Array

Complete list of application ids if power user wishes to override selected command defaults

true

grouping

String

The grouping of the job relative to other jobs. e.g. scheduler job name

true

groupingInstance

String

The grouping instance of the job relative to other jobs. e.g. scheduler job run

true

runtime

Object

The requested job runtime values

false

Relation Description

self

URI for this job request

job

The job that resulted from this request

execution

The job execution that resulted from this request

metadata

The job metadata information for this job

output

The output URI for the job

status

The current status of the job

HTTP Messages
Request
GET /api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/request HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:50:07 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 2270

{
  "id" : null,
  "created" : null,
  "updated" : null,
  "version" : "1.0",
  "user" : "genie",
  "name" : "List * ... Directories bash job",
  "description" : "Genie 3 Test Job",
  "metadata" : {
    "schedulerJobName" : "6a113c50-45af-4e9a-a91e-91c9a2357a87",
    "schedulerRunId" : "303bff20-8981-458c-a6c1-63f18f89f826"
  },
  "tags" : [ "aTag", "zTag" ],
  "configs" : [ "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/job/config1" ],
  "dependencies" : [ "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/job/dep1" ],
  "setupFile" : "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/job/jobsetupfile",
  "commandArgs" : "-c 'sleep 5 && echo hello world'",
  "clusterCriterias" : [ {
    "tags" : [ "localhost" ]
  } ],
  "commandCriteria" : [ "bash" ],
  "group" : null,
  "disableLogArchival" : false,
  "email" : null,
  "cpu" : null,
  "memory" : null,
  "timeout" : null,
  "applications" : [ ],
  "grouping" : "Workflow.Foo",
  "groupingInstance" : "Workflow.Foo_Step.Blah-2020021919:12:34.000_1",
  "runtime" : {
    "resources" : {
      "cpu" : null,
      "gpu" : null,
      "memoryMb" : null,
      "diskMb" : null,
      "networkMbps" : null
    },
    "images" : { }
  },
  "_links" : {
    "self" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/request"
    },
    "job" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06"
    },
    "execution" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/execution"
    },
    "output" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output"
    },
    "status" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/status"
    },
    "metadata" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/metadata"
    }
  }
}

6.8. Get a Job Execution

6.8.1. Description

Get metadata about a job execution. Information like where a job was run, its process exit code, etc.

6.8.2. Endpoint

GET /api/v3/jobs/{id}/execution

6.8.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 8. /api/v3/jobs/{id}/execution
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/execution' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/execution'
Response Documentation
Headers
Name Description

Content-Type

application/hal+json

Payload Fields
Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

hostName

String

The host name of the Genie node responsible for the job

Size must be between 1 and 1024 inclusive

false

processId

Number

The id of the job client process on the Genie node

true

checkDelay

Number

The amount of time in milliseconds between checks of the job status by Genie

Must be at least 1

true

timeout

String

The date (UTC ISO8601 with millis) when the job will be killed by Genie due to timeout

true

exitCode

Number

The job client process exit code after the job is done

true

memory

Number

The amount of memory (in MB) allocated to the job client

Must be at least 1

true

archiveStatus

String

The archival status of the job directory

true

launcherExt

Object

JSON object that contains metadata specific to the launcher implementation for the job

true

runtime

Object

The runtime execution environment for a job

false

Relation Description

self

URI for this job execution

job

The job associated with this execution

request

The job request that spawned this execution

metadata

The job metadata information for this job

output

The output URI for the job

status

The current status of the job

HTTP Messages
Request
GET /api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/execution HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:50:08 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 1405

{
  "id" : "52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06",
  "created" : "2022-09-16T00:49:49.264Z",
  "updated" : "2022-09-16T00:50:06.484Z",
  "hostName" : "localhost",
  "processId" : null,
  "checkDelay" : null,
  "timeout" : "2022-09-23T00:50:01.081Z",
  "exitCode" : null,
  "memory" : 1500,
  "archiveStatus" : "ARCHIVED",
  "launcherExt" : {
    "launcherClass" : "com.netflix.genie.web.agent.launchers.impl.LocalAgentLauncherImpl",
    "sourceHostname" : "localhost"
  },
  "runtime" : {
    "resources" : {
      "cpu" : 1,
      "gpu" : 0,
      "memoryMb" : 1500,
      "diskMb" : 10240,
      "networkMbps" : 10000
    },
    "images" : { }
  },
  "_links" : {
    "self" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/execution"
    },
    "job" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06"
    },
    "request" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/request"
    },
    "output" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output"
    },
    "status" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/status"
    },
    "metadata" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/metadata"
    }
  }
}

6.9. Get Job Metadata

6.9.1. Description

Get metadata about a job beyond core information. Information like where a job was submitted from, how large its output files were, etc.

6.9.2. Endpoint

GET /api/v3/jobs/{id}/metadata

6.9.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 9. /api/v3/jobs/{id}/metadata
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/metadata' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/metadata'
Response Documentation
Headers
Name Description

Content-Type

application/hal+json

Payload Fields
Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

clientHost

String

The host name of the client that submitted the job to Genie

true

userAgent

String

The user agent string that was passed to Genie on job request

true

numAttachments

Number

The number of attachments sent to Genie with the job request

true

totalSizeOfAttachments

Number

The total size of all attachments sent to Genie with the job request. In bytes.

true

stdOutSize

Number

The final size of the stdout file after a job is completed. In bytes.

true

stdErrSize

Number

The final size of the stderr file after a job is completed. In bytes.

true

Relation Description

self

URI for this job metadata

job

The job associated with this execution

request

The job request that spawned this execution

execution

The job execution information for this job

output

The output URI for the job

status

The current status of the job

HTTP Messages
Request
GET /api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/metadata HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:50:08 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 1080

{
  "id" : "52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06",
  "created" : "2022-09-16T00:49:49.264Z",
  "updated" : "2022-09-16T00:50:06.484Z",
  "clientHost" : "127.0.0.1",
  "userAgent" : "Apache-HttpClient/4.5.13 (Java/11.0.2)",
  "numAttachments" : 0,
  "totalSizeOfAttachments" : 0,
  "stdOutSize" : null,
  "stdErrSize" : null,
  "_links" : {
    "self" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/metadata"
    },
    "job" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06"
    },
    "request" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/request"
    },
    "output" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/output"
    },
    "status" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/status"
    },
    "execution" : {
      "href" : "https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/execution"
    }
  }
}

6.10. Get the Cluster a Job Ran On

6.10.1. Description

Get the metadata about the cluster which was selected to run the job based on the cluster and command criteria in the job request.

6.10.2. Endpoint

GET /api/v3/jobs/{id}/cluster

6.10.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 10. /api/v3/jobs/{id}/cluster
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/cluster' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/cluster'
Response Documentation
Headers
Name Description

Content-Type

application/hal+json

Payload Fields
Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

name

String

The name

Must not be empty. Size must be between 0 and 255 inclusive

false

user

String

The user

Must not be empty. Size must be between 0 and 255 inclusive

false

version

String

The version

Must not be empty. Size must be between 0 and 255 inclusive

false

description

String

Any description

Size must be between 0 and 1000 inclusive

true

metadata

Object

Any semi-structured metadata. Must be valid JSON

true

tags

Array

The tags

true

setupFile

String

A location for any setup that needs to be done when installing

Size must be between 0 and 1024 inclusive

true

configs

Array

Any configuration files needed for the resource

true

status

String

The status of the cluster. Options: [UP, OUT_OF_SERVICE, TERMINATED]

Must not be null

false

dependencies

Array

The dependencies for the cluster

true

Relation Description

self

URI for this cluster

commands

Get all the commands this cluster can use

HTTP Messages
Request
GET /api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/cluster HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:50:08 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 1490

{
  "id" : "cluster1",
  "created" : "2022-09-16T00:49:49.172Z",
  "updated" : "2022-09-16T00:49:49.172Z",
  "version" : "1.0",
  "user" : "genie",
  "name" : "Local laptop",
  "description" : null,
  "metadata" : null,
  "tags" : [ "localhost", "genie.id:cluster1", "genie.name:Local laptop" ],
  "configs" : [ "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/cluster1/config1", "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/cluster1/config2" ],
  "dependencies" : [ "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/cluster1/dep1", "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/cluster1/dep2" ],
  "setupFile" : "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/cluster1/setupfile",
  "status" : "UP",
  "_links" : {
    "self" : {
      "href" : "https://genie.example.com/api/v3/clusters/cluster1"
    },
    "commands" : {
      "href" : "https://genie.example.com/api/v3/clusters/cluster1/commands{?status}",
      "templated" : true
    }
  }
}

6.11. Get the Command a Job Executed

6.11.1. Description

Get the metadata about the command which was selected to be executed by the job based on the cluster and command criteria in the job request.

6.11.2. Endpoint

GET /api/v3/jobs/{id}/command

6.11.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 11. /api/v3/jobs/{id}/command
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/command' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/command'
Response Documentation
Headers
Name Description

Content-Type

application/hal+json

Payload Fields
Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

name

String

The name

Must not be empty. Size must be between 0 and 255 inclusive

false

user

String

The user

Must not be empty. Size must be between 0 and 255 inclusive

false

version

String

The version

Must not be empty. Size must be between 0 and 255 inclusive

false

description

String

Any description

Size must be between 0 and 1000 inclusive

true

metadata

Object

Any semi-structured metadata. Must be valid JSON

true

tags

Array

The tags

true

setupFile

String

A location for any setup that needs to be done when installing

Size must be between 0 and 1024 inclusive

true

configs

Array

Any configuration files needed for the resource

true

status

String

The status of the command. Options: [ACTIVE, DEPRECATED, INACTIVE]

Must not be null

false

executable

String

The executable to run on the Genie node when this command is used. e.g. /usr/bin/hadoop

Must not be empty. Size must be between 0 and 1024 inclusive

false

executableAndArguments

Array

The executable and arguments to run on the Genie node when this command is used. e.g. /usr/bin/hadoop

Must not be empty

false

checkDelay

Number

Deprecated as of 4.3.0. Now is a no-op on the server side.

false

memory

Number

The default amount of memory (in MB) that should be allocated for instances of this command client

Must be at least 1

true

dependencies

Array

The dependencies for the command

true

clusterCriteria

Array

The priority ordered list of criteria to resolve clusters that this command can run jobs on

true

runtime

Object

The various job runtime parameters that should be used if this command is used

false

Relation Description

self

URI for this command

applications

Get all the applications this command depends on

clusters

Get all clusters this command is available on

HTTP Messages
Request
GET /api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/command HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:50:08 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 2195

{
  "id" : "cmd1",
  "created" : "2022-09-16T00:49:49.198Z",
  "updated" : "2022-09-16T00:49:49.227Z",
  "version" : "1.0",
  "user" : "genie",
  "name" : "Unix Bash command",
  "description" : null,
  "metadata" : null,
  "tags" : [ "genie.name:Unix Bash command", "bash", "genie.id:cmd1" ],
  "configs" : [ "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/cmd1/config2", "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/cmd1/GB18030.txt", "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/cmd1/config1" ],
  "dependencies" : [ "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/cluster1/dep1", "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/cluster1/dep2" ],
  "setupFile" : "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/cmd1/setupfile",
  "status" : "ACTIVE",
  "executable" : "/bin/bash",
  "executableAndArguments" : [ "/bin/bash" ],
  "checkDelay" : 10000,
  "memory" : null,
  "clusterCriteria" : [ {
    "id" : null,
    "name" : null,
    "version" : null,
    "status" : null,
    "tags" : [ "localhost" ]
  } ],
  "runtime" : {
    "resources" : {
      "cpu" : null,
      "gpu" : null,
      "memoryMb" : null,
      "diskMb" : null,
      "networkMbps" : null
    },
    "images" : { }
  },
  "_links" : {
    "self" : {
      "href" : "https://genie.example.com/api/v3/commands/cmd1"
    },
    "applications" : {
      "href" : "https://genie.example.com/api/v3/commands/cmd1/applications"
    },
    "clusters" : {
      "href" : "https://genie.example.com/api/v3/commands/cmd1/clusters{?status}",
      "templated" : true
    }
  }
}

6.12. Get the Applications a Job Command Used

6.12.1. Description

Get the list of applications that were used by the command selected by job to execute.

6.12.2. Endpoint

GET /api/v3/jobs/{id}/applications

6.12.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 12. /api/v3/jobs/{id}/applications
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/applications' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/applications'
Response Documentation
Headers
Name Description

Content-Type

application/hal+json

Payload Fields
Path Type Description Constraints Optional

[]

Array

The applications for the job

false

HTTP Messages
Request
GET /api/v3/jobs/52fdf5e3-f3e6-428b-9ad5-7dc265bb5f06/applications HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:50:08 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 2904

[ {
  "id" : "app1",
  "created" : "2022-09-16T00:49:49.131Z",
  "updated" : "2022-09-16T00:49:49.131Z",
  "version" : "1.0",
  "user" : "genie",
  "name" : "Application 1",
  "description" : null,
  "metadata" : null,
  "tags" : [ "genie.id:app1", "genie.name:Application 1" ],
  "configs" : [ "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/app1/config1", "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/app1/config2" ],
  "dependencies" : [ "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/app1/dep2", "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/app1/dep1" ],
  "setupFile" : "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/app1/setupfile",
  "status" : "ACTIVE",
  "type" : null,
  "links" : [ {
    "rel" : "self",
    "href" : "https://genie.example.com/api/v3/applications/app1"
  }, {
    "rel" : "commands",
    "href" : "https://genie.example.com/api/v3/applications/app1/commands{?status}"
  } ]
}, {
  "id" : "app2",
  "created" : "2022-09-16T00:49:49.150Z",
  "updated" : "2022-09-16T00:49:49.150Z",
  "version" : "1.0",
  "user" : "genie",
  "name" : "Application 2",
  "description" : null,
  "metadata" : null,
  "tags" : [ "genie.id:app2", "genie.name:Application 2" ],
  "configs" : [ "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/app2/config1", "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/app2/config2" ],
  "dependencies" : [ "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/app2/dep1", "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/app2/dep2" ],
  "setupFile" : "file:/home/travis/build/Netflix/genie/genie-web/build/resources/integTest/com/netflix/genie/web/apis/rest/v3/controllers/JobRestControllerIntegrationTests/app2/setupfile",
  "status" : "ACTIVE",
  "type" : null,
  "links" : [ {
    "rel" : "self",
    "href" : "https://genie.example.com/api/v3/applications/app2"
  }, {
    "rel" : "commands",
    "href" : "https://genie.example.com/api/v3/applications/app2/commands{?status}"
  } ]
} ]

7. Applications API

7.1. Create an Application

7.1.1. Description

Create a new application in the system.

7.1.2. Endpoint

POST /api/v3/applications

The id in this example is optional. If you include one Genie will use it. If not it will provide one. If you provide one it must be unique.

7.1.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Payload Fields
Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

name

String

The name

Must not be empty. Size must be between 0 and 255 inclusive

false

user

String

The user

Must not be empty. Size must be between 0 and 255 inclusive

false

version

String

The version

Must not be empty. Size must be between 0 and 255 inclusive

false

description

String

Any description

Size must be between 0 and 1000 inclusive

true

metadata

Object

Any semi-structured metadata. Must be valid JSON

true

tags

Array

The tags

true

setupFile

String

A location for any setup that needs to be done when installing

Size must be between 0 and 1024 inclusive

true

configs

Array

Any configuration files needed for the resource

true

type

String

The type of application this is (e.g. hadoop, presto, spark). Can be used to group.

true

status

String

The status of the application. Options: [ACTIVE, DEPRECATED, INACTIVE]

Must not be null

false

dependencies

Array

The dependencies for the application

true

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/applications' -i -X POST \
    -H 'Content-Type: application/json' \
    -d '{
  "id" : null,
  "created" : null,
  "updated" : null,
  "version" : "1.5.1",
  "user" : "genie",
  "name" : "spark",
  "description" : "Spark for Genie",
  "metadata" : null,
  "tags" : [ "type:spark", "ver:1.5.1" ],
  "configs" : [ "s3://mybucket/spark/1.5.1/spark-env.sh" ],
  "dependencies" : [ "s3://mybucket/spark/1.5.1/spark.tar.gz" ],
  "setupFile" : "s3://mybucket/spark/1.5.1/setupBase-spark.sh",
  "status" : "ACTIVE",
  "type" : "spark"
}'
HTTPie
$ echo '{
  "id" : null,
  "created" : null,
  "updated" : null,
  "version" : "1.5.1",
  "user" : "genie",
  "name" : "spark",
  "description" : "Spark for Genie",
  "metadata" : null,
  "tags" : [ "type:spark", "ver:1.5.1" ],
  "configs" : [ "s3://mybucket/spark/1.5.1/spark-env.sh" ],
  "dependencies" : [ "s3://mybucket/spark/1.5.1/spark.tar.gz" ],
  "setupFile" : "s3://mybucket/spark/1.5.1/setupBase-spark.sh",
  "status" : "ACTIVE",
  "type" : "spark"
}' | http POST 'https://genie.example.com/api/v3/applications' \
    'Content-Type:application/json'
Response Documentation
Headers
Name Description

Location

The URI

HTTP Messages
Request
POST /api/v3/applications HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 452

{
  "id" : null,
  "created" : null,
  "updated" : null,
  "version" : "1.5.1",
  "user" : "genie",
  "name" : "spark",
  "description" : "Spark for Genie",
  "metadata" : null,
  "tags" : [ "type:spark", "ver:1.5.1" ],
  "configs" : [ "s3://mybucket/spark/1.5.1/spark-env.sh" ],
  "dependencies" : [ "s3://mybucket/spark/1.5.1/spark.tar.gz" ],
  "setupFile" : "s3://mybucket/spark/1.5.1/setupBase-spark.sh",
  "status" : "ACTIVE",
  "type" : "spark"
}
Response
HTTP/1.1 201 Created
Location: https://genie.example.com/api/v3/applications/3ffc9fe1-c194-4e22-b0b3-abb68c860b0b
Date: Fri, 16 Sep 2022 00:48:55 GMT
Keep-Alive: timeout=60
Connection: keep-alive

7.2. Get an Application

7.2.1. Description

Get the metadata about an application in the system.

7.2.2. Endpoint

GET /api/v3/applications/{id}

7.2.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 13. /api/v3/applications/{id}
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/applications/3ffc9fe1-c194-4e22-b0b3-abb68c860b0b' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/applications/3ffc9fe1-c194-4e22-b0b3-abb68c860b0b'
Response Documentation
Headers
Name Description

Content-Type

application/hal+json

Payload Fields
Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

name

String

The name

Must not be empty. Size must be between 0 and 255 inclusive

false

user

String

The user

Must not be empty. Size must be between 0 and 255 inclusive

false

version

String

The version

Must not be empty. Size must be between 0 and 255 inclusive

false

description

String

Any description

Size must be between 0 and 1000 inclusive

true

metadata

Object

Any semi-structured metadata. Must be valid JSON

true

tags

Array

The tags

true

setupFile

String

A location for any setup that needs to be done when installing

Size must be between 0 and 1024 inclusive

true

configs

Array

Any configuration files needed for the resource

true

type

String

The type of application this is (e.g. hadoop, presto, spark). Can be used to group.

true

status

String

The status of the application. Options: [ACTIVE, DEPRECATED, INACTIVE]

Must not be null

false

dependencies

Array

The dependencies for the application

true

Relation Description

self

URI for this application

commands

Get all the commands using this application

HTTP Messages
Request
GET /api/v3/applications/3ffc9fe1-c194-4e22-b0b3-abb68c860b0b HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:48:55 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 910

{
  "id" : "3ffc9fe1-c194-4e22-b0b3-abb68c860b0b",
  "created" : "2022-09-16T00:48:55.995Z",
  "updated" : "2022-09-16T00:48:55.995Z",
  "version" : "1.5.1",
  "user" : "genie",
  "name" : "spark",
  "description" : "Spark for Genie",
  "metadata" : null,
  "tags" : [ "type:spark", "genie.id:3ffc9fe1-c194-4e22-b0b3-abb68c860b0b", "ver:1.5.1", "genie.name:spark" ],
  "configs" : [ "s3://mybucket/spark/1.5.1/spark-env.sh" ],
  "dependencies" : [ "s3://mybucket/spark/1.5.1/spark.tar.gz" ],
  "setupFile" : "s3://mybucket/spark/1.5.1/setupBase-spark.sh",
  "status" : "ACTIVE",
  "type" : "spark",
  "_links" : {
    "self" : {
      "href" : "https://genie.example.com/api/v3/applications/3ffc9fe1-c194-4e22-b0b3-abb68c860b0b"
    },
    "commands" : {
      "href" : "https://genie.example.com/api/v3/applications/3ffc9fe1-c194-4e22-b0b3-abb68c860b0b/commands{?status}",
      "templated" : true
    }
  }
}

7.3. Find Applications

7.3.1. Description

Find applications using various query parameters.

7.3.2. Endpoint

GET /api/v3/applications

7.3.3. API Docs

Request Documentation
Headers

None

Query Parameters
Parameter Description

page

The page number to get. Default to 0.

size

The size of the page to get. Default to 64.

sort

The fields to sort the results by. Defaults to 'updated,desc'.

name

The name of the applications to find. Use % to perform a regex like query

user

The user of the applications to find. Use % to perform a regex like query

status

The status(es) of the applications to find. Can have multiple. Options: [ACTIVE, DEPRECATED, INACTIVE]

tag

The tag(s) of the applications to find. Can have multiple.

type

The type of the applications to find. Use % to perform a regex like query

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/applications?status=ACTIVE&status=DEPRECATED&status=%5BACTIVE%2C+DEPRECATED%5D' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/applications?status=ACTIVE&status=DEPRECATED&status=%5BACTIVE%2C+DEPRECATED%5D'
Response Documentation
Headers
Name Description

Content-Type

application/hal+json

Payload Fields
Path Type Description Constraints Optional

_links

Object

Links to other resources.

false

page

Object

The result page information.

false

page.size

Number

The number of elements in this page result.

false

page.totalElements

Number

The total number of elements this search result could return.

false

page.totalPages

Number

The total number of pages there could be at the current page size.

false

page.number

Number

The current page number.

false

_embedded.applicationList

Array

The found applications.

false

Relation Description

self

The current search

first

The first page for this search

prev

The previous page for this search

next

The next page for this search

last

The last page for this search

HTTP Messages
Request
GET /api/v3/applications?status=ACTIVE&status=DEPRECATED&status=%5BACTIVE%2C+DEPRECATED%5D HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:48:53 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 6406

{
  "_embedded" : {
    "applicationList" : [ {
      "id" : "63827d36-af06-4ed7-b190-73242341bb12",
      "created" : "2022-09-16T00:48:52.154Z",
      "updated" : "2022-09-16T00:48:52.154Z",
      "version" : "1.0.0",
      "user" : "genieUser7",
      "name" : "hive",
      "description" : "Hive 1.0.0 for Genie",
      "metadata" : null,
      "tags" : [ "genie.id:63827d36-af06-4ed7-b190-73242341bb12", "type:hive", "genie.name:hive", "ver:1.0.0" ],
      "configs" : [ "s3://mybucket/hive/hive-env.sh", "s3://mybucket/hive/hive-log4j.properties" ],
      "dependencies" : [ "s3://mybucket/hive/hive-1.0.0.tar.gz" ],
      "setupFile" : "s3://mybucket/hive/setupBase-hive.sh",
      "status" : "ACTIVE",
      "type" : "hive",
      "_links" : {
        "self" : {
          "href" : "https://genie.example.com/api/v3/applications/63827d36-af06-4ed7-b190-73242341bb12"
        },
        "commands" : {
          "href" : "https://genie.example.com/api/v3/applications/63827d36-af06-4ed7-b190-73242341bb12/commands{?status}",
          "templated" : true
        }
      }
    }, {
      "id" : "e366e39d-8ff7-41e1-8ea9-8ed9421ee22d",
      "created" : "2022-09-16T00:48:52.066Z",
      "updated" : "2022-09-16T00:48:52.066Z",
      "version" : "0.4.0",
      "user" : "genieUser6",
      "name" : "spark",
      "description" : "Pig 0.15.0 for Genie",
      "metadata" : null,
      "tags" : [ "genie.id:e366e39d-8ff7-41e1-8ea9-8ed9421ee22d", "ver:0.15.0", "type:pig", "genie.name:spark" ],
      "configs" : [ "s3://mybucket/pig/pig.properties" ],
      "dependencies" : [ "s3://mybucket/pig/pig-0.15.0.tar.gz" ],
      "setupFile" : "s3://mybucket/pig/setupBase-pig.sh",
      "status" : "ACTIVE",
      "type" : "pig",
      "_links" : {
        "self" : {
          "href" : "https://genie.example.com/api/v3/applications/e366e39d-8ff7-41e1-8ea9-8ed9421ee22d"
        },
        "commands" : {
          "href" : "https://genie.example.com/api/v3/applications/e366e39d-8ff7-41e1-8ea9-8ed9421ee22d/commands{?status}",
          "templated" : true
        }
      }
    }, {
      "id" : "e3e52227-450b-46ed-ba74-04c1d6c63752",
      "created" : "2022-09-16T00:48:51.990Z",
      "updated" : "2022-09-16T00:48:51.990Z",
      "version" : "1.3.1",
      "user" : "genieUser5",
      "name" : "spark",
      "description" : "Spark 1.3.1 for Genie",
      "metadata" : null,
      "tags" : [ "genie.id:e3e52227-450b-46ed-ba74-04c1d6c63752", "type:spark", "ver:1.3.1", "genie.name:spark" ],
      "configs" : [ "s3://mybucket/spark/spark-env.sh" ],
      "dependencies" : [ "s3://mybucket/spark/spark-1.3.1.tar.gz" ],
      "setupFile" : "s3://mybucket/spark/setupBase-spark.sh",
      "status" : "DEPRECATED",
      "type" : "spark",
      "_links" : {
        "self" : {
          "href" : "https://genie.example.com/api/v3/applications/e3e52227-450b-46ed-ba74-04c1d6c63752"
        },
        "commands" : {
          "href" : "https://genie.example.com/api/v3/applications/e3e52227-450b-46ed-ba74-04c1d6c63752/commands{?status}",
          "templated" : true
        }
      }
    }, {
      "id" : "d77ac97a-57d8-4df4-976b-ae308b17d6d8",
      "created" : "2022-09-16T00:48:51.833Z",
      "updated" : "2022-09-16T00:48:51.833Z",
      "version" : "1.4.0",
      "user" : "genieUser4",
      "name" : "spark",
      "description" : "Spark 1.4.0 for Genie",
      "metadata" : null,
      "tags" : [ "genie.id:d77ac97a-57d8-4df4-976b-ae308b17d6d8", "type:spark", "ver:1.4.0", "genie.name:spark" ],
      "configs" : [ "s3://mybucket/spark/spark-env.sh" ],
      "dependencies" : [ "s3://mybucket/spark/spark-1.4.0.tar.gz" ],
      "setupFile" : "s3://mybucket/spark/setupBase-spark.sh",
      "status" : "DEPRECATED",
      "type" : "spark",
      "_links" : {
        "self" : {
          "href" : "https://genie.example.com/api/v3/applications/d77ac97a-57d8-4df4-976b-ae308b17d6d8"
        },
        "commands" : {
          "href" : "https://genie.example.com/api/v3/applications/d77ac97a-57d8-4df4-976b-ae308b17d6d8/commands{?status}",
          "templated" : true
        }
      }
    }, {
      "id" : "9cf565ba-8590-4093-86d9-f9c628a66129",
      "created" : "2022-09-16T00:48:51.618Z",
      "updated" : "2022-09-16T00:48:51.618Z",
      "version" : "1.5.0",
      "user" : "genieUser2",
      "name" : "spark",
      "description" : "Spark 1.5.0 for Genie",
      "metadata" : null,
      "tags" : [ "genie.id:9cf565ba-8590-4093-86d9-f9c628a66129", "type:spark", "ver:1.5.0", "genie.name:spark" ],
      "configs" : [ "s3://mybucket/spark/spark-env.sh" ],
      "dependencies" : [ "s3://mybucket/spark/spark-1.5.0.tar.gz" ],
      "setupFile" : "s3://mybucket/spark/setupBase-spark.sh",
      "status" : "ACTIVE",
      "type" : "spark",
      "_links" : {
        "self" : {
          "href" : "https://genie.example.com/api/v3/applications/9cf565ba-8590-4093-86d9-f9c628a66129"
        },
        "commands" : {
          "href" : "https://genie.example.com/api/v3/applications/9cf565ba-8590-4093-86d9-f9c628a66129/commands{?status}",
          "templated" : true
        }
      }
    }, {
      "id" : "a9b12f0d-0388-482b-8fa1-aeb666ee5b42",
      "created" : "2022-09-16T00:48:51.422Z",
      "updated" : "2022-09-16T00:48:51.422Z",
      "version" : "1.5.1",
      "user" : "genieUser1",
      "name" : "spark",
      "description" : "Spark 1.5.1 for Genie",
      "metadata" : null,
      "tags" : [ "type:spark", "genie.id:a9b12f0d-0388-482b-8fa1-aeb666ee5b42", "ver:1.5.1", "genie.name:spark" ],
      "configs" : [ "s3://mybucket/spark/spark-env.sh" ],
      "dependencies" : [ "s3://mybucket/spark/spark-1.5.1.tar.gz" ],
      "setupFile" : "s3://mybucket/spark/setupBase-spark.sh",
      "status" : "ACTIVE",
      "type" : "spark",
      "_links" : {
        "self" : {
          "href" : "https://genie.example.com/api/v3/applications/a9b12f0d-0388-482b-8fa1-aeb666ee5b42"
        },
        "commands" : {
          "href" : "https://genie.example.com/api/v3/applications/a9b12f0d-0388-482b-8fa1-aeb666ee5b42/commands{?status}",
          "templated" : true
        }
      }
    } ]
  },
  "_links" : {
    "self" : {
      "href" : "https://genie.example.com/api/v3/applications?status=ACTIVE&status=DEPRECATED{&name,user,tag,type}",
      "templated" : true
    }
  },
  "page" : {
    "size" : 10,
    "totalElements" : 6,
    "totalPages" : 1,
    "number" : 0
  }
}

7.4. Update an Entire Application

7.4.1. Description

Update the metadata about an application. This method does a complete replace of the resource. Usual flow is to call to get the most recent state then update what you want and call this API with the result.

For more fine grained control call the PATCH API.

7.4.2. Endpoint

PUT /api/v3/applications/{id}

7.4.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 14. /api/v3/applications/{id}
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

name

String

The name

Must not be empty. Size must be between 0 and 255 inclusive

false

user

String

The user

Must not be empty. Size must be between 0 and 255 inclusive

false

version

String

The version

Must not be empty. Size must be between 0 and 255 inclusive

false

description

String

Any description

Size must be between 0 and 1000 inclusive

true

metadata

Object

Any semi-structured metadata. Must be valid JSON

true

tags

Array

The tags

true

setupFile

String

A location for any setup that needs to be done when installing

Size must be between 0 and 1024 inclusive

true

configs

Array

Any configuration files needed for the resource

true

type

String

The type of application this is (e.g. hadoop, presto, spark). Can be used to group.

true

status

String

The status of the application. Options: [ACTIVE, DEPRECATED, INACTIVE]

Must not be null

false

dependencies

Array

The dependencies for the application

true

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07' -i -X PUT \
    -H 'Content-Type: application/json' \
    -d '{
  "id" : "2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07",
  "created" : "2022-09-16T00:48:57.804Z",
  "updated" : "2022-09-16T00:48:57.804Z",
  "version" : "1.5.1",
  "user" : "genie",
  "name" : "spark",
  "description" : null,
  "metadata" : null,
  "tags" : [ "genie.id:2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07", "genie.name:spark" ],
  "configs" : [ ],
  "dependencies" : [ ],
  "setupFile" : null,
  "status" : "INACTIVE",
  "type" : null
}'
HTTPie
$ echo '{
  "id" : "2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07",
  "created" : "2022-09-16T00:48:57.804Z",
  "updated" : "2022-09-16T00:48:57.804Z",
  "version" : "1.5.1",
  "user" : "genie",
  "name" : "spark",
  "description" : null,
  "metadata" : null,
  "tags" : [ "genie.id:2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07", "genie.name:spark" ],
  "configs" : [ ],
  "dependencies" : [ ],
  "setupFile" : null,
  "status" : "INACTIVE",
  "type" : null
}' | http PUT 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07' \
    'Content-Type:application/json'
HTTP Messages
Request
PUT /api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07 HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 508

{
  "id" : "2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07",
  "created" : "2022-09-16T00:48:57.804Z",
  "updated" : "2022-09-16T00:48:57.804Z",
  "version" : "1.5.1",
  "user" : "genie",
  "name" : "spark",
  "description" : null,
  "metadata" : null,
  "tags" : [ "genie.id:2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07", "genie.name:spark" ],
  "configs" : [ ],
  "dependencies" : [ ],
  "setupFile" : null,
  "status" : "INACTIVE",
  "type" : null
}
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:48:57 GMT
Keep-Alive: timeout=60
Connection: keep-alive

7.5. Update Parts of an Application

7.5.1. Description

Update the metadata about an application using JSON Patch. This will ONLY update the fields you request be changed.

For more information about JSON Patch RFC see the website.

7.5.2. Endpoint

PATCH /api/v3/applications/{id}

7.5.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 15. /api/v3/applications/{id}
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of patches to apply

false

[].op

String

Patch operation to perform.

add, remove, replace, copy, move, test

false

[].path

String

The json path to operate on. e.g. /user

false

[].from

String

The json path to move or copy from. e.g. /user

true

[].value

String

The json value to put at the path for an add, replace or test

true

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07' -i -X PATCH \
    -H 'Content-Type: application/json' \
    -d '[ {
  "op" : "replace",
  "path" : "/user",
  "value" : "e31cad65-dd73-4fd5-a2e0-12088a8fe61a"
} ]'
HTTPie
$ echo '[ {
  "op" : "replace",
  "path" : "/user",
  "value" : "e31cad65-dd73-4fd5-a2e0-12088a8fe61a"
} ]' | http PATCH 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07' \
    'Content-Type:application/json'
HTTP Messages
Request
PATCH /api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07 HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 98

[ {
  "op" : "replace",
  "path" : "/user",
  "value" : "e31cad65-dd73-4fd5-a2e0-12088a8fe61a"
} ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:48:50 GMT
Keep-Alive: timeout=60
Connection: keep-alive

7.6. Delete All Applications

7.6.1. Description

Delete all the applications currently stored in the system.

7.6.2. Endpoint

DELETE /api/v3/applications

7.6.3. API Docs

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/applications' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/applications'
HTTP Messages
Request
DELETE /api/v3/applications HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:48:56 GMT
Keep-Alive: timeout=60
Connection: keep-alive

7.7. Delete an Application

7.7.1. Description

Delete an application currently configured in the system.

7.7.2. Endpoint

DELETE /api/v3/applications/{id}

7.7.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 16. /api/v3/applications/{id}
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/applications/fdfaba27-7cb6-48dc-850c-c80795f75193' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/applications/fdfaba27-7cb6-48dc-850c-c80795f75193'
HTTP Messages
Request
DELETE /api/v3/applications/fdfaba27-7cb6-48dc-850c-c80795f75193 HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:48:56 GMT
Keep-Alive: timeout=60
Connection: keep-alive

7.8. Get Configs for Application

7.8.1. Description

Get the configuration file locations for an application.

7.8.2. Endpoint

GET /api/v3/applications/{id}/configs

7.8.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 17. /api/v3/applications/{id}/configs
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/configs' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/configs'
Response Documentation
Headers
Name Description

Content-Type

application/json

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of configuration file locations

false

HTTP Messages
Request
GET /api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/configs HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:48:59 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 82

[ "deb441f5-f38c-4202-92e5-df252e155cd8", "02e98fed-47a1-48e6-8632-dbb4e62ae862" ]

7.9. Add Configs to Application

7.9.1. Description

Add configuration file locations to an existing application. Configurations are stored as a set so any duplicates will be ignored.

7.9.2. Endpoint

POST /api/v3/applications/{id}/configs

7.9.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 18. /api/v3/applications/{id}/configs
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of configuration file locations

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/configs' -i -X POST \
    -H 'Content-Type: application/json' \
    -d '[ "02e98fed-47a1-48e6-8632-dbb4e62ae862", "deb441f5-f38c-4202-92e5-df252e155cd8" ]'
HTTPie
$ echo '[ "02e98fed-47a1-48e6-8632-dbb4e62ae862", "deb441f5-f38c-4202-92e5-df252e155cd8" ]' | http POST 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/configs' \
    'Content-Type:application/json'
HTTP Messages
Request
POST /api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/configs HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 82

[ "02e98fed-47a1-48e6-8632-dbb4e62ae862", "deb441f5-f38c-4202-92e5-df252e155cd8" ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:48:59 GMT
Keep-Alive: timeout=60
Connection: keep-alive

7.10. Update Configs for an Application

7.10.1. Description

Update the configuration file locations for an existing application. Stored as a set so duplicates are ignored.

7.10.2. Endpoint

PUT /api/v3/applications/{id}/configs

7.10.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 19. /api/v3/applications/{id}/configs
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of configuration file locations

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/configs' -i -X PUT \
    -H 'Content-Type: application/json' \
    -d '[ "b50bbfd2-18be-4dbe-bc2f-41fc576b22b5" ]'
HTTPie
$ echo '[ "b50bbfd2-18be-4dbe-bc2f-41fc576b22b5" ]' | http PUT 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/configs' \
    'Content-Type:application/json'
HTTP Messages
Request
PUT /api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/configs HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 42

[ "b50bbfd2-18be-4dbe-bc2f-41fc576b22b5" ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:48:57 GMT
Keep-Alive: timeout=60
Connection: keep-alive

7.11. Remove All Configs From an Application

7.11.1. Description

Remove all the configuration file locations for an existing application.

7.11.2. Endpoint

DELETE /api/v3/applications/{id}/configs

7.11.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 20. /api/v3/applications/{id}/configs
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/configs' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/configs'
HTTP Messages
Request
DELETE /api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/configs HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:48:58 GMT
Keep-Alive: timeout=60
Connection: keep-alive

7.12. Get Dependencies For an Application

7.12.1. Description

Get the dependency file locations for an application.

7.12.2. Endpoint

GET /api/v3/applications/{id}/dependencies

7.12.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 21. /api/v3/applications/{id}/dependencies
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/dependencies' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/dependencies'
Response Documentation
Headers
Name Description

Content-Type

application/json

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of dependency file locations

false

HTTP Messages
Request
GET /api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/dependencies HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:48:56 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 82

[ "102d6a3c-1bb0-4805-9f45-af21682ab271", "008f6307-4260-4907-97a0-0947311bc482" ]

7.13. Add Dependencies to Application

7.13.1. Description

Add dependency file locations to an existing application. Stored as a set so all duplicates are ignored.

7.13.2. Endpoint

POST /api/v3/applications/{id}/dependencies

7.13.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 22. /api/v3/applications/{id}/dependencies
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of dependency file locations

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/dependencies' -i -X POST \
    -H 'Content-Type: application/json' \
    -d '[ "008f6307-4260-4907-97a0-0947311bc482", "102d6a3c-1bb0-4805-9f45-af21682ab271" ]'
HTTPie
$ echo '[ "008f6307-4260-4907-97a0-0947311bc482", "102d6a3c-1bb0-4805-9f45-af21682ab271" ]' | http POST 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/dependencies' \
    'Content-Type:application/json'
HTTP Messages
Request
POST /api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/dependencies HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 82

[ "008f6307-4260-4907-97a0-0947311bc482", "102d6a3c-1bb0-4805-9f45-af21682ab271" ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:48:56 GMT
Keep-Alive: timeout=60
Connection: keep-alive

7.14. Update Dependencies for an Application

7.14.1. Description

Update the dependency file locations for an existing application

7.14.2. Endpoint

PUT /api/v3/applications/{id}/dependencies

7.14.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 23. /api/v3/applications/{id}/dependencies
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of dependency file locations

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/dependencies' -i -X PUT \
    -H 'Content-Type: application/json' \
    -d '[ "6ec6c3fd-7c8d-494e-88da-3a8c235dc934" ]'
HTTPie
$ echo '[ "6ec6c3fd-7c8d-494e-88da-3a8c235dc934" ]' | http PUT 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/dependencies' \
    'Content-Type:application/json'
HTTP Messages
Request
PUT /api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/dependencies HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 42

[ "6ec6c3fd-7c8d-494e-88da-3a8c235dc934" ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:48:59 GMT
Keep-Alive: timeout=60
Connection: keep-alive

7.15. Remove All Dependencies From an Application

7.15.1. Description

Remove all the dependency file locations for an existing application.

7.15.2. Endpoint

DELETE /api/v3/applications/{id}/dependencies

7.15.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 24. /api/v3/applications/{id}/dependencies
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/dependencies' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/dependencies'
HTTP Messages
Request
DELETE /api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/dependencies HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:48:58 GMT
Keep-Alive: timeout=60
Connection: keep-alive

7.16. Get Tags For an Application

7.16.1. Description

Get the tags for an application.

7.16.2. Endpoint

GET /api/v3/applications/{id}/tags

7.16.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 25. /api/v3/applications/{id}/tags
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/tags' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/tags'
Response Documentation
Headers
Name Description

Content-Type

application/json

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of tags

false

HTTP Messages
Request
GET /api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/tags HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:48:56 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 188

[ "5dddbfdf-44ac-46bf-92d4-71a9e1eb2cd1", "genie.id:2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07", "genie.name:spark", "7fab86b9-a394-423f-8d19-f0c47723d3db" ]

7.17. Add Tags to Application

7.17.1. Description

Add tags to an existing application. Stored as a set so all duplicates are ignored.

genie.id:{id} and genie.name:{name} tags are automatically added by the service.

7.17.2. Endpoint

POST /api/v3/applications/{id}/tags

7.17.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 26. /api/v3/applications/{id}/tags
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of tags

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/tags' -i -X POST \
    -H 'Content-Type: application/json' \
    -d '[ "5dddbfdf-44ac-46bf-92d4-71a9e1eb2cd1", "7fab86b9-a394-423f-8d19-f0c47723d3db" ]'
HTTPie
$ echo '[ "5dddbfdf-44ac-46bf-92d4-71a9e1eb2cd1", "7fab86b9-a394-423f-8d19-f0c47723d3db" ]' | http POST 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/tags' \
    'Content-Type:application/json'
HTTP Messages
Request
POST /api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/tags HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 82

[ "5dddbfdf-44ac-46bf-92d4-71a9e1eb2cd1", "7fab86b9-a394-423f-8d19-f0c47723d3db" ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:48:56 GMT
Keep-Alive: timeout=60
Connection: keep-alive

7.18. Update Tags for an Application

7.18.1. Description

Update the tags for an existing application.

The genie.id:{id} and genie.name:{name} tags can’t be removed. They will automatically be added back by the system.

7.18.2. Endpoint

PUT /api/v3/applications/{id}/tags

7.18.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 27. /api/v3/applications/{id}/tags
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of tags

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/tags' -i -X PUT \
    -H 'Content-Type: application/json' \
    -d '[ "b7239dd3-ea2b-465b-8110-f44027e6911c" ]'
HTTPie
$ echo '[ "b7239dd3-ea2b-465b-8110-f44027e6911c" ]' | http PUT 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/tags' \
    'Content-Type:application/json'
HTTP Messages
Request
PUT /api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/tags HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 42

[ "b7239dd3-ea2b-465b-8110-f44027e6911c" ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:48:55 GMT
Keep-Alive: timeout=60
Connection: keep-alive

7.19. Remove All Tags From Application

7.19.1. Description

Remove all the tags for an existing application

The genie.id:{id} and genie.name:{name} tags will NOT be removed by this operation

7.19.2. Endpoint

DELETE /api/v3/applications/{id}/tags

7.19.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 28. /api/v3/applications/{id}/tags
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/tags' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/tags'
HTTP Messages
Request
DELETE /api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/tags HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:48:58 GMT
Keep-Alive: timeout=60
Connection: keep-alive

7.20. Remove Tag From Application

7.20.1. Description

Remove a tag from an existing application.

You can’t remove the genie.id:{id} and genie.name:{name} tags. They will just be added back by the system

7.20.2. Endpoint

DELETE /api/v3/applications/{id}/tags/{tag}

7.20.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 29. /api/v3/applications/{id}/tags/{tag}
Parameter Description

id

The resource id

tag

The tag to remove

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/tags/0ab2ac6a-0342-43d9-8829-51c0493e9b7e' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/tags/0ab2ac6a-0342-43d9-8829-51c0493e9b7e'
HTTP Messages
Request
DELETE /api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/tags/0ab2ac6a-0342-43d9-8829-51c0493e9b7e HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:48:54 GMT
Keep-Alive: timeout=60
Connection: keep-alive

7.21. Get the Commands that Use an Application

7.21.1. Description

Search the commands that use the given application.

7.21.2. Endpoint

GET /api/v3/applications/{id}/commands

7.21.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 30. /api/v3/applications/{id}/commands
Parameter Description

id

The resource id

Query Parameters
Parameter Description

status

The status of commands to search for

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/commands?status=ACTIVE&status=INACTIVE&status=%5BACTIVE%2C+INACTIVE%5D' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/commands?status=ACTIVE&status=INACTIVE&status=%5BACTIVE%2C+INACTIVE%5D'
Response Documentation
Headers
Name Description

Content-Type

application/hal+json

Payload Fields
Path Type Description Constraints Optional

[]

Array

The list of commands found

false

HTTP Messages
Request
GET /api/v3/applications/2ebee039-71c0-4a2c-8ac3-6ad92d3b09a4.a688eedd-e0e8-4999-94df-01d59adbdb07/commands?status=ACTIVE&status=INACTIVE&status=%5BACTIVE%2C+INACTIVE%5D HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:48:58 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 1283

[ {
  "id" : "a90b567a-4f81-484f-8da1-05d6f2ec6615",
  "created" : "2022-09-16T00:48:58.611Z",
  "updated" : "2022-09-16T00:48:58.742Z",
  "version" : "32b6dec1-ebd1-4dc6-b330-a29a15ca33d8",
  "user" : "32b6dec1-ebd1-4dc6-b330-a29a15ca33d8",
  "name" : "32b6dec1-ebd1-4dc6-b330-a29a15ca33d8",
  "description" : null,
  "metadata" : null,
  "tags" : [ "genie.id:a90b567a-4f81-484f-8da1-05d6f2ec6615", "genie.name:32b6dec1-ebd1-4dc6-b330-a29a15ca33d8" ],
  "configs" : [ ],
  "dependencies" : [ ],
  "setupFile" : null,
  "status" : "ACTIVE",
  "executable" : "bash",
  "executableAndArguments" : [ "bash" ],
  "checkDelay" : 10000,
  "memory" : null,
  "clusterCriteria" : [ ],
  "runtime" : {
    "resources" : {
      "cpu" : null,
      "gpu" : null,
      "memoryMb" : null,
      "diskMb" : null,
      "networkMbps" : null
    },
    "images" : { }
  },
  "links" : [ {
    "rel" : "self",
    "href" : "https://genie.example.com/api/v3/commands/a90b567a-4f81-484f-8da1-05d6f2ec6615"
  }, {
    "rel" : "applications",
    "href" : "https://genie.example.com/api/v3/commands/a90b567a-4f81-484f-8da1-05d6f2ec6615/applications"
  }, {
    "rel" : "clusters",
    "href" : "https://genie.example.com/api/v3/commands/a90b567a-4f81-484f-8da1-05d6f2ec6615/clusters{?status}"
  } ]
} ]

8. Clusters API

8.1. Create a Cluster

8.1.1. Description

Create a new cluster in the system.

8.1.2. Endpoint

POST /api/v3/clusters

The id in this example is optional. If you include one Genie will use it. If not it will provide one. If you provide one it must be unique.

8.1.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Payload Fields
Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

name

String

The name

Must not be empty. Size must be between 0 and 255 inclusive

false

user

String

The user

Must not be empty. Size must be between 0 and 255 inclusive

false

version

String

The version

Must not be empty. Size must be between 0 and 255 inclusive

false

description

String

Any description

Size must be between 0 and 1000 inclusive

true

metadata

Object

Any semi-structured metadata. Must be valid JSON

true

tags

Array

The tags

true

setupFile

String

A location for any setup that needs to be done when installing

Size must be between 0 and 1024 inclusive

true

configs

Array

Any configuration files needed for the resource

true

status

String

The status of the cluster. Options: [UP, OUT_OF_SERVICE, TERMINATED]

Must not be null

false

dependencies

Array

The dependencies for the cluster

true

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters' -i -X POST \
    -H 'Content-Type: application/json' \
    -d '{
  "id" : null,
  "created" : null,
  "updated" : null,
  "version" : "2.7.1",
  "user" : "genie",
  "name" : "h2prod",
  "description" : null,
  "metadata" : null,
  "tags" : [ ],
  "configs" : [ ],
  "dependencies" : [ ],
  "setupFile" : null,
  "status" : "UP"
}'
HTTPie
$ echo '{
  "id" : null,
  "created" : null,
  "updated" : null,
  "version" : "2.7.1",
  "user" : "genie",
  "name" : "h2prod",
  "description" : null,
  "metadata" : null,
  "tags" : [ ],
  "configs" : [ ],
  "dependencies" : [ ],
  "setupFile" : null,
  "status" : "UP"
}' | http POST 'https://genie.example.com/api/v3/clusters' \
    'Content-Type:application/json'
Response Documentation
Headers
Name Description

Location

The URI

HTTP Messages
Request
POST /api/v3/clusters HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 266

{
  "id" : null,
  "created" : null,
  "updated" : null,
  "version" : "2.7.1",
  "user" : "genie",
  "name" : "h2prod",
  "description" : null,
  "metadata" : null,
  "tags" : [ ],
  "configs" : [ ],
  "dependencies" : [ ],
  "setupFile" : null,
  "status" : "UP"
}
Response
HTTP/1.1 201 Created
Location: https://genie.example.com/api/v3/clusters/012132e3-0d26-40e0-a967-57bafbbe1329
Date: Fri, 16 Sep 2022 00:48:59 GMT
Keep-Alive: timeout=60
Connection: keep-alive

8.2. Get a Cluster

8.2.1. Description

Get the metadata about a cluster in the system.

8.2.2. Endpoint

GET /api/v3/clusters/{id}

8.2.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 31. /api/v3/clusters/{id}
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters/012132e3-0d26-40e0-a967-57bafbbe1329' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/clusters/012132e3-0d26-40e0-a967-57bafbbe1329'
Response Documentation
Headers
Name Description

Content-Type

application/hal+json

Payload Fields
Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

name

String

The name

Must not be empty. Size must be between 0 and 255 inclusive

false

user

String

The user

Must not be empty. Size must be between 0 and 255 inclusive

false

version

String

The version

Must not be empty. Size must be between 0 and 255 inclusive

false

description

String

Any description

Size must be between 0 and 1000 inclusive

true

metadata

Object

Any semi-structured metadata. Must be valid JSON

true

tags

Array

The tags

true

setupFile

String

A location for any setup that needs to be done when installing

Size must be between 0 and 1024 inclusive

true

configs

Array

Any configuration files needed for the resource

true

status

String

The status of the cluster. Options: [UP, OUT_OF_SERVICE, TERMINATED]

Must not be null

false

dependencies

Array

The dependencies for the cluster

true

Relation Description

self

URI for this cluster

commands

Get all the commands this cluster can use

HTTP Messages
Request
GET /api/v3/clusters/012132e3-0d26-40e0-a967-57bafbbe1329 HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:48:59 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 716

{
  "id" : "012132e3-0d26-40e0-a967-57bafbbe1329",
  "created" : "2022-09-16T00:49:00.668Z",
  "updated" : "2022-09-16T00:49:00.668Z",
  "version" : "2.7.1",
  "user" : "genie",
  "name" : "h2prod",
  "description" : null,
  "metadata" : null,
  "tags" : [ "genie.name:h2prod", "genie.id:012132e3-0d26-40e0-a967-57bafbbe1329" ],
  "configs" : [ ],
  "dependencies" : [ ],
  "setupFile" : null,
  "status" : "UP",
  "_links" : {
    "self" : {
      "href" : "https://genie.example.com/api/v3/clusters/012132e3-0d26-40e0-a967-57bafbbe1329"
    },
    "commands" : {
      "href" : "https://genie.example.com/api/v3/clusters/012132e3-0d26-40e0-a967-57bafbbe1329/commands{?status}",
      "templated" : true
    }
  }
}

8.3. Find Clusters

8.3.1. Description

Find clusters using various query parameters.

8.3.2. Endpoint

GET /api/v3/clusters

8.3.3. API Docs

Request Documentation
Headers

None

Query Parameters
Parameter Description

page

The page number to get. Default to 0.

size

The size of the page to get. Default to 64.

sort

The fields to sort the results by. Defaults to 'updated,desc'.

name

The name of the clusters to find. Use % to perform a regex like query

status

The status(es) of the clusters to find. Can have multiple. Options: [UP, OUT_OF_SERVICE, TERMINATED]

tag

The tag(s) of the clusters to find. Can have multiple.

minUpdateTime

The minimum time (in milliseconds from epoch UTC) that the cluster(s) were updated at.

maxUpdateTime

The maximum time (in milliseconds from epoch UTC) that the cluster(s) were updated at.

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters?tag=genie.id%3A827493ee-d0b0-4b81-83c6-f6a329616438' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/clusters?tag=genie.id%3A827493ee-d0b0-4b81-83c6-f6a329616438'
Response Documentation
Headers
Name Description

Content-Type

application/hal+json

Payload Fields
Path Type Description Constraints Optional

_links

Object

Links to other resources.

false

page

Object

The result page information.

false

page.size

Number

The number of elements in this page result.

false

page.totalElements

Number

The total number of elements this search result could return.

false

page.totalPages

Number

The total number of pages there could be at the current page size.

false

page.number

Number

The current page number.

false

_embedded.clusterList

Array

The found clusters.

false

Relation Description

self

The current search

first

The first page for this search

prev

The previous page for this search

next

The next page for this search

last

The last page for this search

HTTP Messages
Request
GET /api/v3/clusters?tag=genie.id%3A827493ee-d0b0-4b81-83c6-f6a329616438 HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:49:07 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 1298

{
  "_embedded" : {
    "clusterList" : [ {
      "id" : "827493ee-d0b0-4b81-83c6-f6a329616438",
      "created" : "2022-09-16T00:49:05.599Z",
      "updated" : "2022-09-16T00:49:05.599Z",
      "version" : "3acdea04-7afc-422f-813f-f3a084189e79",
      "user" : "8a79948e-2a41-43ef-b963-ebe116d256de",
      "name" : "5cbb968a-7a88-46d6-9166-acf1343d2559",
      "description" : null,
      "metadata" : null,
      "tags" : [ "genie.name:5cbb968a-7a88-46d6-9166-acf1343d2559", "genie.id:827493ee-d0b0-4b81-83c6-f6a329616438" ],
      "configs" : [ ],
      "dependencies" : [ ],
      "setupFile" : null,
      "status" : "UP",
      "_links" : {
        "self" : {
          "href" : "https://genie.example.com/api/v3/clusters/827493ee-d0b0-4b81-83c6-f6a329616438"
        },
        "commands" : {
          "href" : "https://genie.example.com/api/v3/clusters/827493ee-d0b0-4b81-83c6-f6a329616438/commands{?status}",
          "templated" : true
        }
      }
    } ]
  },
  "_links" : {
    "self" : {
      "href" : "https://genie.example.com/api/v3/clusters?tag=genie.id%3A827493ee-d0b0-4b81-83c6-f6a329616438{&name,status,minUpdateTime,maxUpdateTime}",
      "templated" : true
    }
  },
  "page" : {
    "size" : 1,
    "totalElements" : 1,
    "totalPages" : 1,
    "number" : 0
  }
}

8.4. Update an Entire Cluster

8.4.1. Description

Update the metadata about a cluster. This method does a complete replace of the resource. Usual flow is to call to get the most recent state then update what you want and call this API with the result.

For more fine grained control call the PATCH API.

8.4.2. Endpoint

PUT /api/v3/clusters/{id}

8.4.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 32. /api/v3/clusters/{id}
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

name

String

The name

Must not be empty. Size must be between 0 and 255 inclusive

false

user

String

The user

Must not be empty. Size must be between 0 and 255 inclusive

false

version

String

The version

Must not be empty. Size must be between 0 and 255 inclusive

false

description

String

Any description

Size must be between 0 and 1000 inclusive

true

metadata

Object

Any semi-structured metadata. Must be valid JSON

true

tags

Array

The tags

true

setupFile

String

A location for any setup that needs to be done when installing

Size must be between 0 and 1024 inclusive

true

configs

Array

Any configuration files needed for the resource

true

status

String

The status of the cluster. Options: [UP, OUT_OF_SERVICE, TERMINATED]

Must not be null

false

dependencies

Array

The dependencies for the cluster

true

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d' -i -X PUT \
    -H 'Content-Type: application/json' \
    -d '{
  "id" : "49fe0fc2-f1fa-4c63-ad02-9ba96fce368d",
  "created" : "2022-09-16T00:49:08.931Z",
  "updated" : "2022-09-16T00:49:08.931Z",
  "version" : "2.7.1",
  "user" : "genie",
  "name" : "h2prod",
  "description" : null,
  "metadata" : null,
  "tags" : [ "genie.name:h2prod", "genie.id:49fe0fc2-f1fa-4c63-ad02-9ba96fce368d" ],
  "configs" : [ ],
  "dependencies" : [ ],
  "setupFile" : null,
  "status" : "OUT_OF_SERVICE"
}'
HTTPie
$ echo '{
  "id" : "49fe0fc2-f1fa-4c63-ad02-9ba96fce368d",
  "created" : "2022-09-16T00:49:08.931Z",
  "updated" : "2022-09-16T00:49:08.931Z",
  "version" : "2.7.1",
  "user" : "genie",
  "name" : "h2prod",
  "description" : null,
  "metadata" : null,
  "tags" : [ "genie.name:h2prod", "genie.id:49fe0fc2-f1fa-4c63-ad02-9ba96fce368d" ],
  "configs" : [ ],
  "dependencies" : [ ],
  "setupFile" : null,
  "status" : "OUT_OF_SERVICE"
}' | http PUT 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d' \
    'Content-Type:application/json'
HTTP Messages
Request
PUT /api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 425

{
  "id" : "49fe0fc2-f1fa-4c63-ad02-9ba96fce368d",
  "created" : "2022-09-16T00:49:08.931Z",
  "updated" : "2022-09-16T00:49:08.931Z",
  "version" : "2.7.1",
  "user" : "genie",
  "name" : "h2prod",
  "description" : null,
  "metadata" : null,
  "tags" : [ "genie.name:h2prod", "genie.id:49fe0fc2-f1fa-4c63-ad02-9ba96fce368d" ],
  "configs" : [ ],
  "dependencies" : [ ],
  "setupFile" : null,
  "status" : "OUT_OF_SERVICE"
}
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:08 GMT
Keep-Alive: timeout=60
Connection: keep-alive

8.5. Update Parts of a Cluster

8.5.1. Description

Update the metadata about a cluster using JSON Patch. This will ONLY update the fields you request be changed.

For more information about JSON Patch RFC see the website.

8.5.2. Endpoint

PATCH /api/v3/clusters/{id}

8.5.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 33. /api/v3/clusters/{id}
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of patches to apply

false

[].op

String

Patch operation to perform.

add, remove, replace, copy, move, test

false

[].path

String

The json path to operate on. e.g. /user

false

[].from

String

The json path to move or copy from. e.g. /user

true

[].value

String

The json value to put at the path for an add, replace or test

true

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d' -i -X PATCH \
    -H 'Content-Type: application/json' \
    -d '[ {
  "op" : "replace",
  "path" : "/name",
  "value" : "839ad0e4-313f-4fe2-9879-bce135e91de3"
} ]'
HTTPie
$ echo '[ {
  "op" : "replace",
  "path" : "/name",
  "value" : "839ad0e4-313f-4fe2-9879-bce135e91de3"
} ]' | http PATCH 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d' \
    'Content-Type:application/json'
HTTP Messages
Request
PATCH /api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 98

[ {
  "op" : "replace",
  "path" : "/name",
  "value" : "839ad0e4-313f-4fe2-9879-bce135e91de3"
} ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:09 GMT
Keep-Alive: timeout=60
Connection: keep-alive

8.6. Delete All Clusters

8.6.1. Description

Delete all the clusters currently stored in the system.

You won’t be able to delete any cluster that has run any job that is still in the system to maintain the ability for users to look up information about their job (where it ran, etc)

8.6.2. Endpoint

DELETE /api/v3/clusters

8.6.3. API Docs

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/clusters'
HTTP Messages
Request
DELETE /api/v3/clusters HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:07 GMT
Keep-Alive: timeout=60
Connection: keep-alive

8.7. Delete a Cluster

8.7.1. Description

Delete a cluster currently configured in the system.

You won’t be able to delete a cluster that has run any job that is still in the system to maintain the ability for users to look up information about their job (where it ran, etc)

8.7.2. Endpoint

DELETE /api/v3/clusters/{id}

8.7.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 34. /api/v3/clusters/{id}
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters/1c41a36c-c52a-4bfe-ab35-8b32cf3c305e' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/clusters/1c41a36c-c52a-4bfe-ab35-8b32cf3c305e'
HTTP Messages
Request
DELETE /api/v3/clusters/1c41a36c-c52a-4bfe-ab35-8b32cf3c305e HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:48:59 GMT
Keep-Alive: timeout=60
Connection: keep-alive

8.8. Get Configs for Cluster

8.8.1. Description

Get the configuration file locations for a cluster.

8.8.2. Endpoint

GET /api/v3/clusters/{id}/configs

8.8.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 35. /api/v3/clusters/{id}/configs
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/configs' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/configs'
Response Documentation
Headers
Name Description

Content-Type

application/json

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of configuration file locations

false

HTTP Messages
Request
GET /api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/configs HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:49:02 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 82

[ "eb4aabf4-7127-4af7-adb5-90d7b2d3571a", "a8132075-097c-47a5-a56d-06bc72a06621" ]

8.9. Add Configs to Cluster

8.9.1. Description

Add configuration file locations to an existing cluster.

Configurations are stored as a set so any duplicates will be ignored.

8.9.2. Endpoint

POST /api/v3/clusters/{id}/configs

8.9.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 36. /api/v3/clusters/{id}/configs
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of configuration file locations

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/configs' -i -X POST \
    -H 'Content-Type: application/json' \
    -d '[ "eb4aabf4-7127-4af7-adb5-90d7b2d3571a", "a8132075-097c-47a5-a56d-06bc72a06621" ]'
HTTPie
$ echo '[ "eb4aabf4-7127-4af7-adb5-90d7b2d3571a", "a8132075-097c-47a5-a56d-06bc72a06621" ]' | http POST 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/configs' \
    'Content-Type:application/json'
HTTP Messages
Request
POST /api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/configs HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 82

[ "eb4aabf4-7127-4af7-adb5-90d7b2d3571a", "a8132075-097c-47a5-a56d-06bc72a06621" ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:02 GMT
Keep-Alive: timeout=60
Connection: keep-alive

8.10. Update Configs for a Cluster

8.10.1. Description

Update the configuration file locations for an existing cluster. Stored as a set so duplicates are ignored.

8.10.2. Endpoint

PUT /api/v3/clusters/{id}/configs

8.10.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 37. /api/v3/clusters/{id}/configs
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of configuration file locations

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/configs' -i -X PUT \
    -H 'Content-Type: application/json' \
    -d '[ "66e77a13-d7ab-4c41-a48c-b481907baef6" ]'
HTTPie
$ echo '[ "66e77a13-d7ab-4c41-a48c-b481907baef6" ]' | http PUT 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/configs' \
    'Content-Type:application/json'
HTTP Messages
Request
PUT /api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/configs HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 42

[ "66e77a13-d7ab-4c41-a48c-b481907baef6" ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:08 GMT
Keep-Alive: timeout=60
Connection: keep-alive

8.11. Remove All Configs From a Cluster

8.11.1. Description

Remove all the configuration file locations for an existing cluster.

8.11.2. Endpoint

DELETE /api/v3/clusters/{id}/configs

8.11.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 38. /api/v3/clusters/{id}/configs
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/configs' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/configs'
HTTP Messages
Request
DELETE /api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/configs HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:01 GMT
Keep-Alive: timeout=60
Connection: keep-alive

8.12. Get Dependencies For an Cluster

8.12.1. Description

Get the dependency file locations for a cluster.

8.12.2. Endpoint

GET /api/v3/clusters/{id}/dependencies

8.12.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 39. /api/v3/clusters/{id}/dependencies
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/dependencies' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/dependencies'
Response Documentation
Headers
Name Description

Content-Type

application/json

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of dependency file locations

false

HTTP Messages
Request
GET /api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/dependencies HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:49:02 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 82

[ "a39414e4-cffd-4511-aa25-9192d517cd52", "66e5e5a4-3880-4439-a0dc-1408b7f80944" ]

8.13. Add Dependencies to Cluster

8.13.1. Description

Add dependency file locations to an existing cluster. Stored as a set so all duplicates are ignored.

8.13.2. Endpoint

POST /api/v3/clusters/{id}/dependencies

8.13.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 40. /api/v3/clusters/{id}/dependencies
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of dependency file locations

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/dependencies' -i -X POST \
    -H 'Content-Type: application/json' \
    -d '[ "a39414e4-cffd-4511-aa25-9192d517cd52", "66e5e5a4-3880-4439-a0dc-1408b7f80944" ]'
HTTPie
$ echo '[ "a39414e4-cffd-4511-aa25-9192d517cd52", "66e5e5a4-3880-4439-a0dc-1408b7f80944" ]' | http POST 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/dependencies' \
    'Content-Type:application/json'
HTTP Messages
Request
POST /api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/dependencies HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 82

[ "a39414e4-cffd-4511-aa25-9192d517cd52", "66e5e5a4-3880-4439-a0dc-1408b7f80944" ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:02 GMT
Keep-Alive: timeout=60
Connection: keep-alive

8.14. Update Dependencies for an Cluster

8.14.1. Description

Update the dependency file locations for an existing cluster

8.14.2. Endpoint

PUT /api/v3/clusters/{id}/dependencies

8.14.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 41. /api/v3/clusters/{id}/configs
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of dependency file locations

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/configs' -i -X PUT \
    -H 'Content-Type: application/json' \
    -d '[ "eb9701b4-15ce-4c5f-96aa-303fc58cce06" ]'
HTTPie
$ echo '[ "eb9701b4-15ce-4c5f-96aa-303fc58cce06" ]' | http PUT 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/configs' \
    'Content-Type:application/json'
HTTP Messages
Request
PUT /api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/configs HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 42

[ "eb9701b4-15ce-4c5f-96aa-303fc58cce06" ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:07 GMT
Keep-Alive: timeout=60
Connection: keep-alive

8.15. Remove All Dependencies From an Cluster

8.15.1. Description

Remove all the dependency file locations for an existing cluster.

8.15.2. Endpoint

DELETE /api/v3/clusters/{id}/dependencies

8.15.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 42. /api/v3/clusters/{id}/dependencies
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/dependencies' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/dependencies'
HTTP Messages
Request
DELETE /api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/dependencies HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:02 GMT
Keep-Alive: timeout=60
Connection: keep-alive

8.16. Get Tags For a Cluster

8.16.1. Description

Get the tags for a cluster.

8.16.2. Endpoint

GET /api/v3/clusters/{id}/tags

8.16.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 43. /api/v3/clusters/{id}/tags
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/tags' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/tags'
Response Documentation
Headers
Name Description

Content-Type

application/json

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of tags

false

HTTP Messages
Request
GET /api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/tags HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:49:08 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 152

[ "5df487a1-c2b7-4845-9ba2-68b698d2e868", "genie.name:h2prod", "genie.id:49fe0fc2-f1fa-4c63-ad02-9ba96fce368d", "cc0a9caa-2882-473f-ae05-6fc53b719ae9" ]

8.17. Add Tags to Cluster

8.17.1. Description

Add tags to an existing cluster. Stored as a set so all duplicates are ignored.

genie.id:{id} and genie.name:{name} tags are automatically added by the service.

8.17.2. Endpoint

POST /api/v3/clusters/{id}/tags

8.17.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 44. /api/v3/clusters/{id}/tags
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of tags

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/tags' -i -X POST \
    -H 'Content-Type: application/json' \
    -d '[ "5df487a1-c2b7-4845-9ba2-68b698d2e868", "cc0a9caa-2882-473f-ae05-6fc53b719ae9" ]'
HTTPie
$ echo '[ "5df487a1-c2b7-4845-9ba2-68b698d2e868", "cc0a9caa-2882-473f-ae05-6fc53b719ae9" ]' | http POST 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/tags' \
    'Content-Type:application/json'
HTTP Messages
Request
POST /api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/tags HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 82

[ "5df487a1-c2b7-4845-9ba2-68b698d2e868", "cc0a9caa-2882-473f-ae05-6fc53b719ae9" ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:08 GMT
Keep-Alive: timeout=60
Connection: keep-alive

8.18. Update Tags for a Cluster

8.18.1. Description

Update the tags for an existing cluster.

The genie.id:{id} and genie.name:{name} tags can’t be removed. They will automatically be added back by the system.

8.18.2. Endpoint

PUT /api/v3/clusters/{id}/tags

8.18.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 45. /api/v3/clusters/{id}/tags
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of tags

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/tags' -i -X PUT \
    -H 'Content-Type: application/json' \
    -d '[ "8feb6ae5-9eef-4c18-a1be-29de590fd7a1" ]'
HTTPie
$ echo '[ "8feb6ae5-9eef-4c18-a1be-29de590fd7a1" ]' | http PUT 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/tags' \
    'Content-Type:application/json'
HTTP Messages
Request
PUT /api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/tags HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 42

[ "8feb6ae5-9eef-4c18-a1be-29de590fd7a1" ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:08 GMT
Keep-Alive: timeout=60
Connection: keep-alive

8.19. Remove All Tags From Cluster

8.19.1. Description

Remove all the tags for an existing cluster

The genie.id:{id} and genie.name:{name} tags will NOT be removed by this operation

8.19.2. Endpoint

DELETE /api/v3/clusters/{id}/tags

8.19.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 46. /api/v3/clusters/{id}/tags
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/tags' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/tags'
HTTP Messages
Request
DELETE /api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/tags HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:01 GMT
Keep-Alive: timeout=60
Connection: keep-alive

8.20. Remove Tag From Cluster

8.20.1. Description

Remove a tag from an existing cluster.

You can’t remove the genie.id:{id} and genie.name:{name} tags. They will just be added back by the system

8.20.2. Endpoint

DELETE /api/v3/clusters/{id}/tags/{tag}

8.20.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 47. /api/v3/clusters/{id}/tags/{tag}
Parameter Description

id

The resource id

tag

The tag to remove

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/tags/daff344d-d9c2-40e7-93b7-6a942f853194' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/tags/daff344d-d9c2-40e7-93b7-6a942f853194'
HTTP Messages
Request
DELETE /api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/tags/daff344d-d9c2-40e7-93b7-6a942f853194 HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:08 GMT
Keep-Alive: timeout=60
Connection: keep-alive

8.21. Add Commands to a Cluster

Deprecated
As of Genie 4.0.0 commands are no longer hard linked to clusters, instead they are dynamically linked by resolving a command’s cluster criteria against the current set of UP clusters. This API is now a no-op.

8.21.1. Endpoint

POST /api/v3/clusters/{id}/commands

8.21.2. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 48. /api/v3/clusters/{id}/commands
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of command ids (in preferred order) to append to the existing list of commands

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/commands' -i -X POST \
    -H 'Content-Type: application/json' \
    -d '[ "3a936202-0725-4acd-ad1b-9c9550f93e51", "af479f29-6956-464a-b38d-79958faded7a" ]'
HTTPie
$ echo '[ "3a936202-0725-4acd-ad1b-9c9550f93e51", "af479f29-6956-464a-b38d-79958faded7a" ]' | http POST 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/commands' \
    'Content-Type:application/json'
HTTP Messages
Request
POST /api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/commands HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 82

[ "3a936202-0725-4acd-ad1b-9c9550f93e51", "af479f29-6956-464a-b38d-79958faded7a" ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:02 GMT
Keep-Alive: timeout=60
Connection: keep-alive

8.22. Get the Commands for a Cluster

Deprecated
As of Genie 4.0.0 commands are no longer hard linked to clusters, instead they are dynamically linked by resolving a command’s cluster criteria against the current set of UP clusters. This API is now a no-op.

8.22.1. Endpoint

GET /api/v3/clusters/{id}/commands

8.22.2. API Docs

Request Documentation
Headers

None

Path Parameters
Table 49. /api/v3/clusters/{id}/commands
Parameter Description

id

The resource id

Query Parameters
Parameter Description

status

The status of commands to search for

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/commands?status=ACTIVE' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/commands?status=ACTIVE'
HTTP Messages
Request
GET /api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/commands?status=ACTIVE HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:49:02 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 3

[ ]

8.23. Set Commands for a Cluster

Deprecated
As of Genie 4.0.0 commands are no longer hard linked to clusters, instead they are dynamically linked by resolving a command’s cluster criteria against the current set of UP clusters. This API is now a no-op.

8.23.1. Endpoint

PUT /api/v3/clusters/{id}/commands

8.23.2. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 50. /api/v3/clusters/{id}/commands
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of command ids (in preferred order) to replace the existing list of commands

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/commands' -i -X PUT \
    -H 'Content-Type: application/json' \
    -d '[ "45345496-7ff2-4344-bbca-674b0e4aa5d0", "c4ae36c5-0b56-4fd3-baea-3cf9635e0b06" ]'
HTTPie
$ echo '[ "45345496-7ff2-4344-bbca-674b0e4aa5d0", "c4ae36c5-0b56-4fd3-baea-3cf9635e0b06" ]' | http PUT 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/commands' \
    'Content-Type:application/json'
HTTP Messages
Request
PUT /api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/commands HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 82

[ "45345496-7ff2-4344-bbca-674b0e4aa5d0", "c4ae36c5-0b56-4fd3-baea-3cf9635e0b06" ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:02 GMT
Keep-Alive: timeout=60
Connection: keep-alive

8.24. Remove All Commands From a Cluster

Deprecated
As of Genie 4.0.0 commands are no longer hard linked to clusters, instead they are dynamically linked by resolving a command’s cluster criteria against the current set of UP clusters. This API is now a no-op.

8.24.1. Endpoint

DELETE /api/v3/clusters/{id}/commands

8.24.2. API Docs

Request Documentation
Headers

None

Path Parameters
Table 51. /api/v3/clusters/{id}/commands
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/commands' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/commands'
HTTP Messages
Request
DELETE /api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/commands HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:02 GMT
Keep-Alive: timeout=60
Connection: keep-alive

8.25. Remove A Single Command From a Cluster

Deprecated
As of Genie 4.0.0 commands are no longer hard linked to clusters, instead they are dynamically linked by resolving a command’s cluster criteria against the current set of UP clusters. This API is now a no-op.

8.25.1. Endpoint

DELETE /api/v3/clusters/{id}/commands/{commandId}

8.25.2. API Docs

Request Documentation
Headers

None

Path Parameters
Table 52. /api/v3/clusters/{id}/commands/{commandId}
Parameter Description

id

The resource id

commandId

The id of the command to remove

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/commands/5ce4aded-9678-4de5-975c-f4bf30de4fd4' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/commands/5ce4aded-9678-4de5-975c-f4bf30de4fd4'
HTTP Messages
Request
DELETE /api/v3/clusters/49fe0fc2-f1fa-4c63-ad02-9ba96fce368d/commands/5ce4aded-9678-4de5-975c-f4bf30de4fd4 HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:01 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9. Commands API

9.1. Create a Command

9.1.1. Description

Create a new command in the system.

9.1.2. Endpoint

POST /api/v3/commands

The id in this example is optional. If you include one Genie will use it. If not it will provide one. If you provide one it must be unique.

9.1.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Payload Fields
Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

name

String

The name

Must not be empty. Size must be between 0 and 255 inclusive

false

user

String

The user

Must not be empty. Size must be between 0 and 255 inclusive

false

version

String

The version

Must not be empty. Size must be between 0 and 255 inclusive

false

description

String

Any description

Size must be between 0 and 1000 inclusive

true

metadata

Object

Any semi-structured metadata. Must be valid JSON

true

tags

Array

The tags

true

setupFile

String

A location for any setup that needs to be done when installing

Size must be between 0 and 1024 inclusive

true

configs

Array

Any configuration files needed for the resource

true

status

String

The status of the command. Options: [ACTIVE, DEPRECATED, INACTIVE]

Must not be null

false

executable

String

The executable to run on the Genie node when this command is used. e.g. /usr/bin/hadoop

Must not be empty. Size must be between 0 and 1024 inclusive

false

executableAndArguments

Array

The executable and arguments to run on the Genie node when this command is used. e.g. /usr/bin/hadoop

Must not be empty

false

checkDelay

Number

Deprecated as of 4.3.0. Now is a no-op on the server side.

false

memory

Number

The default amount of memory (in MB) that should be allocated for instances of this command client

Must be at least 1

true

dependencies

Array

The dependencies for the command

true

clusterCriteria

Array

The priority ordered list of criteria to resolve clusters that this command can run jobs on

true

runtime

Object

The various job runtime parameters that should be used if this command is used

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands' -i -X POST \
    -H 'Content-Type: application/json' \
    -d '{
  "id" : null,
  "created" : null,
  "updated" : null,
  "version" : "1.0.0",
  "user" : "genie",
  "name" : "hive",
  "description" : "Hive command v1.0.0",
  "metadata" : null,
  "tags" : [ "tag:bar", "tag:foo" ],
  "configs" : [ "s3:///path/to/config-foo", "s3:///path/to/config-bar" ],
  "dependencies" : [ "/path/to/file/foo", "/path/to/file/bar" ],
  "setupFile" : null,
  "status" : "ACTIVE",
  "executable" : "/apps/hive/bin/hive",
  "executableAndArguments" : [ "/apps/hive/bin/hive" ],
  "checkDelay" : 10000,
  "memory" : 1024,
  "clusterCriteria" : [ {
    "id" : "b1c89fba-2343-43cc-9e85-93a5eb4d5df4",
    "name" : null,
    "version" : null,
    "status" : null,
    "tags" : [ "d6fe286e-3d9f-4b74-b0fb-b0b28cbb6b05", "577d167c-87b0-4b47-a4a8-fe0658585867" ]
  }, {
    "id" : "21c54a86-7fe1-405a-a991-c2bd353ac497",
    "name" : "prod",
    "version" : "1.0.0",
    "status" : "UP",
    "tags" : [ "f5046314-b096-47d8-9ec5-d43c6bddeda1", "2eafc9e2-d870-4fde-beb7-98383cea2b3c", "81927e15-9691-4a94-a70f-dc9c814108db" ]
  } ],
  "runtime" : {
    "resources" : {
      "cpu" : null,
      "gpu" : null,
      "memoryMb" : 1024,
      "diskMb" : null,
      "networkMbps" : null
    },
    "images" : { }
  }
}'
HTTPie
$ echo '{
  "id" : null,
  "created" : null,
  "updated" : null,
  "version" : "1.0.0",
  "user" : "genie",
  "name" : "hive",
  "description" : "Hive command v1.0.0",
  "metadata" : null,
  "tags" : [ "tag:bar", "tag:foo" ],
  "configs" : [ "s3:///path/to/config-foo", "s3:///path/to/config-bar" ],
  "dependencies" : [ "/path/to/file/foo", "/path/to/file/bar" ],
  "setupFile" : null,
  "status" : "ACTIVE",
  "executable" : "/apps/hive/bin/hive",
  "executableAndArguments" : [ "/apps/hive/bin/hive" ],
  "checkDelay" : 10000,
  "memory" : 1024,
  "clusterCriteria" : [ {
    "id" : "b1c89fba-2343-43cc-9e85-93a5eb4d5df4",
    "name" : null,
    "version" : null,
    "status" : null,
    "tags" : [ "d6fe286e-3d9f-4b74-b0fb-b0b28cbb6b05", "577d167c-87b0-4b47-a4a8-fe0658585867" ]
  }, {
    "id" : "21c54a86-7fe1-405a-a991-c2bd353ac497",
    "name" : "prod",
    "version" : "1.0.0",
    "status" : "UP",
    "tags" : [ "f5046314-b096-47d8-9ec5-d43c6bddeda1", "2eafc9e2-d870-4fde-beb7-98383cea2b3c", "81927e15-9691-4a94-a70f-dc9c814108db" ]
  } ],
  "runtime" : {
    "resources" : {
      "cpu" : null,
      "gpu" : null,
      "memoryMb" : 1024,
      "diskMb" : null,
      "networkMbps" : null
    },
    "images" : { }
  }
}' | http POST 'https://genie.example.com/api/v3/commands' \
    'Content-Type:application/json'
Response Documentation
Headers
Name Description

Location

The URI

HTTP Messages
Request
POST /api/v3/commands HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 1226

{
  "id" : null,
  "created" : null,
  "updated" : null,
  "version" : "1.0.0",
  "user" : "genie",
  "name" : "hive",
  "description" : "Hive command v1.0.0",
  "metadata" : null,
  "tags" : [ "tag:bar", "tag:foo" ],
  "configs" : [ "s3:///path/to/config-foo", "s3:///path/to/config-bar" ],
  "dependencies" : [ "/path/to/file/foo", "/path/to/file/bar" ],
  "setupFile" : null,
  "status" : "ACTIVE",
  "executable" : "/apps/hive/bin/hive",
  "executableAndArguments" : [ "/apps/hive/bin/hive" ],
  "checkDelay" : 10000,
  "memory" : 1024,
  "clusterCriteria" : [ {
    "id" : "b1c89fba-2343-43cc-9e85-93a5eb4d5df4",
    "name" : null,
    "version" : null,
    "status" : null,
    "tags" : [ "d6fe286e-3d9f-4b74-b0fb-b0b28cbb6b05", "577d167c-87b0-4b47-a4a8-fe0658585867" ]
  }, {
    "id" : "21c54a86-7fe1-405a-a991-c2bd353ac497",
    "name" : "prod",
    "version" : "1.0.0",
    "status" : "UP",
    "tags" : [ "f5046314-b096-47d8-9ec5-d43c6bddeda1", "2eafc9e2-d870-4fde-beb7-98383cea2b3c", "81927e15-9691-4a94-a70f-dc9c814108db" ]
  } ],
  "runtime" : {
    "resources" : {
      "cpu" : null,
      "gpu" : null,
      "memoryMb" : 1024,
      "diskMb" : null,
      "networkMbps" : null
    },
    "images" : { }
  }
}
Response
HTTP/1.1 201 Created
Location: https://genie.example.com/api/v3/commands/acebd12c-4d34-42e5-a0f6-3b5c67a4377f
Date: Fri, 16 Sep 2022 00:49:16 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.2. Get a Command

9.2.1. Description

Get the metadata about a command in the system.

9.2.2. Endpoint

GET /api/v3/commands/{id}

9.2.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 53. /api/v3/commands/{id}
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/acebd12c-4d34-42e5-a0f6-3b5c67a4377f' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/commands/acebd12c-4d34-42e5-a0f6-3b5c67a4377f'
Response Documentation
Headers
Name Description

Content-Type

application/hal+json

Payload Fields
Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

name

String

The name

Must not be empty. Size must be between 0 and 255 inclusive

false

user

String

The user

Must not be empty. Size must be between 0 and 255 inclusive

false

version

String

The version

Must not be empty. Size must be between 0 and 255 inclusive

false

description

String

Any description

Size must be between 0 and 1000 inclusive

true

metadata

Object

Any semi-structured metadata. Must be valid JSON

true

tags

Array

The tags

true

setupFile

String

A location for any setup that needs to be done when installing

Size must be between 0 and 1024 inclusive

true

configs

Array

Any configuration files needed for the resource

true

status

String

The status of the command. Options: [ACTIVE, DEPRECATED, INACTIVE]

Must not be null

false

executable

String

The executable to run on the Genie node when this command is used. e.g. /usr/bin/hadoop

Must not be empty. Size must be between 0 and 1024 inclusive

false

executableAndArguments

Array

The executable and arguments to run on the Genie node when this command is used. e.g. /usr/bin/hadoop

Must not be empty

false

checkDelay

Number

Deprecated as of 4.3.0. Now is a no-op on the server side.

false

memory

Number

The default amount of memory (in MB) that should be allocated for instances of this command client

Must be at least 1

true

dependencies

Array

The dependencies for the command

true

clusterCriteria

Array

The priority ordered list of criteria to resolve clusters that this command can run jobs on

true

runtime

Object

The various job runtime parameters that should be used if this command is used

false

Relation Description

self

URI for this command

applications

Get all the applications this command depends on

clusters

Get all clusters this command is available on

HTTP Messages
Request
GET /api/v3/commands/acebd12c-4d34-42e5-a0f6-3b5c67a4377f HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:49:16 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 1814

{
  "id" : "acebd12c-4d34-42e5-a0f6-3b5c67a4377f",
  "created" : "2022-09-16T00:49:16.926Z",
  "updated" : "2022-09-16T00:49:16.926Z",
  "version" : "1.0.0",
  "user" : "genie",
  "name" : "hive",
  "description" : "Hive command v1.0.0",
  "metadata" : null,
  "tags" : [ "tag:bar", "tag:foo", "genie.name:hive", "genie.id:acebd12c-4d34-42e5-a0f6-3b5c67a4377f" ],
  "configs" : [ "s3:///path/to/config-foo", "s3:///path/to/config-bar" ],
  "dependencies" : [ "/path/to/file/foo", "/path/to/file/bar" ],
  "setupFile" : null,
  "status" : "ACTIVE",
  "executable" : "/apps/hive/bin/hive",
  "executableAndArguments" : [ "/apps/hive/bin/hive" ],
  "checkDelay" : 10000,
  "memory" : 1024,
  "clusterCriteria" : [ {
    "id" : "b1c89fba-2343-43cc-9e85-93a5eb4d5df4",
    "name" : null,
    "version" : null,
    "status" : null,
    "tags" : [ "d6fe286e-3d9f-4b74-b0fb-b0b28cbb6b05", "577d167c-87b0-4b47-a4a8-fe0658585867" ]
  }, {
    "id" : "21c54a86-7fe1-405a-a991-c2bd353ac497",
    "name" : "prod",
    "version" : "1.0.0",
    "status" : "UP",
    "tags" : [ "f5046314-b096-47d8-9ec5-d43c6bddeda1", "2eafc9e2-d870-4fde-beb7-98383cea2b3c", "81927e15-9691-4a94-a70f-dc9c814108db" ]
  } ],
  "runtime" : {
    "resources" : {
      "cpu" : null,
      "gpu" : null,
      "memoryMb" : 1024,
      "diskMb" : null,
      "networkMbps" : null
    },
    "images" : { }
  },
  "_links" : {
    "self" : {
      "href" : "https://genie.example.com/api/v3/commands/acebd12c-4d34-42e5-a0f6-3b5c67a4377f"
    },
    "applications" : {
      "href" : "https://genie.example.com/api/v3/commands/acebd12c-4d34-42e5-a0f6-3b5c67a4377f/applications"
    },
    "clusters" : {
      "href" : "https://genie.example.com/api/v3/commands/acebd12c-4d34-42e5-a0f6-3b5c67a4377f/clusters{?status}",
      "templated" : true
    }
  }
}

9.3. Find Commands

9.3.1. Description

Find commands using various query parameters.

9.3.2. Endpoint

GET /api/v3/commands

9.3.3. API Docs

Request Documentation
Headers

None

Query Parameters
Parameter Description

page

The page number to get. Default to 0.

size

The size of the page to get. Default to 64.

sort

The fields to sort the results by. Defaults to 'updated,desc'.

name

The name of the commands to find. Use % to perform a regex like query

user

The user of the commands to find. Use % to perform a regex like query

status

The status(es) of the commands to find. Can have multiple. Options: [ACTIVE, DEPRECATED, INACTIVE]

tag

The tag(s) of the commands to find. Can have multiple.

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands?status=ACTIVE&status=INACTIVE&status=%5BACTIVE%2C+INACTIVE%5D' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/commands?status=ACTIVE&status=INACTIVE&status=%5BACTIVE%2C+INACTIVE%5D'
Response Documentation
Headers
Name Description

Content-Type

application/hal+json

Payload Fields
Path Type Description Constraints Optional

_links

Object

Links to other resources.

false

page

Object

The result page information.

false

page.size

Number

The number of elements in this page result.

false

page.totalElements

Number

The total number of elements this search result could return.

false

page.totalPages

Number

The total number of pages there could be at the current page size.

false

page.number

Number

The current page number.

false

_embedded.commandList

Array

The found commands.

false

Relation Description

self

The current search

first

The first page for this search

prev

The previous page for this search

next

The next page for this search

last

The last page for this search

HTTP Messages
Request
GET /api/v3/commands?status=ACTIVE&status=INACTIVE&status=%5BACTIVE%2C+INACTIVE%5D HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:49:12 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 3311

{
  "_embedded" : {
    "commandList" : [ {
      "id" : "aff74d2a-e190-4f33-9627-2763ee962634",
      "created" : "2022-09-16T00:49:12.643Z",
      "updated" : "2022-09-16T00:49:12.643Z",
      "version" : "02c96234-ef4e-45dc-b220-56565ce53865",
      "user" : "8af3030a-d356-428e-9767-a3fdf1eaaaa4",
      "name" : "7d987c4f-3619-4147-b689-edad871f3689",
      "description" : null,
      "metadata" : null,
      "tags" : [ "genie.name:7d987c4f-3619-4147-b689-edad871f3689", "genie.id:aff74d2a-e190-4f33-9627-2763ee962634" ],
      "configs" : [ ],
      "dependencies" : [ ],
      "setupFile" : null,
      "status" : "INACTIVE",
      "executable" : "/apps/hive/bin/hive",
      "executableAndArguments" : [ "/apps/hive/bin/hive" ],
      "checkDelay" : 10000,
      "memory" : null,
      "clusterCriteria" : [ ],
      "runtime" : {
        "resources" : {
          "cpu" : null,
          "gpu" : null,
          "memoryMb" : null,
          "diskMb" : null,
          "networkMbps" : null
        },
        "images" : { }
      },
      "_links" : {
        "self" : {
          "href" : "https://genie.example.com/api/v3/commands/aff74d2a-e190-4f33-9627-2763ee962634"
        },
        "applications" : {
          "href" : "https://genie.example.com/api/v3/commands/aff74d2a-e190-4f33-9627-2763ee962634/applications"
        },
        "clusters" : {
          "href" : "https://genie.example.com/api/v3/commands/aff74d2a-e190-4f33-9627-2763ee962634/clusters{?status}",
          "templated" : true
        }
      }
    }, {
      "id" : "d8363746-610f-4c34-983c-5741cf4935cf",
      "created" : "2022-09-16T00:49:10.595Z",
      "updated" : "2022-09-16T00:49:10.595Z",
      "version" : "58040576-bccf-4bf8-91d9-158926df364d",
      "user" : "71acfe50-68d9-4c2f-94a4-a8de3f3d2338",
      "name" : "f8f5f541-aadf-41bd-b486-d8bd807cd1aa",
      "description" : null,
      "metadata" : null,
      "tags" : [ "genie.id:d8363746-610f-4c34-983c-5741cf4935cf", "genie.name:f8f5f541-aadf-41bd-b486-d8bd807cd1aa" ],
      "configs" : [ ],
      "dependencies" : [ ],
      "setupFile" : null,
      "status" : "ACTIVE",
      "executable" : "/apps/hive/bin/hive",
      "executableAndArguments" : [ "/apps/hive/bin/hive" ],
      "checkDelay" : 10000,
      "memory" : null,
      "clusterCriteria" : [ ],
      "runtime" : {
        "resources" : {
          "cpu" : null,
          "gpu" : null,
          "memoryMb" : null,
          "diskMb" : null,
          "networkMbps" : null
        },
        "images" : { }
      },
      "_links" : {
        "self" : {
          "href" : "https://genie.example.com/api/v3/commands/d8363746-610f-4c34-983c-5741cf4935cf"
        },
        "applications" : {
          "href" : "https://genie.example.com/api/v3/commands/d8363746-610f-4c34-983c-5741cf4935cf/applications"
        },
        "clusters" : {
          "href" : "https://genie.example.com/api/v3/commands/d8363746-610f-4c34-983c-5741cf4935cf/clusters{?status}",
          "templated" : true
        }
      }
    } ]
  },
  "_links" : {
    "self" : {
      "href" : "https://genie.example.com/api/v3/commands?status=ACTIVE&status=INACTIVE{&name,user,tag}",
      "templated" : true
    }
  },
  "page" : {
    "size" : 64,
    "totalElements" : 2,
    "totalPages" : 1,
    "number" : 0
  }
}

9.4. Update an Entire Command

9.4.1. Description

Update the metadata about a command. This method does a complete replace of the resource. Usual flow is to call to get the most recent state then update what you want and call this API with the result.

For more fine grained control call the PATCH API.

9.4.2. Endpoint

PUT /api/v3/commands/{id}

9.4.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 54. /api/v3/commands/{id}
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

name

String

The name

Must not be empty. Size must be between 0 and 255 inclusive

false

user

String

The user

Must not be empty. Size must be between 0 and 255 inclusive

false

version

String

The version

Must not be empty. Size must be between 0 and 255 inclusive

false

description

String

Any description

Size must be between 0 and 1000 inclusive

true

metadata

Object

Any semi-structured metadata. Must be valid JSON

true

tags

Array

The tags

true

setupFile

String

A location for any setup that needs to be done when installing

Size must be between 0 and 1024 inclusive

true

configs

Array

Any configuration files needed for the resource

true

status

String

The status of the command. Options: [ACTIVE, DEPRECATED, INACTIVE]

Must not be null

false

executable

String

The executable to run on the Genie node when this command is used. e.g. /usr/bin/hadoop

Must not be empty. Size must be between 0 and 1024 inclusive

false

executableAndArguments

Array

The executable and arguments to run on the Genie node when this command is used. e.g. /usr/bin/hadoop

Must not be empty

false

checkDelay

Number

Deprecated as of 4.3.0. Now is a no-op on the server side.

false

memory

Number

The default amount of memory (in MB) that should be allocated for instances of this command client

Must be at least 1

true

dependencies

Array

The dependencies for the command

true

clusterCriteria

Array

The priority ordered list of criteria to resolve clusters that this command can run jobs on

true

runtime

Object

The various job runtime parameters that should be used if this command is used

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca' -i -X PUT \
    -H 'Content-Type: application/json' \
    -d '{
  "id" : "1c962204-3e8c-4682-abe7-e04dcbcc2aca",
  "created" : "2022-09-16T00:49:18.860Z",
  "updated" : "2022-09-16T00:49:18.860Z",
  "version" : "1.0.0",
  "user" : "genie",
  "name" : "hive",
  "description" : null,
  "metadata" : null,
  "tags" : [ "genie.name:hive", "genie.id:1c962204-3e8c-4682-abe7-e04dcbcc2aca" ],
  "configs" : [ ],
  "dependencies" : [ ],
  "setupFile" : null,
  "status" : "INACTIVE",
  "executable" : "/apps/hive/bin/hive",
  "executableAndArguments" : [ "/apps/hive/bin/hive" ],
  "checkDelay" : 10000,
  "memory" : null,
  "clusterCriteria" : [ ],
  "runtime" : {
    "resources" : {
      "cpu" : null,
      "gpu" : null,
      "memoryMb" : null,
      "diskMb" : null,
      "networkMbps" : null
    },
    "images" : { }
  }
}'
HTTPie
$ echo '{
  "id" : "1c962204-3e8c-4682-abe7-e04dcbcc2aca",
  "created" : "2022-09-16T00:49:18.860Z",
  "updated" : "2022-09-16T00:49:18.860Z",
  "version" : "1.0.0",
  "user" : "genie",
  "name" : "hive",
  "description" : null,
  "metadata" : null,
  "tags" : [ "genie.name:hive", "genie.id:1c962204-3e8c-4682-abe7-e04dcbcc2aca" ],
  "configs" : [ ],
  "dependencies" : [ ],
  "setupFile" : null,
  "status" : "INACTIVE",
  "executable" : "/apps/hive/bin/hive",
  "executableAndArguments" : [ "/apps/hive/bin/hive" ],
  "checkDelay" : 10000,
  "memory" : null,
  "clusterCriteria" : [ ],
  "runtime" : {
    "resources" : {
      "cpu" : null,
      "gpu" : null,
      "memoryMb" : null,
      "diskMb" : null,
      "networkMbps" : null
    },
    "images" : { }
  }
}' | http PUT 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca' \
    'Content-Type:application/json'
HTTP Messages
Request
PUT /api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 763

{
  "id" : "1c962204-3e8c-4682-abe7-e04dcbcc2aca",
  "created" : "2022-09-16T00:49:18.860Z",
  "updated" : "2022-09-16T00:49:18.860Z",
  "version" : "1.0.0",
  "user" : "genie",
  "name" : "hive",
  "description" : null,
  "metadata" : null,
  "tags" : [ "genie.name:hive", "genie.id:1c962204-3e8c-4682-abe7-e04dcbcc2aca" ],
  "configs" : [ ],
  "dependencies" : [ ],
  "setupFile" : null,
  "status" : "INACTIVE",
  "executable" : "/apps/hive/bin/hive",
  "executableAndArguments" : [ "/apps/hive/bin/hive" ],
  "checkDelay" : 10000,
  "memory" : null,
  "clusterCriteria" : [ ],
  "runtime" : {
    "resources" : {
      "cpu" : null,
      "gpu" : null,
      "memoryMb" : null,
      "diskMb" : null,
      "networkMbps" : null
    },
    "images" : { }
  }
}
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:18 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.5. Update Parts of a Command

9.5.1. Description

Update the metadata about a command using JSON Patch. This will ONLY update the fields you request be changed.

For more information about JSON Patch RFC see the website.

9.5.2. Endpoint

PATCH /api/v3/commands/{id}

9.5.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 55. /api/v3/commands/{id}
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of patches to apply

false

[].op

String

Patch operation to perform.

add, remove, replace, copy, move, test

false

[].path

String

The json path to operate on. e.g. /user

false

[].from

String

The json path to move or copy from. e.g. /user

true

[].value

String

The json value to put at the path for an add, replace or test

true

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca' -i -X PATCH \
    -H 'Content-Type: application/json' \
    -d '[ {
  "op" : "replace",
  "path" : "/name",
  "value" : "9b05d6c1-7be6-4151-a551-7356e689ae01"
} ]'
HTTPie
$ echo '[ {
  "op" : "replace",
  "path" : "/name",
  "value" : "9b05d6c1-7be6-4151-a551-7356e689ae01"
} ]' | http PATCH 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca' \
    'Content-Type:application/json'
HTTP Messages
Request
PATCH /api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 98

[ {
  "op" : "replace",
  "path" : "/name",
  "value" : "9b05d6c1-7be6-4151-a551-7356e689ae01"
} ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:19 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.6. Delete All Commands

9.6.1. Description

Delete all the commands currently stored in the system.

You won’t be able to delete any command that has been used by any job that is still in the system to maintain the ability for users to look up information about their job (where it ran, what it ran, etc)

9.6.2. Endpoint

DELETE /api/v3/commands

9.6.3. API Docs

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/commands'
HTTP Messages
Request
DELETE /api/v3/commands HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:13 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.7. Delete a Command

9.7.1. Description

Delete a command currently configured in the system.

You won’t be able to delete a command that has been used by any job that is still in the system to maintain the ability for users to look up information about their job (where it ran, what it ran, etc)

9.7.2. Endpoint

DELETE /api/v3/commands/{id}

9.7.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 56. /api/v3/commands/{id}
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/3f258c0e-28f3-404d-8a1b-2eed78d2cf43' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/commands/3f258c0e-28f3-404d-8a1b-2eed78d2cf43'
HTTP Messages
Request
DELETE /api/v3/commands/3f258c0e-28f3-404d-8a1b-2eed78d2cf43 HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:09 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.8. Get Configs for Command

9.8.1. Description

Get the configuration file locations for a command.

9.8.2. Endpoint

GET /api/v3/commands/{id}/configs

9.8.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 57. /api/v3/commands/{id}/configs
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/configs' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/configs'
Response Documentation
Headers
Name Description

Content-Type

application/json

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of configuration file locations

false

HTTP Messages
Request
GET /api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/configs HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:49:14 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 82

[ "7cb248bd-0f03-4e51-994f-c7cfb6c07fa3", "5d608e40-19fb-4cb1-a086-68fcb964e62c" ]

9.9. Add Configs to Command

9.9.1. Description

Add configuration file locations to an existing command.

Configurations are stored as a set so any duplicates will be ignored.

9.9.2. Endpoint

POST /api/v3/commands/{id}/configs

9.9.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 58. /api/v3/commands/{id}/configs
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of configuration file locations

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/configs' -i -X POST \
    -H 'Content-Type: application/json' \
    -d '[ "7cb248bd-0f03-4e51-994f-c7cfb6c07fa3", "5d608e40-19fb-4cb1-a086-68fcb964e62c" ]'
HTTPie
$ echo '[ "7cb248bd-0f03-4e51-994f-c7cfb6c07fa3", "5d608e40-19fb-4cb1-a086-68fcb964e62c" ]' | http POST 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/configs' \
    'Content-Type:application/json'
HTTP Messages
Request
POST /api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/configs HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 82

[ "7cb248bd-0f03-4e51-994f-c7cfb6c07fa3", "5d608e40-19fb-4cb1-a086-68fcb964e62c" ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:14 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.10. Update Configs for a Command

9.10.1. Description

Update the configuration file locations for an existing command. Stored as a set so duplicates are ignored.

9.10.2. Endpoint

PUT /api/v3/commands/{id}/configs

9.10.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 59. /api/v3/commands/{id}/configs
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of configuration file locations

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/configs' -i -X PUT \
    -H 'Content-Type: application/json' \
    -d '[ "2ecb90f9-dd85-4e79-a09f-ae4b467560d8" ]'
HTTPie
$ echo '[ "2ecb90f9-dd85-4e79-a09f-ae4b467560d8" ]' | http PUT 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/configs' \
    'Content-Type:application/json'
HTTP Messages
Request
PUT /api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/configs HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 42

[ "2ecb90f9-dd85-4e79-a09f-ae4b467560d8" ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:17 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.11. Remove All Configs From a Command

9.11.1. Description

Remove all the configuration file locations for an existing command.

9.11.2. Endpoint

DELETE /api/v3/commands/{id}/configs

9.11.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 60. /api/v3/commands/{id}/configs
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/configs' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/configs'
HTTP Messages
Request
DELETE /api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/configs HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:09 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.12. Get Dependencies For an Command

9.12.1. Description

Get the dependency file locations for an command.

9.12.2. Endpoint

GET /api/v3/commands/{id}/dependencies

9.12.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 61. /api/v3/commands/{id}/dependencies
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/dependencies' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/dependencies'
Response Documentation
Headers
Name Description

Content-Type

application/json

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of dependency file locations

false

HTTP Messages
Request
GET /api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/dependencies HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:49:14 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 82

[ "4e130e69-c020-4aac-9cce-8e194e166931", "b67137c1-094e-4671-84b1-3d2794b16847" ]

9.13. Add Dependencies to Command

9.13.1. Description

Add dependency file locations to an existing command. Stored as a set so all duplicates are ignored.

9.13.2. Endpoint

POST /api/v3/commands/{id}/dependencies

9.13.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 62. /api/v3/commands/{id}/dependencies
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of dependency file locations

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/dependencies' -i -X POST \
    -H 'Content-Type: application/json' \
    -d '[ "b67137c1-094e-4671-84b1-3d2794b16847", "4e130e69-c020-4aac-9cce-8e194e166931" ]'
HTTPie
$ echo '[ "b67137c1-094e-4671-84b1-3d2794b16847", "4e130e69-c020-4aac-9cce-8e194e166931" ]' | http POST 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/dependencies' \
    'Content-Type:application/json'
HTTP Messages
Request
POST /api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/dependencies HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 82

[ "b67137c1-094e-4671-84b1-3d2794b16847", "4e130e69-c020-4aac-9cce-8e194e166931" ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:14 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.14. Update Dependencies for an Command

9.14.1. Description

Update the dependency file locations for an existing command

9.14.2. Endpoint

PUT /api/v3/commands/{id}/dependencies

9.14.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 63. /api/v3/commands/{id}/dependencies
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of dependency file locations

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/dependencies' -i -X PUT \
    -H 'Content-Type: application/json' \
    -d '[ "c756b9ae-7338-454b-b339-d7a1167e4467" ]'
HTTPie
$ echo '[ "c756b9ae-7338-454b-b339-d7a1167e4467" ]' | http PUT 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/dependencies' \
    'Content-Type:application/json'
HTTP Messages
Request
PUT /api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/dependencies HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 42

[ "c756b9ae-7338-454b-b339-d7a1167e4467" ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:16 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.15. Remove All Dependencies From an Command

9.15.1. Description

Remove all the dependency file locations for an existing command.

9.15.2. Endpoint

DELETE /api/v3/commands/{id}/dependencies

9.15.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 64. /api/v3/commands/{id}/dependencies
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/dependencies' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/dependencies'
HTTP Messages
Request
DELETE /api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/dependencies HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:13 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.16. Get Tags For a Command

9.16.1. Description

Get the tags for a command.

9.16.2. Endpoint

GET /api/v3/commands/{id}/tags

9.16.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 65. /api/v3/commands/{id}/tags
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/tags' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/tags'
Response Documentation
Headers
Name Description

Content-Type

application/json

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of tags

false

HTTP Messages
Request
GET /api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/tags HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:49:18 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 150

[ "genie.name:hive", "eb68dd48-ee15-4adf-b4a7-e1a302431874", "d9b8aa8a-50bc-407b-94eb-4b1965922791", "genie.id:1c962204-3e8c-4682-abe7-e04dcbcc2aca" ]

9.17. Add Tags to Command

9.17.1. Description

Add tags to an existing command. Stored as a set so all duplicates are ignored.

genie.id:{id} and genie.name:{name} tags are automatically added by the service.

9.17.2. Endpoint

POST /api/v3/commands/{id}/tags

9.17.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 66. /api/v3/commands/{id}/tags
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of tags

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/tags' -i -X POST \
    -H 'Content-Type: application/json' \
    -d '[ "d9b8aa8a-50bc-407b-94eb-4b1965922791", "eb68dd48-ee15-4adf-b4a7-e1a302431874" ]'
HTTPie
$ echo '[ "d9b8aa8a-50bc-407b-94eb-4b1965922791", "eb68dd48-ee15-4adf-b4a7-e1a302431874" ]' | http POST 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/tags' \
    'Content-Type:application/json'
HTTP Messages
Request
POST /api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/tags HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 82

[ "d9b8aa8a-50bc-407b-94eb-4b1965922791", "eb68dd48-ee15-4adf-b4a7-e1a302431874" ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:18 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.18. Update Tags for a Command

9.18.1. Description

Update the tags for an existing command.

The genie.id:{id} and genie.name:{name} tags can’t be removed. They will automatically be added back by the system.

9.18.2. Endpoint

PUT /api/v3/commands/{id}/tags

9.18.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 67. /api/v3/commands/{id}/tags
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of tags

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/tags' -i -X PUT \
    -H 'Content-Type: application/json' \
    -d '[ "969c072c-7a37-400b-ab75-bf6552b77b66" ]'
HTTPie
$ echo '[ "969c072c-7a37-400b-ab75-bf6552b77b66" ]' | http PUT 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/tags' \
    'Content-Type:application/json'
HTTP Messages
Request
PUT /api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/tags HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 42

[ "969c072c-7a37-400b-ab75-bf6552b77b66" ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:18 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.19. Remove All Tags From Command

9.19.1. Description

Remove all the tags for an existing command

The genie.id:{id} and genie.name:{name} tags will NOT be removed by this operation

9.19.2. Endpoint

DELETE /api/v3/commands/{id}/tags

9.19.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 68. /api/v3/commands/{id}/tags
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/tags' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/tags'
HTTP Messages
Request
DELETE /api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/tags HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:09 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.20. Remove Tag From Command

9.20.1. Description

Remove a tag from an existing command.

You can’t remove the genie.id:{id} and genie.name:{name} tags. They will just be added back by the system

9.20.2. Endpoint

DELETE /api/v3/commands/{id}/tags/{tag}

9.20.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 69. /api/v3/commands/{id}/tags/{tag}
Parameter Description

id

The resource id

tag

The tag to remove

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/tags/aa4783a9-538f-4995-afd2-7a58c80cfdab' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/tags/aa4783a9-538f-4995-afd2-7a58c80cfdab'
HTTP Messages
Request
DELETE /api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/tags/aa4783a9-538f-4995-afd2-7a58c80cfdab HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:18 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.21. Add Applications to a Command

9.21.1. Description

Add new applications (as array of their ID’s) to the existing set of applications the command depends on

The applications for the ID’s must already exist in the system

9.21.2. Endpoint

POST /api/v3/commands/{id}/applications

9.21.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 70. /api/v3/commands/{id}/applications
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of application ids to add to existing set of applications

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/applications' -i -X POST \
    -H 'Content-Type: application/json' \
    -d '[ "0dfbaa51-01ce-4ec5-9208-2de13889899c", "9dab8976-7cae-4952-82a7-c7228f983bed" ]'
HTTPie
$ echo '[ "0dfbaa51-01ce-4ec5-9208-2de13889899c", "9dab8976-7cae-4952-82a7-c7228f983bed" ]' | http POST 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/applications' \
    'Content-Type:application/json'
HTTP Messages
Request
POST /api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/applications HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 82

[ "0dfbaa51-01ce-4ec5-9208-2de13889899c", "9dab8976-7cae-4952-82a7-c7228f983bed" ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:13 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.22. Get the Applications for a Command

9.22.1. Description

Get the applications the command currently depends on. These are the applications that will be installed at runtime when a job is run with the given command

9.22.2. Endpoint

GET /api/v3/commands/{id}/applications

9.22.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 71. /api/v3/commands/{id}/applications
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/applications' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/applications'
Response Documentation
Headers
Name Description

Content-Type

application/hal+json

Payload Fields
Path Type Description Constraints Optional

[]

Array

The set of applications this command depends on

false

HTTP Messages
Request
GET /api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/applications HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:49:13 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 2540

[ {
  "id" : "0dfbaa51-01ce-4ec5-9208-2de13889899c",
  "created" : "2022-09-16T00:49:13.825Z",
  "updated" : "2022-09-16T00:49:13.825Z",
  "version" : "5f84e1b9-ecc6-4613-b248-4670592dbc0b",
  "user" : "5f84e1b9-ecc6-4613-b248-4670592dbc0b",
  "name" : "5f84e1b9-ecc6-4613-b248-4670592dbc0b",
  "description" : null,
  "metadata" : null,
  "tags" : [ "genie.name:5f84e1b9-ecc6-4613-b248-4670592dbc0b", "genie.id:0dfbaa51-01ce-4ec5-9208-2de13889899c" ],
  "configs" : [ ],
  "dependencies" : [ ],
  "setupFile" : null,
  "status" : "ACTIVE",
  "type" : null,
  "links" : [ {
    "rel" : "self",
    "href" : "https://genie.example.com/api/v3/applications/0dfbaa51-01ce-4ec5-9208-2de13889899c"
  }, {
    "rel" : "commands",
    "href" : "https://genie.example.com/api/v3/applications/0dfbaa51-01ce-4ec5-9208-2de13889899c/commands{?status}"
  } ]
}, {
  "id" : "9dab8976-7cae-4952-82a7-c7228f983bed",
  "created" : "2022-09-16T00:49:13.848Z",
  "updated" : "2022-09-16T00:49:13.848Z",
  "version" : "5f84e1b9-ecc6-4613-b248-4670592dbc0b",
  "user" : "5f84e1b9-ecc6-4613-b248-4670592dbc0b",
  "name" : "5f84e1b9-ecc6-4613-b248-4670592dbc0b",
  "description" : null,
  "metadata" : null,
  "tags" : [ "genie.name:5f84e1b9-ecc6-4613-b248-4670592dbc0b", "genie.id:9dab8976-7cae-4952-82a7-c7228f983bed" ],
  "configs" : [ ],
  "dependencies" : [ ],
  "setupFile" : null,
  "status" : "ACTIVE",
  "type" : null,
  "links" : [ {
    "rel" : "self",
    "href" : "https://genie.example.com/api/v3/applications/9dab8976-7cae-4952-82a7-c7228f983bed"
  }, {
    "rel" : "commands",
    "href" : "https://genie.example.com/api/v3/applications/9dab8976-7cae-4952-82a7-c7228f983bed/commands{?status}"
  } ]
}, {
  "id" : "0a587e4e-1a47-4e2d-91b2-96b62d25b986",
  "created" : "2022-09-16T00:49:14.062Z",
  "updated" : "2022-09-16T00:49:14.062Z",
  "version" : "5f84e1b9-ecc6-4613-b248-4670592dbc0b",
  "user" : "5f84e1b9-ecc6-4613-b248-4670592dbc0b",
  "name" : "5f84e1b9-ecc6-4613-b248-4670592dbc0b",
  "description" : null,
  "metadata" : null,
  "tags" : [ "genie.name:5f84e1b9-ecc6-4613-b248-4670592dbc0b", "genie.id:0a587e4e-1a47-4e2d-91b2-96b62d25b986" ],
  "configs" : [ ],
  "dependencies" : [ ],
  "setupFile" : null,
  "status" : "ACTIVE",
  "type" : null,
  "links" : [ {
    "rel" : "self",
    "href" : "https://genie.example.com/api/v3/applications/0a587e4e-1a47-4e2d-91b2-96b62d25b986"
  }, {
    "rel" : "commands",
    "href" : "https://genie.example.com/api/v3/applications/0a587e4e-1a47-4e2d-91b2-96b62d25b986/commands{?status}"
  } ]
} ]

9.23. Set Applications for a Command

9.23.1. Description

Set the applications (as array of their ID’s) that are dependencies of the command.

The applications with the ID’s must already exist in the system

9.23.2. Endpoint

PUT /api/v3/commands/{id}/applications

9.23.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 72. /api/v3/commands/{id}/applications
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

Array of application ids to replace the existing set of applications with

false

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/applications' -i -X PUT \
    -H 'Content-Type: application/json' \
    -d '[ "106325df-0208-4e19-918f-a1a567cdd738", "e79678dd-90bf-450a-b0c6-0684eecd29c8" ]'
HTTPie
$ echo '[ "106325df-0208-4e19-918f-a1a567cdd738", "e79678dd-90bf-450a-b0c6-0684eecd29c8" ]' | http PUT 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/applications' \
    'Content-Type:application/json'
HTTP Messages
Request
PUT /api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/applications HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 82

[ "106325df-0208-4e19-918f-a1a567cdd738", "e79678dd-90bf-450a-b0c6-0684eecd29c8" ]
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:17 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.24. Remove All Applications From a Command

9.24.1. Description

Remove all the applications currently set as dependencies of the command

This does NOT delete the application(s) from the system just unlinks them

9.24.2. Endpoint

DELETE /api/v3/commands/{id}/applications

9.24.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 73. /api/v3/commands/{id}/applications
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/applications' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/applications'
HTTP Messages
Request
DELETE /api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/applications HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:18 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.25. Remove A Single Application From a Command

9.25.1. Description

Remove the identified application as a dependency of the command.

This does NOT delete the application from the system just un-links it

9.25.2. Endpoint

DELETE /api/v3/commands/{id}/applications/{applicationId}

9.25.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 74. /api/v3/commands/{id}/applications/{applicationId}
Parameter Description

id

The resource id

applicationId

The id of the application to remove

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/applications/05aae6e5-ea72-4c60-a076-ae19d587326f' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/applications/05aae6e5-ea72-4c60-a076-ae19d587326f'
HTTP Messages
Request
DELETE /api/v3/commands/1c962204-3e8c-4682-abe7-e04dcbcc2aca/applications/05aae6e5-ea72-4c60-a076-ae19d587326f HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 204 No Content
Date: Fri, 16 Sep 2022 00:49:19 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.26. Get the Clusters that Have Command Available

9.26.1. Description

Search the clusters that the given command is linked to.

9.26.2. Endpoint

GET /api/v3/commands/{id}/clusters

9.26.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 75. /api/v3/commands/{id}/clusters
Parameter Description

id

The resource id

Query Parameters
Parameter Description

status

The status of clusters to search for

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/1b44126d-6f7f-44a8-85aa-4a6624c8161c/clusters?status=UP' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/commands/1b44126d-6f7f-44a8-85aa-4a6624c8161c/clusters?status=UP'
Response Documentation
Headers
Name Description

Content-Type

application/hal+json

Payload Fields
Path Type Description Constraints Optional

[]

Array

The list of clusters found

false

HTTP Messages
Request
GET /api/v3/commands/1b44126d-6f7f-44a8-85aa-4a6624c8161c/clusters?status=UP HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:49:16 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 819

[ {
  "id" : "fb2a4c15-7caa-43e7-8f26-c0219ecddb3f",
  "created" : "2022-09-16T00:49:16.198Z",
  "updated" : "2022-09-16T00:49:16.198Z",
  "version" : "9ae8b50b-3e43-4e40-adbd-8b0684d7591c",
  "user" : "9ae8b50b-3e43-4e40-adbd-8b0684d7591c",
  "name" : "9ae8b50b-3e43-4e40-adbd-8b0684d7591c",
  "description" : null,
  "metadata" : null,
  "tags" : [ "genie.id:fb2a4c15-7caa-43e7-8f26-c0219ecddb3f", "genie.name:9ae8b50b-3e43-4e40-adbd-8b0684d7591c" ],
  "configs" : [ ],
  "dependencies" : [ ],
  "setupFile" : null,
  "status" : "UP",
  "links" : [ {
    "rel" : "self",
    "href" : "https://genie.example.com/api/v3/clusters/fb2a4c15-7caa-43e7-8f26-c0219ecddb3f"
  }, {
    "rel" : "commands",
    "href" : "https://genie.example.com/api/v3/clusters/fb2a4c15-7caa-43e7-8f26-c0219ecddb3f/commands{?status}"
  } ]
} ]

9.27. Get the Cluster Criteria for a Command

9.27.1. Description

Get the priority ordered list of criteria associated with this command that say what attributes a cluster needs to have in order for this command to work on that cluster.

9.27.2. Endpoint

GET /api/v3/commands/{id}/clusterCriteria

9.27.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 76. /api/v3/commands/{id}/clusterCriteria
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/80409993-0427-4d03-8d6a-de22ebb549f7/clusterCriteria' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/commands/80409993-0427-4d03-8d6a-de22ebb549f7/clusterCriteria'
Response Documentation
Headers
Name Description

Content-Type

application/json

Payload Fields
Path Type Description Constraints Optional

[]

Array

A priority ordered list of criteria

true

[].id

String

The unique identifier a resource needs to have to match this criterion

true

[].name

String

The name a resource needs to have to match this criterion

true

[].version

String

The version a resource needs to have to match this criterion

true

[].status

String

The status a resource needs to have to match this criterion

true

[].tags

Array

The set of tags a resource needs to have to match this criterion

true

HTTP Messages
Request
GET /api/v3/commands/80409993-0427-4d03-8d6a-de22ebb549f7/clusterCriteria HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:49:17 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 455

[ {
  "id" : "b1c89fba-2343-43cc-9e85-93a5eb4d5df4",
  "name" : null,
  "version" : null,
  "status" : null,
  "tags" : [ "d6fe286e-3d9f-4b74-b0fb-b0b28cbb6b05", "577d167c-87b0-4b47-a4a8-fe0658585867" ]
}, {
  "id" : "21c54a86-7fe1-405a-a991-c2bd353ac497",
  "name" : "prod",
  "version" : "1.0.0",
  "status" : "UP",
  "tags" : [ "f5046314-b096-47d8-9ec5-d43c6bddeda1", "2eafc9e2-d870-4fde-beb7-98383cea2b3c", "81927e15-9691-4a94-a70f-dc9c814108db" ]
} ]

9.28. Remove all the Cluster Criteria From a Command

9.28.1. Description

Remove all the existing cluster criteria from a given command.

9.28.2. Endpoint

DELETE /api/v3/commands/{id}/clusterCriteria

9.28.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 77. /api/v3/commands/{id}/clusterCriteria
Parameter Description

id

The resource id

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/9fe1af1e-0923-4efa-a0b4-92a756670efb/clusterCriteria' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/commands/9fe1af1e-0923-4efa-a0b4-92a756670efb/clusterCriteria'
HTTP Messages
Request
DELETE /api/v3/commands/9fe1af1e-0923-4efa-a0b4-92a756670efb/clusterCriteria HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Date: Fri, 16 Sep 2022 00:49:09 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.29. Add a New Cluster Criterion For Command

9.29.1. Description

Add a new cluster criterion to the existing list of cluster criterion for the given command. The new criterion will have the lowest priority of all the criterion.

9.29.2. Endpoint

POST /api/v3/commands/{id}/clusterCriteria

9.29.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 78. /api/v3/commands/{id}/clusterCriteria
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

id

String

The unique identifier a resource needs to have to match this criterion

true

name

String

The name a resource needs to have to match this criterion

true

version

String

The version a resource needs to have to match this criterion

true

status

String

The status a resource needs to have to match this criterion

true

tags

Array

The set of tags a resource needs to have to match this criterion

true

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/23e317e0-79e7-488c-b5a5-e7b8cf82c6d2/clusterCriteria' -i -X POST \
    -H 'Content-Type: application/json' \
    -d '{
  "id" : "e792c78c-af96-4ae3-b3ef-e898361aa1ae",
  "name" : "adhocCluster",
  "version" : "3.0.0",
  "status" : "UP",
  "tags" : [ "sched:adhoc", "type:yarn" ]
}'
HTTPie
$ echo '{
  "id" : "e792c78c-af96-4ae3-b3ef-e898361aa1ae",
  "name" : "adhocCluster",
  "version" : "3.0.0",
  "status" : "UP",
  "tags" : [ "sched:adhoc", "type:yarn" ]
}' | http POST 'https://genie.example.com/api/v3/commands/23e317e0-79e7-488c-b5a5-e7b8cf82c6d2/clusterCriteria' \
    'Content-Type:application/json'
HTTP Messages
Request
POST /api/v3/commands/23e317e0-79e7-488c-b5a5-e7b8cf82c6d2/clusterCriteria HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 163

{
  "id" : "e792c78c-af96-4ae3-b3ef-e898361aa1ae",
  "name" : "adhocCluster",
  "version" : "3.0.0",
  "status" : "UP",
  "tags" : [ "sched:adhoc", "type:yarn" ]
}
Response
HTTP/1.1 200 OK
Date: Fri, 16 Sep 2022 00:49:18 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.30. Set Cluster Criteria For Command

9.30.1. Description

Replace the existing cluster criteria for a command with a new list. The criterion are added to the command in the same order they are passed to the service. This is the priority order they will be evaluated in.

9.30.2. Endpoint

PUT /api/v3/commands/{id}/clusterCriteria

9.30.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 79. /api/v3/commands/{id}/clusterCriteria
Parameter Description

id

The resource id

Payload Fields
Path Type Description Constraints Optional

[]

Array

A priority ordered list of criteria

true

[].id

String

The unique identifier a resource needs to have to match this criterion

true

[].name

String

The name a resource needs to have to match this criterion

true

[].version

String

The version a resource needs to have to match this criterion

true

[].status

String

The status a resource needs to have to match this criterion

true

[].tags

Array

The set of tags a resource needs to have to match this criterion

true

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/15a69fc2-319d-475d-8316-8e0d0226b2a1/clusterCriteria' -i -X PUT \
    -H 'Content-Type: application/json' \
    -d '[ {
  "id" : "62d6cada-6dca-4c4b-b2f3-27ec8cbb1742",
  "name" : null,
  "version" : null,
  "status" : null,
  "tags" : [ ]
}, {
  "id" : null,
  "name" : null,
  "version" : "1c866217-f26e-4e2a-9006-c79258ecb7b1",
  "status" : null,
  "tags" : [ ]
}, {
  "id" : null,
  "name" : "f3ad8360-7c0e-4b17-8d21-528c4223f62d",
  "version" : null,
  "status" : null,
  "tags" : [ ]
} ]'
HTTPie
$ echo '[ {
  "id" : "62d6cada-6dca-4c4b-b2f3-27ec8cbb1742",
  "name" : null,
  "version" : null,
  "status" : null,
  "tags" : [ ]
}, {
  "id" : null,
  "name" : null,
  "version" : "1c866217-f26e-4e2a-9006-c79258ecb7b1",
  "status" : null,
  "tags" : [ ]
}, {
  "id" : null,
  "name" : "f3ad8360-7c0e-4b17-8d21-528c4223f62d",
  "version" : null,
  "status" : null,
  "tags" : [ ]
} ]' | http PUT 'https://genie.example.com/api/v3/commands/15a69fc2-319d-475d-8316-8e0d0226b2a1/clusterCriteria' \
    'Content-Type:application/json'
HTTP Messages
Request
PUT /api/v3/commands/15a69fc2-319d-475d-8316-8e0d0226b2a1/clusterCriteria HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 377

[ {
  "id" : "62d6cada-6dca-4c4b-b2f3-27ec8cbb1742",
  "name" : null,
  "version" : null,
  "status" : null,
  "tags" : [ ]
}, {
  "id" : null,
  "name" : null,
  "version" : "1c866217-f26e-4e2a-9006-c79258ecb7b1",
  "status" : null,
  "tags" : [ ]
}, {
  "id" : null,
  "name" : "f3ad8360-7c0e-4b17-8d21-528c4223f62d",
  "version" : null,
  "status" : null,
  "tags" : [ ]
} ]
Response
HTTP/1.1 200 OK
Date: Fri, 16 Sep 2022 00:49:13 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.31. Insert a New Cluster Criterion For Command

9.31.1. Description

Add a new Criterion to the existing list of cluster criteria for the command identified by id. The priority is the place in the list this new criterion should be placed. A value of 0 indicates it should be placed at the front of the list with the highest possible priority. 1 would be second in the list etc. If priority is > the current size of the cluster criteria list this new criterion will be placed at the end as the lowest priority item. Priority must be >= 0.

9.31.2. Endpoint

PUT /api/v3/commands/{id}/clusterCriteria/{priority}

9.31.3. API Docs

Request Documentation
Headers
Name Description

Content-Type

application/json

Path Parameters
Table 80. /api/v3/commands/{id}/clusterCriteria/{priority}
Parameter Description

id

The resource id

priority

Priority of the criterion to insert

Payload Fields
Path Type Description Constraints Optional

id

String

The unique identifier a resource needs to have to match this criterion

true

name

String

The name a resource needs to have to match this criterion

true

version

String

The version a resource needs to have to match this criterion

true

status

String

The status a resource needs to have to match this criterion

true

tags

Array

The set of tags a resource needs to have to match this criterion

true

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/7c5a432e-3102-49e4-80f4-0fa95317d267/clusterCriteria/1' -i -X PUT \
    -H 'Content-Type: application/json' \
    -d '{
  "id" : "dcdecb96-120b-4c61-96f1-68d3723fd160",
  "name" : "insightCluster",
  "version" : "4.0.0",
  "status" : "OUT_OF_SERVICE",
  "tags" : [ "type:presto", "sched:insights" ]
}'
HTTPie
$ echo '{
  "id" : "dcdecb96-120b-4c61-96f1-68d3723fd160",
  "name" : "insightCluster",
  "version" : "4.0.0",
  "status" : "OUT_OF_SERVICE",
  "tags" : [ "type:presto", "sched:insights" ]
}' | http PUT 'https://genie.example.com/api/v3/commands/7c5a432e-3102-49e4-80f4-0fa95317d267/clusterCriteria/1' \
    'Content-Type:application/json'
HTTP Messages
Request
PUT /api/v3/commands/7c5a432e-3102-49e4-80f4-0fa95317d267/clusterCriteria/1 HTTP/1.1
Content-Type: application/json
Host: genie.example.com
Content-Length: 182

{
  "id" : "dcdecb96-120b-4c61-96f1-68d3723fd160",
  "name" : "insightCluster",
  "version" : "4.0.0",
  "status" : "OUT_OF_SERVICE",
  "tags" : [ "type:presto", "sched:insights" ]
}
Response
HTTP/1.1 200 OK
Date: Fri, 16 Sep 2022 00:49:14 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.32. Remove the Cluster Criterion From a Command

9.32.1. Description

Remove the Criterion with the given priority from the current list of cluster criteria associated with the command identified by id. A value of 0 for priority will result in the first element in the list being removed, 1 the second element and so on.

0 ⇐ priority < current criteria length

9.32.2. Endpoint

DELETE /api/v3/commands/{id}/clusterCriteria/{priority}

9.32.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 81. /api/v3/commands/{id}/clusterCriteria/{priority}
Parameter Description

id

The resource id

priority

Priority of the criterion to insert

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/f45420f5-e3cb-486a-8208-90001f4c922d/clusterCriteria/1' -i -X DELETE
HTTPie
$ http DELETE 'https://genie.example.com/api/v3/commands/f45420f5-e3cb-486a-8208-90001f4c922d/clusterCriteria/1'
HTTP Messages
Request
DELETE /api/v3/commands/f45420f5-e3cb-486a-8208-90001f4c922d/clusterCriteria/1 HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Date: Fri, 16 Sep 2022 00:49:14 GMT
Keep-Alive: timeout=60
Connection: keep-alive

9.33. Resolve Clusters for Command Cluster Criteria

9.33.1. Description

For a given Command resolve the Clusters which each of the Commands clusterCriteria would resolve if they were evaluated against the current contents of the database.

9.33.2. Endpoint

GET /api/v3/commands/{id}/resolvedClusters

9.33.3. API Docs

Request Documentation
Headers

None

Path Parameters
Table 82. /api/v3/commands/{id}/resolvedClusters
Parameter Description

id

The resource id

Query Parameters
Parameter Description

addDefaultStatus

Whether the system should add the default cluster status to the criteria. Default: true

Request Examples
cURL
$ curl 'https://genie.example.com/api/v3/commands/af4d82e6-3105-4ba2-b5da-c2ffdca27171/resolvedClusters' -i -X GET
HTTPie
$ http GET 'https://genie.example.com/api/v3/commands/af4d82e6-3105-4ba2-b5da-c2ffdca27171/resolvedClusters'
Response Documentation
Headers
Name Description

Content-Type

application/json

Payload Fields
Path Type Description Constraints Optional

[]

Array

The list of criterion and associated resolved clusters

true

[].criterion

Object

The criterion that was evaluated to yield the resources

false

[].resources

Array

The resources that were resolved by evaluating the criterion

false

[].criterion.id

String

The unique identifier a resource needs to have to match this criterion

true

[].criterion.name

String

The name a resource needs to have to match this criterion

true

[].criterion.version

String

The version a resource needs to have to match this criterion

true

[].criterion.status

String

The status a resource needs to have to match this criterion

true

[].criterion.tags

Array

The set of tags a resource needs to have to match this criterion

true

[].resources[].id

String

The id. If not set the system will set one.

Size must be between 0 and 255 inclusive

true

[].resources[].created

String

The UTC time of creation. Set by system. ISO8601 format including milliseconds.

true

[].resources[].updated

String

The UTC time of last update. Set by system. ISO8601 format including milliseconds.

true

[].resources[].name

String

The name

Must not be empty. Size must be between 0 and 255 inclusive

false

[].resources[].user

String

The user

Must not be empty. Size must be between 0 and 255 inclusive

false

[].resources[].version

String

The version

Must not be empty. Size must be between 0 and 255 inclusive

false

[].resources[].description

String

Any description

Size must be between 0 and 1000 inclusive

true

[].resources[].metadata

Object

Any semi-structured metadata. Must be valid JSON

true

[].resources[].tags

Array

The tags

true

[].resources[].setupFile

String

A location for any setup that needs to be done when installing

Size must be between 0 and 1024 inclusive

true

[].resources[].configs

Array

Any configuration files needed for the resource

true

[].resources[].status

String

The status of the cluster. Options: [UP, OUT_OF_SERVICE, TERMINATED]

Must not be null

false

[].resources[].dependencies

Array

The dependencies for the cluster

true

HTTP Messages
Request
GET /api/v3/commands/af4d82e6-3105-4ba2-b5da-c2ffdca27171/resolvedClusters HTTP/1.1
Host: genie.example.com
Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 16 Sep 2022 00:49:17 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Content-Length: 4132

[ {
  "criterion" : {
    "id" : "950adf30-8124-4712-9840-b991310d7408",
    "name" : null,
    "version" : null,
    "status" : null,
    "tags" : [ ]
  },
  "resources" : [ {
    "id" : "950adf30-8124-4712-9840-b991310d7408",
    "created" : "2022-09-16T00:49:18.554Z",
    "updated" : "2022-09-16T00:49:18.554Z",
    "version" : "919a1517-cb57-4d70-a7fa-d33a9e79c981",
    "user" : "eacf2d8e-660d-4192-a0ed-bdf524d7c1ac",
    "name" : "125fc0ab-29db-48e4-9e4d-d889da93e2e9",
    "description" : null,
    "metadata" : null,
    "tags" : [ "genie.name:125fc0ab-29db-48e4-9e4d-d889da93e2e9", "06482cb6-0585-492d-a8ee-4db9c0cb5228", "genie.id:950adf30-8124-4712-9840-b991310d7408", "76f0484d-a8ca-4a3d-979f-355828913598" ],
    "configs" : [ ],
    "dependencies" : [ ],
    "setupFile" : null,
    "status" : "UP"
  } ]
}, {
  "criterion" : {
    "id" : null,
    "name" : "125fc0ab-29db-48e4-9e4d-d889da93e2e9",
    "version" : null,
    "status" : null,
    "tags" : [ ]
  },
  "resources" : [ {
    "id" : "bb167a80-b454-4ece-9592-37c76700bf5d",
    "created" : "2022-09-16T00:49:18.571Z",
    "updated" : "2022-09-16T00:49:18.571Z",
    "version" : "919a1517-cb57-4d70-a7fa-d33a9e79c981",
    "user" : "eacf2d8e-660d-4192-a0ed-bdf524d7c1ac",
    "name" : "125fc0ab-29db-48e4-9e4d-d889da93e2e9",
    "description" : null,
    "metadata" : null,
    "tags" : [ "genie.name:125fc0ab-29db-48e4-9e4d-d889da93e2e9", "06482cb6-0585-492d-a8ee-4db9c0cb5228", "76f0484d-a8ca-4a3d-979f-355828913598", "genie.id:bb167a80-b454-4ece-9592-37c76700bf5d" ],
    "configs" : [ ],
    "dependencies" : [ ],
    "setupFile" : null,
    "status" : "UP"
  }, {
    "id" : "950adf30-8124-4712-9840-b991310d7408",
    "created" : "2022-09-16T00:49:18.554Z",
    "updated" : "2022-09-16T00:49:18.554Z",
    "version" : "919a1517-cb57-4d70-a7fa-d33a9e79c981",
    "user" : "eacf2d8e-660d-4192-a0ed-bdf524d7c1ac",
    "name" : "125fc0ab-29db-48e4-9e4d-d889da93e2e9",
    "description" : null,
    "metadata" : null,
    "tags" : [ "genie.name:125fc0ab-29db-48e4-9e4d-d889da93e2e9", "06482cb6-0585-492d-a8ee-4db9c0cb5228", "genie.id:950adf30-8124-4712-9840-b991310d7408", "76f0484d-a8ca-4a3d-979f-355828913598" ],
    "configs" : [ ],
    "dependencies" : [ ],
    "setupFile" : null,
    "status" : "UP"
  } ]
}, {
  "criterion" : {
    "id" : null,
    "name" : null,
    "version" : "5d68b6c7-bb44-43d5-afbc-7398051c9da9",
    "status" : null,
    "tags" : [ ]
  },
  "resources" : [ {
    "id" : "f8817836-f7cb-4966-9f28-5c4fdcbc82ca",
    "created" : "2022-09-16T00:49:18.598Z",
    "updated" : "2022-09-16T00:49:18.598Z",
    "version" : "5d68b6c7-bb44-43d5-afbc-7398051c9da9",
    "user" : "944e5199-ff56-4be8-bc4d-dc25d048a4f0",
    "name" : "29bd6f9e-407e-4fdf-a778-a63418ca9373",
    "description" : null,
    "metadata" : null,
    "tags" : [ "0b1e5f4c-03c0-4913-aeb4-92f1c10363cd", "b159a285-62a3-4c97-ab7f-2f5f8fb38b8f", "genie.name:29bd6f9e-407e-4fdf-a778-a63418ca9373", "genie.id:f8817836-f7cb-4966-9f28-5c4fdcbc82ca" ],
    "configs" : [ ],
    "dependencies" : [ ],
    "setupFile" : null,
    "status" : "UP"
  } ]
}, {
  "criterion" : {
    "id" : null,
    "name" : null,
    "version" : null,
    "status" : "TERMINATED",
    "tags" : [ ]
  },
  "resources" : [ ]
}, {
  "criterion" : {
    "id" : null,
    "name" : null,
    "version" : null,
    "status" : null,
    "tags" : [ "0b1e5f4c-03c0-4913-aeb4-92f1c10363cd", "b159a285-62a3-4c97-ab7f-2f5f8fb38b8f" ]
  },
  "resources" : [ {
    "id" : "f8817836-f7cb-4966-9f28-5c4fdcbc82ca",
    "created" : "2022-09-16T00:49:18.598Z",
    "updated" : "2022-09-16T00:49:18.598Z",
    "version" : "5d68b6c7-bb44-43d5-afbc-7398051c9da9",
    "user" : "944e5199-ff56-4be8-bc4d-dc25d048a4f0",
    "name" : "29bd6f9e-407e-4fdf-a778-a63418ca9373",
    "description" : null,
    "metadata" : null,
    "tags" : [ "0b1e5f4c-03c0-4913-aeb4-92f1c10363cd", "b159a285-62a3-4c97-ab7f-2f5f8fb38b8f", "genie.name:29bd6f9e-407e-4fdf-a778-a63418ca9373", "genie.id:f8817836-f7cb-4966-9f28-5c4fdcbc82ca" ],
    "configs" : [ ],
    "dependencies" : [ ],
    "setupFile" : null,
    "status" : "UP"
  } ]
} ]