Revert "added missing traits"

Revert "added missing traits"

This reverts commit 2f3b4530420a515df2d6d3acddcab99927622b92.

#%RAML 0.8
---
title: RPooli API
baseUri: ${baseUri}/api/{version}
version: v1
mediaType:  application/json

documentation:
  - title: RPooli API
    content: |
      <pre>
       ___ ___          _ _
      | _ \ _ \___  ___| (_)
      |   /  _/ _ \/ _ \ | |
      |_|_\_| \___/\___/_|_|
      </pre>
      _A pool of R nodes, exposed over RMI and managed over HTTP_

schemas:
 - error.json:  !include schema/error.json
 - pool.json:   !include schema/pool.json
 - node.json:   !include schema/node.json
 - nodes.json:  !include schema/nodes.json
 - conf-r.json: !include schema/conf-r.json

traits:
 - erroring:
     usage: Defines errors that yield a JSON response body.
     responses:
       400:
         body:
           schema: error.json
       500:
         body:
           schema: error.json

/pool:
  is: [ erroring ]
  description: Manage the pool of RServi nodes.
  get:
    description: Retrieve information about the pool.
    responses:
      200:
        body:
          schema: pool.json

/nodes:
  is: [ erroring ]
  description: Manage the RServi nodes.
  get:
    description: Retrieve the list of nodes.
    responses:
      200:
        body:
          schema: nodes.json
  /{nodeId}:
    description: Manage a single RServi node.
    uriParameters:
      nodeId:
        type: string
        required: true
    get:
      description: Retrieve a single node.
      responses:
        200:
          body:
            schema: node.json
        404:
          description: The node ID doesn't exist.
          body:
            schema: error.json
    delete:
      description: Evict a node
      queryParameters:
        kill:
          description: If true, the node is immediately evicted.
          type: boolean
          required: false
          default: false
      responses:
        204:
          description: The node has been evicted.
    /console:
      description: Control the debug console.
      post:
        description: Enable the debug console.
        responses:
          204:
            description: The debug console is active.
      delete:
        description: The debug console is inactive.
        responses:
          204:
            description: The command has been successfully executed.
  /test:
    description: Simulate client actions.
    post:
      description: Acquire a node from the pool.
      responses:
        204:
          description: A node has been acquired.
    delete:
      description: Release all the acquired nodes to the pool.
      responses:
        204:
          description: All acquired nodes have been released.

/config:
  is: [ erroring ]
  description: Configure RPooli.
  /r:
    description: R/Rj nodes configuration.
    get:
      description: Retrieve the current configuration.
      responses:
        200:
          body:
            schema: conf-r.json
    put:
      description: Configure the parameters to start R.
      queryParameters:
        save:
          description: If true, the configuration will be applied and saved, otherwise it will only be applied.
          type: boolean
          required: false
          default: false
      body:
        schema: conf-r.json
      responses:
        204:
          description: The configuration has been accepted.
    /default:
      description: The default configuration.
      get:
        description: Get the default configuration.
        responses:
          200:
            body:
              schema: conf-r.json

#%RAML 0.8
---
title: RPooli API
baseUri: ${baseUri}/api/{version}
version: v1
mediaType:  application/json

documentation:
  - title: RPooli API
    content: |
      <pre>
       ___ ___          _ _
      | _ \ _ \___  ___| (_)
      |   /  _/ _ \/ _ \ | |
      |_|_\_| \___/\___/_|_|
      </pre>
      _A pool of R nodes, exposed over RMI and managed over HTTP_

schemas:
 - error.json:  !include schema/error.json
 - pool.json:   !include schema/pool.json
 - node.json:   !include schema/node.json
 - nodes.json:  !include schema/nodes.json
 - conf-r.json: !include schema/conf-r.json

traits:
 - erroring:
     usage: Defines errors that yield a JSON response body.
     responses:
       400:
         body:
           schema: error.json
       500:
         body:
           schema: error.json

/pool:
  is: [ erroring ]
  description: Manage the pool of RServi nodes.
  get:
    description: Retrieve information about the pool.
    responses:
      200:
        body:
          schema: pool.json

