Skip to content

Instantly share code, notes, and snippets.

@davidfetter
Created February 22, 2017 16:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save davidfetter/7245f98ad41f9222aaf3c9bebbd4d4de to your computer and use it in GitHub Desktop.
Save davidfetter/7245f98ad41f9222aaf3c9bebbd4d4de to your computer and use it in GitHub Desktop.
$ swagger validate service_broker.yaml
SyntaxError: Swagger schema validation failed.
Additional properties not allowed: ref at #/definitions/Update/properties/previous_values
Additional properties not allowed: service_instances/:instance_id at #/paths
JSON_OBJECT_VALIDATION_FAILED
at Function.ono [as syntax] (/usr/local/lib/node_modules/swagger-cli/node_modules/ono/lib/index.js:61:20)
at validateSchema (/usr/local/lib/node_modules/swagger-cli/node_modules/swagger-parser/lib/validate-schema.js:29:15)
at /usr/local/lib/node_modules/swagger-cli/node_modules/swagger-parser/lib/index.js:144:9
z-schema validation error: JSON_OBJECT_VALIDATION_FAILED
at ZSchema.getLastError (/usr/local/lib/node_modules/swagger-cli/node_modules/z-schema/src/ZSchema.js:221:13)
at validateSchema (/usr/local/lib/node_modules/swagger-cli/node_modules/swagger-parser/lib/validate-schema.js:27:23)
at /usr/local/lib/node_modules/swagger-cli/node_modules/swagger-parser/lib/index.js:144:9
swagger: '2.0'
info:
version: '2.10'
title: Service Broker API
description: >
The Cloud Foundry services API defines the contract between the Cloud
Controller and the service broker. The broker is expected to implement
several HTTP (or HTTPS) endpoints underneath a URI prefix. One or more
services can be provided by a single broker, and load balancing enables
horizontal scalability of redundant brokers. Multiple Cloud Foundry instances
can be supported by a single broker using different URL prefixes and
credentials. [Learn more about the Service Broker
API.](http://docs.cloudfoundry.org/services/api.html)
host: 'postgres-20.run.aws-usw02-pr.ice.predix.io'
basePath: /v2
schemes:
- http
paths:
/catalog:
get:
operationId: catalog
summary: Gets services registered within the broker
tags:
- catalog
description: "The first endpoint that a broker must implement is the service catalog. Cloud Controller will initially fetch this endpoint from all brokers and make adjustments to the user-facing service catalog stored in the Cloud Controller database. \n"
produces:
- application/json
responses:
'200':
description: successful operation
schema:
type: object
$ref: '#/definitions/CatalogServices'
'400':
description: Invalid status value
'/service_instances/{instance_id}':
parameters:
- $ref: '#/parameters/instance_id'
put:
operationId: createServiceInstance
produces:
- application/json
consumes:
- application/json
tags:
- service_instances
description: 'When the broker receives a provision request from Cloud Controller, it should synchronously take whatever action is necessary to create a new service resource for the developer. The result of provisioning varies by service type, although there are a few common actions that work for many services.'
summary: Provisions a service instance
parameters:
- name: service
required: true
description: Service information.
in: body
schema:
type: object
$ref: '#/definitions/Service'
responses:
'200':
description: May be returned if the service instance already exists and the requested parameters are identical to the existing service instance. The expected response body is below.
schema:
type: object
$ref: '#/definitions/Dashboard_url'
'201':
description: Service instance has been provisioned. The expected response body is below.
schema:
type: object
$ref: '#/definitions/Dashboard_url'
'202':
description: Service instance provisioning is in progress. This triggers the platform marketplace to poll the Service Instance Last Operation Endpoint for operation status.
schema:
type: object
$ref: '#/definitions/Dashboard_url
'409':
description: 'Should be returned if a service instance with the same id already exists but with different attributes. The expected response body is {} .'
schema:
type: object
$ref: '#/definitions/Empty'
'422':
description: >
Should be returned if the broker only supports asynchronous
provisioning for the requested plan and the request did not include
?accepts_incomplete=true. The expected response body is: { "error":
"AsyncRequired", "description": "This service plan requires client
support for asynchronous service operations." }, as described below.
patch:
operationId: updateServiceInstance
summary: Updating a Service Instance
description: 'Brokers that implement this endpoint can enable users to modify attributes of an existing service instance. The first attribute Cloud Foundry supports users modifying is the service plan. This effectively enables users to upgrade or downgrade their service instance to other plans. To see how users make these requests, [see Managing Services](https://docs.cloudfoundry.org/devguide/services/managing-services.html#update_service).'
consumes:
- application/json
produces:
- application/json
tags:
- service_instances
parameters:
- name: plan
description: New Plan information.
required: true
in: body
schema:
type: object
$ref: '#/definitions/ServicePlan'
responses:
'200':
description: 'New plan is effective. The expected response body is {}.'
schema:
type: object
$ref: '#/definitions/Empty'
'422':
description: 'May be returned if the particular plan change requested is not supported or if the request can not currently be fulfilled due to the state of the instance (eg. instance utilization is over the quota of the requested plan). Broker should include a user-facing message in the body; for details [see Broker Errors](https://docs.cloudfoundry.org/services/api.html#broker-errors).'
schema:
type: object
delete:
operationId: deprovisionServiceInstance
summary: Deprovisions a service instance.
description: 'When a broker receives a deprovision request from Cloud Controller, it should delete any resources it created during the provision. Usually this means that all resources are immediately reclaimed for future provisions.'
produces:
- application/json
tags:
- service_instances
parameters:
- name: deprovisionParameters
required: true
in: body
description: Parameters to identify the service to be deprovisioned
schema:
type: object
$ref: '#/definitions/UnbindParameters'
responses:
'200':
description: 'Service instance was deleted. The expected response body is {}.'
schema:
type: object
$ref: '#/definitions/Empty'
'410':
description: 'Should be returned if the binding does not exist. The expected response body is {}.'
schema:
type: object
$ref: '#/definitions/Empty'
'/service_instances/{instance_id}/service_bindings/{binding_id}':
parameters:
- $ref: '#/parameters/instance_id'
- $ref: '#/parameters/binding_id'
put:
operationId: serviceBind
x-version: "2.6"
summary: Binds to a service
description: 'When the broker receives a bind request from the Cloud Controller, it should return information which helps an application to utilize the provisioned resource. This information is generically referred to as credentials. Applications should be issued unique credentials whenever possible, so one application access can be revoked without affecting other bound applications. For more information on credentials, [see Binding Credentials](https://docs.cloudfoundry.org/services/binding-credentials.html).'
produces:
- application/json
consumes:
- application/json
tags:
- service_instances
parameters:
- name: binding
required: true
in: body
schema:
type: object
$ref: '#/definitions/Binding'
responses:
'200':
description: May be returned if the binding already exists and the requested parameters are identical to the existing binding.
schema:
type: object
$ref: '#/definitions/BindingResponse'
'201':
description: Binding has been created.
schema:
type: object
$ref: '#/definitions/BindingResponse'
'409':
description: 'Should be returned if the requested binding already exists. The expected response body is {}, though the description field can be used to return a user-facing error message, as described in Broker Errors.'
schema:
type: object
$ref: '#/definitions/Empty'
delete:
operationId: serviceUnbind
summary: Unbinds a service
description: 'When a broker receives an unbind request from Cloud Controller, it should delete any resources it created in bind. Usually this means that an application immediately cannot access the resource.'
produces:
- application/json
tags:
- service_instances
parameters:
- name: UnbindParameters
in: body
required: true
schema:
type: object
$ref: '#/definitions/UnbindParameters'
responses:
'200':
description: 'Binding was deleted. The expected response body is {}.'
schema:
type: object
$ref: '#/definitions/Empty'
'410':
description: 'Should be returned if the binding does not exist. The expected response body is {}.'
schema:
type: object
$ref: '#/definitions/Empty'
'/service_instances/{instance_id}/last_operation':
get:
operationId: lastOperation
summary: provides these query string parameters as useful hints for brokers
parameters:
- $ref: '#/parameters/instance_id'
operation:
type: string
description: >
A broker-provided identifier for the operation. When a value for
operation is included with asynchronous responses for Provision,
Update, and Deprovision requests, the broker client should provide
the same value using this query parameter as a URL-encoded string.
responses:
'200':
description: 'Returns a state and a description'
schema:
type: object
$ref: '#/definitions/LastOperation'
'410':
description: >
Appropriate only for asynchronous delete operations. The platform
should consider this response a success and remove the resource from
its database. The expected response body is {}. Returning this while
the platform is polling for create or update operations should be
interpreted as an invalid response and the platform should continue
polling.
schema:
type: object
$ref: '#/definitions/Empty'
'service_instances/:instance_id':
patch:
operationId: serviceUpdate
x-version: "2.6"
summary: Updates a service instance
description: 'By implementing this endpoint, service broker authors can enable users to modify two attributes of an existing service instance: the service plan and parameters. By changing the service plan, users can upgrade or downgrade their service instance to other plans. By modifying properties, users can change configuration options that are specific to a service or plan.'
produces:
- application/json
consumes:
- application/json
tags:
- service_instances
parameters:
- name: update
required: true
in: body
schema:
type: object
$ref: '#/definitions/Update'
parameters:
instance_id:
name: instance_id
description: 'The instance_id of a service instance is provided by the Cloud Controller. This ID will be used for future requests (bind and deprovision), so the broker must use it to correlate the resource it creates.'
type: string
in: path
required: true
binding_id:
name: binding_id
description: The binding_id of a service binding is provided by the Cloud Controller.
type: string
in: path
required: true
definitions:
CatalogServices:
description: list of services
properties:
services:
type: array
items:
$ref: '#/definitions/Services'
Services:
description: Schema of a service object
properties:
id:
type: string
description: >
An identifier used to correlate this service in future requests to the
catalog. This must be unique within Cloud Foundry, using a GUID is
recommended.
name:
type: string
description: 'The CLI-friendly name of the service that will appear in the catalog. All lowercase, no spaces.'
description:
type: string
description: A short description of the service that will appear in the catalog.
bindable:
type: boolean
description: 'This optional field Specifies whether instances of the service plan can be bound to applications.'
tags:
type: array
description: >
Tags provide a flexible mechanism to expose a classification,
attribute, or base technology of a service, enabling equivalent
services to be swapped out without changes to dependent logic in
applications, buildpacks, or other services. E.g. mysql, relational,
redis, key-value, caching, messaging, amqp.
items:
type: string
metadata:
type: object
$ref: '#/definitions/Meta_data'
description: 'A list of metadata for a service offering. For more information, see [Service Metadata](https://docs.cloudfoundry.org/services/catalog-metadata.html).'
requires:
type: array
description: 'A list of permissions that the user would have to give the service, if they provision it. The only permission currently supported is syslog_drain; for more info [see Application Log Streaming](https://docs.cloudfoundry.org/services/app-log-streaming.html).'
items:
type: string
plan_updateable:
type: boolean
description: Whether the service supports upgrade/downgrade for some plans. Please note that the misspelling of the attribute plan_updatable to plan_updateable was done by mistake. We have opted to keep that misspelling instead of fixing it and thus breaking backward compatibility.
plans:
type: array
description: A list of plans for this service
items:
$ref: '#/definitions/Plan'
dashboard_client:
type: object
description: 'Contains the data necessary to activate the [Dashboard SSO feature](https://docs.cloudfoundry.org/services/dashboard-sso.html) for this service'
$ref: '#/definitions/Dashboard_client'
Plan:
description: A plan for the service
properties:
id:
type: string
description: 'An identifier used to correlate this plan in future requests to the catalog. This must be unique within Cloud Foundry, using a GUID is recommended.'
name:
type: string
description: 'The CLI-friendly name of the plan that will appear in the catalog. All lowercase, no spaces.'
description:
type: string
description: A short description of the service that will appear in the catalog.
metadata:
type: object
description: 'A list of metadata for a service plan. For more information, [see Service Metadata](https://docs.cloudfoundry.org/services/catalog-metadata.html).'
free:
type: boolean
description: 'This field allows the plan to be limited by the non_basic_services_allowed field in a Cloud Foundry Quota, [see Quota Plans](http://docs.cloudfoundry.org/running/managing-cf/quota-plans.html).'
bindable:
type: boolean
description: 'This optional field Specifies whether instances of the service plan can be bound to applications.'
Dashboard_client:
description: 'Contains the data necessary to activate the [Dashboard SSO feature](https://docs.cloudfoundry.org/services/dashboard-sso.html) for this service'
properties:
id:
type: string
description: 'The id of the Oauth2 client that the service intends to use. The name may be taken, in which case the API will return an error to the operator'
secret:
type: string
description: A secret for the dashboard client
redirect_uri:
type: string
description: A domain for the service dashboard that will be whitelisted by the UAA to enable SSO
Service:
description: Service object
properties:
service_id:
type: string
description: 'The ID of the service within the catalog above. While not strictly necessary, some brokers might make use of this ID.'
plan_id:
type: string
description: 'The ID of the plan within the above service (from the catalog endpoint) that the user would like provisioned. Because plans have identifiers unique to a broker, this is enough information to determine what to provision.'
organization_guid:
type: string
description: 'The Cloud Controller GUID of the organization under which the service is to be provisioned. Although most brokers will not use this field, it could be helpful in determining data placement or applying custom business rules.'
space_guid:
type: string
description: 'Similar to organization_guid, but for the space.'
parameteres:
type: object
$ref: '#/definitions/Parameter'
description: Cloud Foundry API clients can provide a JSON object of configuration parameters with their request and this value will be passed through to the service broker. Brokers are responsible for validation.
LastOperation:
description: Last operation of service
properties:
state:
type: string
description: 'Valid values are in progress, succeeded, and failed. While "state": "in progress", the platform should continue polling. A response with "state": "succeeded" or "state": "failed" should cause the platform to cease polling'
description:
type: string
description: 'Optional field. A user-facing message displayed to the platform API client. Can be used to tell the user details about the status of the operation.'
Dashboard_url:
description: "The URL of a web-based management user interface for the service instance; we refer to this as a service dashboard. The URL should contain enough information for the dashboard to identify the resource being accessed ( in the example below). For information on how users can authenticate with service dashboards via SSO, [see Dashboard Single Sign-On](https://docs.cloudfoundry.org/services/dashboard-sso.html)."
properties:
dashboard_url:
type: string
description: "The URL of a web-based management user interface for the service instance; we refer to this as a service dashboard. The URL should contain enough information for the dashboard to identify the resource being accessed (in the example below). For information on how users can authenticate with service dashboards via SSO, [see Dashboard Single Sign-On](https://docs.cloudfoundry.org/services/dashboard-sso.html)."
Empty:
type: string
description: 'Expected empty response could be {}'
ServicePlan:
description: New Plan to be added to a service.
properties:
plan_id:
type: string
description: ID of the new plan from the catalog.
parameters:
type: object
$ref: '#/definitions/Parameter'
description: Cloud Foundry API clients can provide a JSON object of configuration parameters with their request and this value will be passed through to the service broker. Brokers are responsible for validation.
previous_values:
type: object
description: Information about the instance prior to the update.
$ref: '#/definitions/PreviousValues'
PreviousValues:
description: Information about the instance prior to the update.
properties:
plan_id:
type: string
description: ID of the plan prior to the update.
service_id:
type: string
description: ID of the service for the instance.
organization_id:
type: string
description: ID of the organization containing the instance.
space_id:
type: string
description: ID of the space containing the instance.
Parameter:
description: A key value parameters
properties:
name:
type: string
description: Name of the parameter
value:
type: object
description: value of the parameter
Binding:
description: Information to bind the service to an application.
properties:
app_guid:
type: string
description: GUID of the application that you want to bind your service to. Will be included when users bind applications to service instances.
plan_id:
type: string
description: 'ID of the plan from the catalog. While not strictly necessary, some brokers might make use of this ID.'
service_id:
type: string
description: 'ID of the service from the catalog. While not strictly necessary, some brokers might make use of this ID.'
parameters:
type: object
$ref: '#/definitions/Parameter'
description: Cloud Foundry API clients can provide a JSON object of configuration parameters with their request and this value will be passed through to the service broker. Brokers are responsible for validation.
BindingResponse:
description: Success binding response.
properties:
credentials:
type: object
description: 'A free-form hash of credentials that the bound application can use to access the service. For more information, [see Binding Credentials](https://docs.cloudfoundry.org/services/binding-credentials.html).'
syslog_drain_url:
type: string
description: 'A URL to which Cloud Foundry should drain logs for the bound application. requires syslog_drain must be declared in the catalog endpoint or Cloud Foundry will consider the response invalid. For details, [see Application Log Streaming](https://docs.cloudfoundry.org/services/app-log-streaming.html).'
Meta_data:
description: metadata related to the service
properties:
displayName:
type: string
description: displayName of the service.
listing:
type: object
description: Listing.
$ref: '#/definitions/Listing'
provider:
type: object
description: Provider of the service.
$ref: '#/definitions/Provider'
Listing:
description: Listing.
properties:
blurb:
description: blurb
type: string
imageUrl:
description: image URL.
type: string
longDescription:
description: Long Description
type: string
Provider:
description: Provider
properties:
name:
description: Provider Name
type: string
UnbindParameters:
description: Parameters needed to unbind a service instance
properties:
service_id:
type: string
description: 'ID of the service from the catalog. While not strictly necessary, some brokers might make use of this ID.'
plan_id:
type: string
description: 'ID of the plan from the catalog. While not strictly necessary, some brokers might make use of this ID.'
Update:
description: 'Change service plan or parameters'
properties:
service_id:
type: string
description: The ID of the service (from the catalog). Must be globally unique.
plan_id:
type: string
description: The ID of the plan (from the catalog) for which the service instance has been requested. Must be unique to a service.
parameters:
type: json
description: Configuration options for the service instance.
accepts_incomplete:
type: boolean
description: >
A value of true indicates that the marketplace and its clients support
asynchronous broker operations. If this parameter is not included in
the request, and the broker can only provision an instance of the
requested plan asynchronously, the broker should reject the request
with a 422 as described below.'
previous_values:
type: object
ref: '#/definitions/PreviousValues'
description: Information about the instance prior to the update.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment