blob: f6325b7ff4ae968517fe4c2d6e13895af5e3dc60 [file] [log] [blame]
# ================================================================================
# Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved.
# ================================================================================
# 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
#
# http://www.apache.org/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.
# ============LICENSE_END=========================================================
#
# ECOMP is a trademark and service mark of AT&T Intellectual Property.
# Example YAML to get you started quickly.
# Be aware that YAML has indentation based scoping.
# Code completion support is available so start typing for available options.
swagger: '2.0'
# This is your document metadata
info:
version: "4.0.10"
title: CDAP Broker API
paths:
/:
get:
description: shows some information about this service
responses:
200:
description: successful response
schema:
$ref: '#/definitions/info'
/application:
get:
description: get all applications registered with this broker
responses:
200:
description: successful response
schema:
type: array
items:
$ref: '#/definitions/appname'
/application/delete:
post:
description: endpoint to delete multiple applications at once. Returns an array of status codes, where statuscode[i] = response returned from DELETE(application/i)
parameters:
- name: postbody
in: body
description: required post body
required: true
schema:
$ref: '#/definitions/multideleteput'
responses:
200:
description: successful response
schema:
type: array
items:
$ref: '#/definitions/returncode'
/application/{appname}:
parameters:
- name: appname
in: path
description: Name of the application.
required: true
type: string
format: text
get:
description: Returns the representation of the application resource, including the links for healthcheck and metrics.
responses:
200:
description: Successful response
schema:
$ref: '#/definitions/Application'
404:
description: no app with name 'appname' registered with this broker.
put:
description: Register an app for service and configuration discovery. This will light up a metrics and health endpoint for this app. `appname` is assumed to also be the key in consul.
consumes:
- application/json
produces:
- application/json
parameters:
- name: putbody
in: body
description: required put body
required: true
schema:
$ref: '#/definitions/appput'
responses:
200:
description: Successful response
schema:
$ref: '#/definitions/Application'
400:
description: put was performed but the appname was already registered with the broker, or Invalid PUT body
delete:
description: Remove an app for service and configuration discovery. This will remove the metrics and health endpoints for this app.
responses:
200:
description: Successful response
404:
description: no app with name 'appname' registered with this broker.
/application*/{appname}:
parameters:
- name: appname
in: path
description: Name of the application.
required: true
type: string
format: text
put:
description: (This is a hacky way of supporting "oneOf" because Swagger does not support oneOf https://github.com/OAI/OpenAPI-Specification/issues/333. This is the same endpoint as PUT /application/appname, except the PUT body is different.)
Register a hydrator app for service and configuration discovery. This will light up a metrics and health endpoint for this app. `appname` is assumed to also be the key in consul.
consumes:
- application/json
produces:
- application/json
parameters:
- name: putbody
in: body
description: required put body
required: true
schema:
$ref: '#/definitions/hydratorappput'
responses:
200:
description: Successful response
schema:
$ref: '#/definitions/Application'
400:
description: put was performed but the appname was already registered with the broker, or Invalid PUT body
/application/{appname}/metrics:
get:
# This is array of GET operation parameters:
description: Get live (real-time) app specific metrics for the running app appname. Metrics are customized per each app by the component developer
parameters:
# An example parameter that is in query and is required
- name: appname
in: path
description: Name of the application to get metrics for.
required: true
type: string
format: test
# Expected responses for this operation:
responses:
200:
description: Successful response
schema:
$ref: '#/definitions/MetricsObject'
404:
description: no app with name 'appname' registered with this broker.
/application/{appname}/healthcheck:
get:
# This is array of GET operation parameters:
description: Perform a healthcheck on the running app appname.
parameters:
# An example parameter that is in query and is required
- name: appname
in: path
description: Name of the application to get the healthcheck for.
required: true
type: string
format: test
# Expected responses for this operation:
responses:
# Response code
200:
description: Successful response, healthcheck pass
404:
description: no app with name 'appname' registered with this broker, or the healthcheck has failed (though I would like to disambiguiate from the first case, CDAP returns a 404 for this).
/application/{appname}/reconfigure:
parameters:
- name: appname
in: path
description: Name of the application.
required: true
type: string
format: text
put:
description: Reconfigures the application.
parameters:
- name: putbody
in: body
description: required put body
required: true
schema:
$ref: '#/definitions/reconfigput'
responses:
200:
description: Successful response
400:
description: Bad request. Can happen with 1) {appname} is not registered with the broker, 2) the required PUT body is wrong, or 3) the smart interface was chosen and none of the config keys match anything in app_config or app_preferences
definitions:
MetricsObject:
type: object
description: key,value object where the key is 'appmetrics' and the value is an app dependent json and specified by the component developer
properties:
appmetrics:
type: object
Application:
type: object
properties:
appname:
description: application name
type: string
healthcheckurl:
description: fully qualified url to perform healthcheck
type: string
metricsurl:
description: fully qualified url to get metrics from
type: string
url:
description: fully qualified url of the resource
type: string
connectionurl:
description: input URL that you can POST data into (URL of the CDAP stream)
type: string
serviceendpoints:
description: a list of HTTP services exposed by this CDAP application
type: array
items:
$ref: '#/definitions/service_method'
reconfigput:
type: object
properties:
reconfiguration_type:
description: the type of reconfiguration
type: string
enum: ["program-flowlet-app-config", "program-flowlet-app-preferences", "program-flowlet-smart"]
config:
description: the config JSON
type: object
required: ["reconfiguration_type", "config"]
multideleteput:
type: object
properties:
appnames:
type: array
items:
$ref: '#/definitions/appname'
appname:
description: an application name
type: string
hydratorappput:
type: object
properties:
cdap_application_type:
description: denotes whether this is a program-flowlet style application or a hydrator pipeline. For hydrator, this value must be "hydrator-pipeline"
type: string
enum: ["hydrator-pipeline"]
namespace:
description: the cdap namespace this is deployed into
type: string
pipeline_config_json_url:
description: the URL of the config.json for this pipeline
type: string
streamname:
description: name of the CDAP stream to ingest data into this app. Should come from the developer and Tosca model.
type: string
dependencies:
description: represents a list of dependencies to be loaded for this pipeline. Not required.
type: array
items:
$ref: '#/definitions/hydratordep'
required: ["cdap_application_type", "namespace", "pipeline_config_json_url", "streamname"]
appput:
type: object
properties:
cdap_application_type:
description: denotes whether this is a program-flowlet style application or a hydrator pipeline. For program-flowlet style apps, this value must be "program-flowlet"
type: string
enum: ["program-flowlet"]
streamname:
description: name of the CDAP stream to ingest data into this app. Should come from the developer and Tosca model.
type: string
namespace:
description: the cdap namespace this is deployed into
type: string
jar_url:
description: the URL that the JAR you're deploying resides
type: string
artifact_name:
description: the name of the CDAP artifact to be added
type: string
artifact_ver:
description: the version of the artifact. Must be in X.Y.Z form
app_config:
description: the application config JSON
type: object
app_preferences:
description: the application preferences JSON
type: object
programs:
type: array
items:
$ref: '#/definitions/programs'
program_preferences:
type: array
items:
$ref: '#/definitions/programpref'
services:
type: array
items:
$ref: '#/definitions/service_endpoint'
service_endpoint:
description: descirbes a service endpoint, including the service name, the method name, and the method type (GET, PUT, etc, most of the time will be GET)
type: object
properties:
service_name:
type: string
description: the name of the service
service_endpoint:
type: string
description: the name of the endpoint on the service
endpoint_method:
type: string
description: GET, POST, PUT, etc
service_method:
description: a URL and HTTP method exposed via a CDAP service
type: object
properties:
url:
type: string
description: the fully qualified URL in CDAP for this service
method:
type: string
description: HTTP method you can perform on the URL, e.g., GET, PUT, etc
programs:
description: the list of programs in this CDAP app
type: object
properties:
program_type:
description: must be one of flows, mapreduce, schedules, spark, workflows, workers, or services
type: string
program_id:
description: the name of the program
type: string
returncode:
description: an httpreturncode
type: integer
hydratordep:
description: represents a hydrator pipeline dependency. An equivelent to the following CURLs are formed with the below four params shown in CAPS "curl -v -w"\n" -X POST http://cdapurl:11015/v3/namespaces/setelsewhere/artifacts/ARTIFACT_NAME -H "Artifact-Extends:ARTIFACT_EXTENDS_HEADER" -H “Artifact-Version:ARTIFACT_VERSION_HEADER” --data-binary @(DOWNLOADED FROM ARTIFACT_URL)","curl -v -w"\n" -X PUT http://cdapurl:11015/v3/namespaces/setelsewhere/artifacts/ARTIFACT_NAME/versions/ARTIFACT_VERSION_HEADER/properties -d (DOWNLOADED FROM UI_PROPERTIES_URL)"
properties:
artifact_extends_header:
description: the value of the header that gets passed in for artifact-extends, e.g., "Artifact-Extends:system:cdap-data-pipeline[4.0.1,5.0.0)"
type: string
artifact_name:
description: the name of the artifact
type: string
artifact_version_header :
description: the value of the header that gets passed in for artifact-version, e.g., "Artifact-Version:1.0.0-SNAPSHOT"
type: string
artifact_url:
description: the URL of the artifact JAR
type: string
ui_properties_url:
description: the URL of the properties.json if the custom artifact has UI properties. This is optional.
type: string
required: ["artifact_extends_header", "artifact_name", "artifact_version_header", "artifact_url"]
programpref:
description: the list of programs in this CDAP app
type: object
properties:
program_type:
description: must be one of flows, mapreduce, schedules, spark, workflows, workers, or services
type: string
program_id:
description: the name of the program
type: string
program_pref:
description: the preference JSON to set for this program
type: object
info:
description: some broker information
type: object
properties:
managed cdap url:
description: the url of the CDAP cluster API this broker is managing
type: string
number of applications registered:
type: integer
uptime (s):
type: integer
cdap GUI port:
type: integer
description: The GUI port of the CDAP cluster this broker is managing. Mostly to help users of this API check their application in cdap. Note, will return UNKNOWN_CDAP_VERSION if it cannot be determined.
cdap cluster version:
type: string
description: the version of the CDAP cluster this broker is managing. Note, will return UKNOWN_CDAP_VERSION if it cannot be determined.
broker API version:
type: string
description: the API version of this running broker