/nodes:
  is: [ erroring ]
  description: Manage the RServi nodes.
  get:
    description: Retrieve the list of nodes.
    responses:
      200:
        body:
          schema: nodes.json
  /{nodeId}:
    is: [ erroring ]
    description: Manage a single RServi node.
    uriParameters:
      nodeId:
        type: string
        required: true
    get:
      description: Retrieve a single node.
      responses:
        200:
          body:
            schema: node.json
        404:
          description: The node ID doesn't exist.
          body:
            schema: error.json
    delete:
      description: Evict a node
      queryParameters:
        kill:
          description: If true, the node is immediately evicted.
          type: boolean
          required: false
          default: false
      responses:
        204:
          description: The node has been evicted.
    /console:
      is: [ erroring ]
      description: Control the debug console.
      post:
        description: Enable the debug console.
        responses:
          204:
            description: The debug console is active.
      delete:
        description: The debug console is inactive.
        responses:
          204:
            description: The command has been successfully executed.
  /test:
    is: [ erroring ]
    description: Simulate client actions.
    post:
      description: Acquire a node from the pool.
      responses:
        204:
          description: A node has been acquired.
    delete:
      description: Release all the acquired nodes to the pool.
      responses:
        204:
          description: All acquired nodes have been released.

/config:
  is: [ erroring ]
  description: Configure RPooli.
  /r:
    is: [ erroring ]
    description: R/Rj nodes configuration.
    get:
      description: Retrieve the current configuration.
      responses:
        200:
          body:
            schema: conf-r.json
    put:
      description: Configure the parameters to start R.
      queryParameters:
        save:
          description: If true, the configuration will be applied and saved, otherwise it will only be applied.
          type: boolean
          required: false
          default: false
      body:
        schema: conf-r.json
      responses:
        204:
          description: The configuration has been accepted.
    /default:
      is: [ erroring ]
      description: The default configuration.
      get:
        description: Get the default configuration.
        responses:
          200:
            body:
              schema: conf-r.json


Fix API formatting

Fix API formatting

- Make all endpoints plural
- Nest child endpoints into their parents
- Unify get/put/post/delete description
- Use <item>ID instead of <item>Id

#%RAML 0.8
# vim: set ft=yaml:
baseUri: http://server/broker/rest
title: OpenShift 3
version: v1beta1
mediaType: application/json
documentation:
 - title: Overview
   content: !include doc/overview.md

/projects:
  displayName: /projects (NOT IMPLEMENTED)
  get:
    description: |
      List all projects for your account.

      Projects are a similar concept to v2 domains. A project is a grouping of services
      with shared access control and resource limits. Applications can be assembled
      from services in a project by linking them together via service endpoints.
    responses:
      200:
        body:
          example: !include examples/project-list.json
  post:
    description: Create a new project.
    body:
      example: !include examples/project.json

  /{projectID}:
    get:
      description: Get a specific project.
      responses:
        200:
          body:
            example: !include examples/project.json
    put:
      description: Update a project.
      body:
        example: !include examples/project-put.json
    delete:
      description: Delete a project.
      responses:
        200:
          body:
            example: !include examples/status-success.json
    post:
      description: Instantiate a template in the given project.
      body:
        example: !include examples/project-post.json

/imageRepositories:
  get:
    description: |
      List all image repositories.

      An image repository is a collection of images that share the same metadata. It may
      reference a Docker image repository on a Docker registry, but this is optional. An
      image repository also contains a mapping of tags to images.
    responses:
      200:
        body:
          example: !include examples/image-repositories.json
  post:
    description: Create a new image repository.
    body:
      example: !include examples/create-image-repository.json

  /{repositoryID}:
      get:
        description: Get information about a specific image repository.
        body:
          example: !include examples/image-repository.json
      put:
        description: Update an image repository.
        body:
          example: !include examples/image-repository.json
      delete:
        description: Delete an image repository.
        responses:
          200:
            body:
              example: !include examples/status-success.json

/images:
  get:
    description: |
      List all images.

      An image is a reference to an image in a Docker image repository on a Docker
      registry, plus a set of metadata. The metadata that Openshift stores for an image
      will augment the metadata that has already been specified in the image through
      its Dockerfile.
    responses:
      200:
        body:
          example: !include examples/images.json
  post:
    description: Create a new image definition.
    body:
      example: !include examples/create-image.json

  /{imageID}:
      get:
        description: Get a specific image definition.
        body:
          example: !include examples/image.json
      delete:
        description: Delete a specific image.
        responses:
          200:
            body:
              example: !include examples/status-success.json

/imageRepositoryMappings:
  post:
    description: |
      Create an image and update an image repository.

      This is designed as a webhook that a Docker registry can invoke when a
      new tag is created. The image repository mapping contains a reference
      to the repository, the image's metadata, and the name of the new tag.
      Upon execution, a new image is created if it doesn't already exist, and
      the image repository is updated with the new tag.
    body:
      example: !include examples/create-image-repository-mapping.json

/deployments:
  displayName: /deployments (NOT IMPLEMENTED)
  get:
    description: |
      List active deployments in the current project.

      Deployments effect change in a service such as scaling up, down, updating the
      current image, etc. Deployments may use different policies for carrying out
      the change. For example, a rolling update with a single pod change at a time, or
      a batch update, etc. Deployments make use of Kubernetes replicationControllers
      to bring about the changes.
    responses:
      200:
        body:
          example: !include examples/deployments.json
  post:
    description: Create a new deployment.
    body:
      example: !include examples/create-deployment.json

  /{deploymentID}:
    get:
      description: Get details about a specific deployment.
      body:
        example: !include examples/deployment.json

/links:
  displayName: /links (NOT IMPLEMENTED)
  get:
    description: |
      List of links between services in your account.

      Unlike a Docker link, a Link in OpenShift defines a relationship between services
      which may be composed by multiple Docker images. A link may include additional metadata
      about the relationship such as the algorithm to use to distribute requests.
    queryParameters:
      projectID:
        description: filter the links owned by a particular project.
      serviceID:
        description: filter the links attached to a particular service.
    responses:
      200:
        body:
          example: !include examples/links.json
  post:
    description: Create a new link between two services.
    body:
      example: !include examples/link.json

  /{linkID}:
    get:
      description: Get details about a specific link.
      body:
        example: !include examples/link.json
    put:
      description: Update a specific link.
      body:
        example: !include examples/link.json
    delete:
      description: Delete a specific link.
      responses:
        200:
          body:
            example: !include examples/status-success.json

/aliases:
  displayName: /aliases (NOT IMPLEMENTED)
  get:
    description: |
      List all aliases visible to you.

      Aliases in v3 perform the same function as aliases in v2. The main difference
      is that in v3 an alias is associated with a service, not an application.
    queryParameters:
      serviceID:
        description: filter aliases by associated service.
    responses:
      200:
        body:
          example: !include examples/aliases.json
  post:
    description: Create an alias for this service.
    body:
      example: !include examples/alias.json

  /{aliasID}:
    get:
      description: Get a specific alias.
      body:
        example: !include examples/alias.json
    put:
      description: Update a specific alias.
      body:
        example: !include examples/alias.json
    delete:
      description: Delete a specific alias.
      responses:
        200:
          body:
            example: !include examples/status-success.json

/builds:
  get:
    description: |
      List all builds.

      Build encapsulates the inputs needed to produce a new deployable image, as well as
      the status of the operation and a reference to the Pod which runs the build.
    responses:
      200:
        body:
          example: !include examples/builds.json
  post:
    description: Create a new build.
    body:
      example: !include examples/create_build.json

  /{buildID}:
    get:
      description: Get details about a specific build.
      responses:
        200:
          body:
            example: !include examples/build.json
    put:
      description: Update a specific build.
      body:
        example: !include examples/build.json
    delete:
      description: Delete a specific build.
      responses:
        200:
          body:
            example: !include examples/status-success.json

/buildConfigs:
  get:
    description: |
      List all BuildConfigs.

      BuildConfig contains the inputs needed to produce a new deployable image.
    responses:
      200:
        body:
          example: !include examples/buildConfigs.json
  post:
    description: Create a new build.
    body:
      example: !include examples/create_buildConfig.json

  /{configID}:
    get:
      description: Get a specific build configuration.
      responses:
        200:
          body:
            example: !include examples/buildConfig.json
    put:
      description: Update a specific build configuration.
      body:
        example: !include examples/buildConfig.json
    delete:
      description: Delete a specific build configuration.
      responses:
        200:
          body:
            example: !include examples/status-success.json

/buildConfigHooks/{buildID}/{secret}/{plugin}:
  post:
    description: |
      Webhook on push event from external repository.

      buildID specifies which build to trigger, whereas plugin defines source of
      the request, this might be github, bitbucket or others.
    responses:
      204:
        description: No content

/templates:
  displayName: /templates (NOT IMPLEMENTED)
  get:
    description: |
      List all templates that your account has access to.

      A template represents generic config with parameters.

      Parameters:

        Example #1 - static paramater:

          {

            "name": "DB_NAME",

            "description": "PostgreSQL database name",

            "type": "string",

            "value": "mydb"

          }

        The above parameter can be referenced in the rest of the template
        as ${DB_NAME} expression, which is to be substituted by its value
        (the "mydb" string) during the transformation.

        Example #2 - parameter with generator:

          {

            "name": "DB_PASSWORD",

            "description": "PostgreSQL admin user password",

            "type": "string",

            "expression": "[a-zA-Z0-9]{8}"

          }

        The above parameter can be referenced in the rest of the template
        as ${DB_PASSWORD} expression, which is to be substituted by its
        newly generated value during the transformation.

      Generators:

        Generators generate random values based on the input. OpenShift 3
        currently support expression value generator only.

        Expression value generator generates random string based on the
        input expression. The input expression is a string, which may contain
        "[a-zA-Z0-9]{length}" expression constructs, defining range and length
        of the result random characters.

        Examples ("expression" => "value"):

          "test[0-9]{1}x" => "test7x"

          "[0-1]{8}" => "01001100"

          "0x[A-F0-9]{4}" => "0xB3AF"

          "[a-zA-Z0-9]{8}" => "hW4yQU5i"

  post:
    description: Create a new template.
    body:
      schema: !include doc/template-schema.json
      example: !include examples/template.json
    responses:
      200:
        body:
          example: !include examples/status-success.json

  /{templateID}:
    displayName: /template/{templateID}
    get:
      description: Get a specific template.
      responses:
        200:
          body:
           example: !include examples/template.json
    put:
      description: Update a specific template.
      responses:
        200:
          body:
            example: !include examples/status-success.json
    delete:
      description: Delete a specific template.
      responses:
        200:
          body:
            example: !include examples/status-success.json

/templateConfigs:
  post:
    description: |
      Process a template into a config.
      See /templates endpoint for details on template transformation,
      parameters and generators.
    body:
      schema: !include doc/template-schema.json
      example: !include examples/template.json
    responses:
      200:
        body:
          example: !include examples/config.json

/configs:
  displayName: /configs (NOT IMPLEMENTED)
  get:
    description: |
      List all configs that your account has access to.

      A config defines 0..n Kubernetes resources.
    responses:
      200:
  post:
    description: Create a new config.
    body:
      schema: !include doc/config-schema.json
      example: !include examples/config.json
    responses:
      200:
        body:
          example: !include examples/status-success.json

  /{configID}:
    get:
      description: Get a specific config.
      responses:
        200:
          body:
            example: !include examples/config.json
    put:
      description: Update a specific config.
      responses:
        200:
          body:
            example: !include examples/status-success.json
    delete:
      description: Delete a specific config.
      responses:
        200:
          body:
            example: !include examples/status-success.json

/pods:
  get:
    description: List all pods on this cluster.
    responses:
      200:
        body:
          example: !include examples/pod-list.json
  post:
    description: Create a new pod. currentState is ignored if present.
    body:
      schema: !include doc/pod-schema.json
      example: !include examples/pod.json

  /{podID}:
    get:
      description: Get a specific pod.
      responses:
        200:
          body:
            example: !include examples/pod.json
    put:
      description: Update a specific pod.
      body:
        schema: !include doc/pod-schema.json
        example: !include examples/pod.json
    delete:
      description: Delete a specific pod.
      responses:
        200:
          body:
            example: !include examples/status-success.json

/replicationControllers:
  get:
    description: List all replicationControllers on this cluster.
    responses:
      200:
        body:
          example: !include examples/controller-list.json
  post:
    description: Create a new controller. currentState is ignored if present.
    body:
      schema: !include doc/controller-schema.json
      example: !include examples/controller.json

  /{controllerID}:
    get:
      description: Get a specific controller.
      responses:
        200:
          body:
            example: !include examples/controller.json
    put:
      description: Update a specific controller.
      body:
        schema: !include doc/controller-schema.json
        example: !include examples/controller.json
    delete:
      description: Delete a specific controller.
      responses:
        200:
          body:
            example: !include examples/status-success.json

/services:
  get:
    description: List all services on this cluster.
    responses:
      200:
        body:
          example: !include examples/service-list.json
  post:
    description: Create a new service.
    body:
      schema: !include doc/service-schema.json
      example: !include examples/service.json

  /{serviceID}:
    get:
      description: Get a specific service.
      responses:
        200:
          body:
            example: !include examples/service.json
    put:
      description: Update a specific service.
      body:
        schema: !include doc/service-schema.json
        example: !include examples/service.json
    delete:
      description: Delete a specific service.
      responses:
        200:
          body:
            example: !include examples/status-success.json

#%RAML 0.8
# vim: set ft=yaml:
baseUri: http://server/broker/rest
title: OpenShift 3
version: v1beta1
mediaType: application/json
documentation:
 - title: Overview
   content: !include doc/overview.md

/projects:
  displayName: /projects (NOT IMPLEMENTED)
  get:
    description: |
      List all projects for your account.

      Projects are a similar concept to v2 domains. A project is a grouping of services
      with shared access control and resource limits. Applications can be assembled
      from services in a project by linking them together via service endpoints.
    responses:
      200:
        body:
          example: !include examples/project-list.json
  post:
    description: Create a new project
    body:
      example: !include examples/project.json

/project/{projectID}:
  displayName: /project/{projectID} (NOT IMPLEMENTED)
  get:
    description: Get a specific project
    responses:
      200:
        body:
          example: !include examples/project.json
  put:
    description: Update a project
    body:
      example: !include examples/project-put.json
  delete:
    description: Delete a project
    responses:
      200:
        body:
          example: !include examples/status-success.json
  post:
    description: Instantiate a template in the given project
    body:
      example: !include examples/project-post.json

/imageRepositories:
  get:
    description: |
      Lists all image repositories.

      An image repository is a collection of images that share the same metadata. It may
      reference a Docker image repository on a Docker registry, but this is optional. An
      image repository also contains a mapping of tags to images.
    responses:
      200:
        body:
          example: !include examples/image-repositories.json
  post:
    description: Create a new image repository
    body:
      example: !include examples/create-image-repository.json

/imageRepositories/{repositoryID}:
    get:
      description: Get information about an image repository
      body:
        example: !include examples/image-repository.json
    put:
      description: Update an image repository
      body:
        example: !include examples/image-repository.json
    delete:
      description: Delete an image repository
      responses:
        200:
          body:
            example: !include examples/status-success.json
/images:
  get:
    description: |
      Lists all images.

      An image is a reference to an image in a Docker image repository on a Docker
      registry, plus a set of metadata. The metadata that Openshift stores for an image
      will augment the metadata that has already been specified in the image through
      its Dockerfile.
    responses:
      200:
        body:
          example: !include examples/images.json
  post:
    description: Create a new image definition
    body:
      example: !include examples/create-image.json

/images/{imageID}:
    get:
      description: Get image definition
      body:
        example: !include examples/image.json
    delete:
      description: Delete an image
      responses:
        200:
          body:
            example: !include examples/status-success.json

/imageRepositoryMappings:
  post:
    description: |
      Creates an image and updates an image repository.

      This is designed as a webhook that a Docker registry can invoke when a
      new tag is created. The image repository mapping contains a reference
      to the repository, the image's metadata, and the name of the new tag.
      Upon execution, a new image is created if it doesn't already exist, and
      the image repository is updated with the new tag.
    body:
      example: !include examples/create-image-repository-mapping.json

/deployments:
  displayName: /deployments (NOT IMPLEMENTED)
  get:
    description: |
      Lists active deployments in the current project

      Deployments effect change in a service such as scaling up, down, updating the
      current image, etc. Deployments may use different policies for carrying out
      the change. For example, a rolling update with a single pod change at a time, or
      a batch update, etc. Deployments make use of Kubernetes replicationControllers
      to bring about the changes.
    responses:
      200:
        body:
          example: !include examples/deployments.json
  post:
    description: Create a new deployment
    body:
      example: !include examples/create-deployment.json
/deployment/{deploymentID}:
  displayName: /deployment/{deploymentID} (NOT IMPLEMENTED)
  get:
    description: Get deployment details
    body:
      example: !include examples/deployment.json

/links:
  displayName: /links (NOT IMPLEMENTED)
  get:
    description: |
      List of links between services in your account

      Unlike a Docker link, a Link in OpenShift defines a relationship between services
      which may be composed by multiple Docker images. A link may include additional metadata
      about the relationship such as the algorithm to use to distribute requests.
    queryParameters:
      projectId:
        description: filter the links owned by a particular project
      serviceId:
        description: filter the links attached to a particular service
    responses:
      200:
        body:
          example: !include examples/links.json
  post:
    description: Create a new link between this service and a different service
    body:
      example: !include examples/link.json
/link/{linkID}:
  displayName: /link/{linkID} (NOT IMPLEMENTED)
  get:
    description: Get link details
    body:
      example: !include examples/link.json
  put:
    description: Update a link
    body:
      example: !include examples/link.json
  delete:
    description: Delete a link
    responses:
      200:
        body:
          example: !include examples/status-success.json

/aliases:
  displayName: /aliases (NOT IMPLEMENTED)
  get:
    description: |
      List all aliases visible to you

      Aliases in v3 perform the same function as aliases in v2. The main difference
      is that in v3 an alias is associated with a service, not an application.
    queryParameters:
      serviceId:
        description: filter aliases by associated service
    responses:
      200:
        body:
          example: !include examples/aliases.json
  post:
    description: Create an alias for this service
    body:
      example: !include examples/alias.json
/alias/{aliasID}:
  displayName: /alias/{aliasID} (NOT IMPLEMENTED)
  get:
    description: Get alias
    body:
      example: !include examples/alias.json
  put:
    description: Update an alias
    body:
      example: !include examples/alias.json
  delete:
    description: Delete an alias
    responses:
      200:
        body:
          example: !include examples/status-success.json

/builds:
  get:
    description: |
      Retrieves a list of builds

      Build encapsulates the inputs needed to produce a new deployable image, as well as
      the status of the operation and a reference to the Pod which runs the build.
    responses:
      200:
        body:
          example: !include examples/builds.json
  post:
    description: Create a new build
    body:
      example: !include examples/create_build.json
/builds/{buildId}:
  get:
    description: Retrieve a single build definition
    responses:
      200:
        body:
          example: !include examples/build.json
  put:
    description: Update a build definition
    body:
      example: !include examples/build.json
  delete:
    description: Delete a build definition
    responses:
      200:
        body:
          example: !include examples/status-success.json
/buildConfigs:
  get:
    description: |
      Retrieves a list of BuildConfigs

      BuildConfig contains the inputs needed to produce a new deployable image
    responses:
      200:
        body:
          example: !include examples/buildConfigs.json
  post:
    description: Create a new build
    body:
      example: !include examples/create_buildConfig.json

/buildConfigs/{configId}:
  get:
    description: Retrieve a build configuration
    responses:
      200:
        body:
          example: !include examples/buildConfig.json
  put:
    description: Update a build configuration
    body:
      example: !include examples/buildConfig.json
  delete:
    description: Delete a build configuration
    responses:
      200:
        body:
          example: !include examples/status-success.json
/buildConfigHooks/{buildId}/{secret}/{plugin}:
  post:
    description: |
      Webhook on push event from external repository

      buildId specifies which build to trigger, whereas plugin defines source of
      the request, this might be github, bitbucket or others.
    responses:
      204:
        description: No content

/templates:
  displayName: /templates (NOT IMPLEMENTED)
  get:
    description: |
      Lists all templates that your account has access to.

      A template represents generic config with parameters.

      Parameters:

        Example #1 - static paramater:

          {

            "name": "DB_NAME",

            "description": "PostgreSQL database name",

            "type": "string",

            "value": "mydb"

          }

        The above parameter can be referenced in the rest of the template
        as ${DB_NAME} expression, which is to be substituted by its value
        (the "mydb" string) during the transformation.

        Example #2 - parameter with generator:

          {

            "name": "DB_PASSWORD",

            "description": "PostgreSQL admin user password",

            "type": "string",

            "expression": "[a-zA-Z0-9]{8}"

          }

        The above parameter can be referenced in the rest of the template
        as ${DB_PASSWORD} expression, which is to be substituted by its
        newly generated value during the transformation.

      Generators:

        Generators generate random values based on the input. OpenShift 3
        currently support expression value generator only.

        Expression value generator generates random string based on the
        input expression. The input expression is a string, which may contain
        "[a-zA-Z0-9]{length}" expression constructs, defining range and length
        of the result random characters.

        Examples ("expression" => "value"):

          "test[0-9]{1}x" => "test7x"

          "[0-1]{8}" => "01001100"

          "0x[A-F0-9]{4}" => "0xB3AF"

          "[a-zA-Z0-9]{8}" => "hW4yQU5i"

  post:
    description: Create a new template
    body:
      schema: !include doc/template-schema.json
      example: !include examples/template.json
    responses:
      200:
        body:
          example: !include examples/status-success.json
/template/{templateID}:
  displayName: /template/{templateID} (NOT IMPLEMENTED)
  get:
    description: Get a specific template
    responses:
      200:
        body:
         example: !include examples/template.json
  put:
    description: Update a template
    responses:
      200:
        body:
          example: !include examples/status-success.json
  delete:
    description: Delete a template
    responses:
      200:
        body:
          example: !include examples/status-success.json

/templateConfigs:
  post:
    description: Process a template into a config. See /templates endpoint for details on template transformation, parameters and generators.
    body:
      schema: !include doc/template-schema.json
      example: !include examples/template.json
    responses:
      200:
        body:
          example: !include examples/config.json

/configs:
  displayName: /configs (NOT IMPLEMENTED)
  get:
    description: |
      Lists all configs that your account has access to

      A config defines 0..n Kubernetes resources.
    responses:
      200:
  post:
    description: Create a new config
    body:
      schema: !include doc/config-schema.json
      example: !include examples/config.json
    responses:
      200:
        body:
          example: !include examples/status-success.json

/config/{configID}:
  displayName: /config/{configID} (NOT IMPLEMENTED)
  get:
    description: Get a specific config
    responses:
      200:
        body:
          example: !include examples/config.json
  put:
    description: Update a config
    responses:
      200:
        body:
          example: !include examples/status-success.json
  delete:
    description: Delete a config
    responses:
      200:
        body:
          example: !include examples/status-success.json

/pods:
  get:
    description: List all pods on this cluster
    responses:
      200:
        body:
          example: !include examples/pod-list.json
  post:
    description: Create a new pod. currentState is ignored if present.
    body:
      schema: !include doc/pod-schema.json
      example: !include examples/pod.json

  /{podId}:
    get:
      description: Get a specific pod
      responses:
        200:
          body:
            example: !include examples/pod.json
    put:
      description: Update a pod
      body:
        schema: !include doc/pod-schema.json
        example: !include examples/pod.json
    delete:
      description: Delete a specific pod
      responses:
        200:
          body:
            example: !include examples/status-success.json

/replicationControllers:
  get:
    description: List all replicationControllers on this cluster
    responses:
      200:
        body:
          example: !include examples/controller-list.json
  post:
    description: Create a new controller. currentState is ignored if present.
    body:
      schema: !include doc/controller-schema.json
      example: !include examples/controller.json

  /{controllerId}:
    get:
      description: Get a specific controller
      responses:
        200:
          body:
            example: !include examples/controller.json
    put:
      description: Update a controller
      body:
        schema: !include doc/controller-schema.json
        example: !include examples/controller.json
    delete:
      description: Delete a specific controller
      responses:
        200:
          body:
            example: !include examples/status-success.json

/services:
  get:
    description: List all services on this cluster
    responses:
      200:
        body:
          example: !include examples/service-list.json
  post:
    description: Create a new service
    body:
      schema: !include doc/service-schema.json
      example: !include examples/service.json

  /{serviceId}:
    get:
      description: Get a specific service
      responses:
        200:
          body:
            example: !include examples/service.json
    put:
      description: Update a service
      body:
        schema: !include doc/service-schema.json
        example: !include examples/service.json
    delete:
      description: Delete a specific service
      responses:
        200:
          body:
            example: !include examples/status-success.json