swagger: "2.0"
info:
  description: "The Dynamic Real-time infrastructure planner (DRIP) allows application developers to seamlessly plan a customized virtual infrastructure based on application level constraints on QoS and resource budgets, provisioning the virtual infrastructure, deploy application components onto the virtual infrastructure, and start execution on demand using TOSCA."
  version: "3.0.0"
  title: "DRIP"
  contact:
    email: "z.zhao@uva.nl"
  license:
    name: "Apache 2.0"
    url: "http://www.apache.org/licenses/LICENSE-2.0.html"
basePath: "/drip-api/3.0"
schemes:
- "https"
- "http"
paths:
  /tosca_template:
    post:
      summary: "upload a tosca template description file"
      description: "uploads and validates TOSCA template file"
      operationId: "uploadToscaTemplate"
      consumes:
      - "multipart/form-data"
      parameters:
      - in: "formData"
        name: "file"
        type: file
        description: "tosca Template description"
        required: true
      responses:
        200:
          description: "successful operation"
          schema:
            type: "string"
        405:
          description: "Invalid input"
      security:
      - drip_auth:
        - "write:ToscaTemplate"
        - "read:ToscaTemplate"
  /tosca_template/ids:
    get:
      summary: "Get all topolog template IDs"
      description: "Returns all IDss "
      operationId: "getToscaTemplateIDs"
      produces:
        - "application/json"
      responses:
        200:
          description: "successful operation"
          schema:
            type: array
            items:
              type: string
        400:
          description: "Invalid ID supplied"
        404:
          description: "ToscaTemplate not found"
        405:
          description: "Invalid input"          
      security:
      - drip_auth:
        - "write:ToscaTemplate"
        - "read:ToscaTemplate"        
  /tosca_template/{id}:
    get:
      summary: "Find topolog template by ID"
      description: "Returns a single topolog template"
      operationId: "getToscaTemplateByID"
      produces:
      - "text/plain"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of topolog template to return"
        required: true
        type: "string"
      responses:
        200:
          description: "successful operation"
          schema:
            type: "string"
        400:
          description: "Invalid ID supplied"
        404:
          description: "ToscaTemplate not found"
        405:
          description: "Invalid input"          
      security:
      - drip_auth:
        - "write:ToscaTemplate"
        - "read:ToscaTemplate"
    put:
      summary: "Updates exisintg topolog template"
      description: ""
      operationId: "updateToscaTemplateByID"
      consumes:
      - "multipart/form-data"
      produces:
      - "text/plain"
      parameters:
      - in: "formData"
        name: "file"
        type: file
        description: "tosca Template description"
      - name: "id"
        in: "path"
        description: "ID of topolog template to return"
        required: true
        type: "string"       
      responses:
        200:
          description: "successful operation"
          schema:
            type: "string"
        400:
          description: "Invalid ID supplied"
        404:
          description: "ToscaTemplate not found"
        405:
          description: "Invalid input"          
      security:
      - drip_auth:
        - "write:ToscaTemplate"
        - "read:ToscaTemplate"
    delete:
      summary: "Deletes a tosca topology template"
      description: ""
      operationId: "deleteToscaTemplateByID"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of topology template to return"
        required: true
        type: "string"
      responses:
        200:
          description: "successful operation"
          schema:
            type: "string"
        400:
          description: "Invalid ID supplied"
        404:
          description: "ToscaTemplate not found"
      security:
      - drip_auth:
        - "write:ToscaTemplate"
        - "read:ToscaTemplate"
  /planner/plan/{id}:
    get:
      summary: "plan tosca template"
      description: "Returns the ID of the planed topolog template"
      operationId: "planToscaTemplateByID"
      produces:
      - "text/plain"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of topolog template to plan"
        required: true
        type: "string"
      responses:
        200:
          description: "successful operation"
          schema:
            type: "string"
        400:
          description: "Invalid ID supplied"
        404:
          description: "ToscaTemplate not found"
        405:
          description: "Invalid input"          
      security:
      - drip_auth:
        - "write:ToscaTemplate"
        - "read:ToscaTemplate"    
  /provisioner/provision/{id}:
    get:
      summary: "provision tosca template"
      description: "provosions the operationId: Plan Tosca Template Returns the provision ID"
      operationId: "provisionPlanToscaTemplateByID"
      produces:
      - "text/plain"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of topolog template to plan"
        required: true
        type: "string"
      responses:
        200:
          description: "successful operation"
          schema:
            type: "string"
        400:
          description: "Invalid ID supplied"
        404:
          description: "ToscaTemplate not found"
        405:
          description: "Invalid input"          
      security:
      - drip_auth:
        - "write:ToscaTemplate"
        - "read:ToscaTemplate"     
  /deployer/deploy/{id}:
    get:
      summary: "deploy the software tosca template"
      description: "Returns the deployment ID"
      operationId: "deployProvisionToscaTemplateByID"
      produces:
      - "text/plain"
      parameters:
      - name: "id"
        in: "path"
        description: "ID of topolog template to deploy"
        required: true
        type: "string"
      responses:
        200:
          description: "successful operation"
          schema:
            type: "string"
        400:
          description: "Invalid ID supplied"
        404:
          description: "ToscaTemplate not found"
        405:
          description: "Invalid input"          
      security:
      - drip_auth:
        - "write:ToscaTemplate"
        - "read:ToscaTemplate"    
  /credential:
    post:
      summary: "Create credentials"
      description: "Creates credentials"
      operationId: "createCredentials"
      produces:
      - "application/json"
      consumes:
      - "application/json"
      parameters:
      - in: "body"
        name: "body"
        description: "Created user object"
        required: true
        schema:
          $ref: "https://raw.githubusercontent.com/skoulouzis/DRIP/DRIP_3.0/openAPI/TOSCA/Credentials.yml#/Credentials"
      responses:
        200:
          description: "successful operation"
          schema:
            type: "string"
        400:
          description: "Invalid ID supplied"
        404:
          description: "ToscaTemplate not found"
        405:
          description: "Invalid input"     
      security:
      - drip_auth:
        - "write:Credentials"
        - "read:Credentials"   
  /credential/ids:
    get:
      summary: "Get all credential IDs"
      description: "Returns all IDss "
      operationId: "getCredentialIDs"
      produces:
        - "application/json"
      responses:
        200:
          description: "successful operation"
          schema:
            type: array
            items:
              type: string
        400:
          description: "Invalid ID supplied"
        404:
          description: "ToscaTemplate not found"
        405:
          description: "Invalid input"          
      security:
      - drip_auth:
        - "write:ToscaTemplate"
        - "read:ToscaTemplate"            
  /user:
    post:
      summary: "Create user"
      description: "This can only be done by admin."
      operationId: "createUser"
      produces:
      - "application/json"
      parameters:
      - in: "body"
        name: "body"
        description: "Created user object"
        required: true
        schema:
          $ref: "https://raw.githubusercontent.com/skoulouzis/DRIP/DRIP_3.0/openAPI/User.yml#/User"
      responses:
        200:
          description: "successful operation"
          schema:
            type: "string"
        409:
          description: "already exists"
      security:
      - drip_auth:
        - "admin:User"
  /user/login:
    get:
      tags:
      - "user"
      summary: "Logs user into the system"
      description: ""
      produces:
      - "application/json"
      parameters:
      - name: "username"
        in: "query"
        description: "The user name for login"
        required: true
        type: "string"
      - name: "password"
        in: "query"
        description: "The password for login in clear text"
        required: true
        type: "string"
      responses:
        200:
          description: "successful operation"
          schema:
            type: "string"
          headers:
            X-Rate-Limit:
              type: "integer"
              format: "int32"
              description: "calls per hour allowed by the user"
            X-Expires-After:
              type: "string"
              format: "date-time"
              description: "date in UTC when token expires"
        400:
          description: "Invalid username/password supplied"
  /user/logout:
    get:
      summary: "Logs out current logged in user session"
      description: ""
      produces:
      - "application/json"
      parameters: []
      responses:
        default:
          description: "successful operation"
  /user/{username}:
    get:
      summary: "Get user by user name"
      description: ""
      produces:
      - "application/json"
      parameters:
      - name: "username"
        in: "path"
        description: "The name that needs to be fetched. Use user1 for testing. "
        required: true
        type: "string"
      responses:
        200:
          description: "successful operation"
          schema:
            $ref: "#/definitions/User"
        400:
          description: "Invalid username supplied"
        404:
          description: "User not found"
      security:
      - drip_auth:
        - "admin:User"          
    put:
      tags:
      - "user"
      summary: "Updated user"
      description: "This can only be done by the logged in user."
      produces:
      - "application/json"
      parameters:
      - name: "username"
        in: "path"
        description: "name that need to be updated"
        required: true
        type: "string"
      - in: "body"
        name: "body"
        description: "Updated user object"
        required: true
        schema:
          $ref: "https://raw.githubusercontent.com/skoulouzis/DRIP/DRIP_3.0/openAPI/User.yml#/User"
      responses:
        400:
          description: "Invalid user supplied"
        404:
          description: "User not found"
      security:
      - drip_auth:
        - "admin:User"    
    delete:
      summary: "Delete user"
      description: "This can only be done by the logged in user."
      produces:
      - "application/json"
      parameters:
      - name: "username"
        in: "path"
        description: "The name that needs to be deleted"
        required: true
        type: "string"
      responses:
        400:
          description: "Invalid username supplied"
        404:
          description: "User not found"
      security:
      - drip_auth:
        - "admin:User"      
securityDefinitions:
  drip_auth:
    type: "oauth2"
    authorizationUrl: "http://localhost/oauth/dialog"
    flow: "implicit"
    scopes:
      write:ToscaTemplate: "modify topolog template in your account"
      read:ToscaTemplate: "read your topolog template"
      admin:User: "Grants access to admin operations"
      write:Credentials: "modify cloud credentials in your account"
      read:Credentials: "read your cloud credentials"
externalDocs:
  description: "Find out more about DRIP"
  url: "https://github.com/QCAPI-DRIP/DRIP-integration/wiki"
definitions:
  User:
    $ref: "https://raw.githubusercontent.com/skoulouzis/DRIP/DRIP_3.0/openAPI/User.yml#/User"
  Credentials:
    $ref: "https://raw.githubusercontent.com/skoulouzis/DRIP/DRIP_3.0/openAPI/TOSCA/Credentials.yml#/Credentials"
  NodeTemplate:
    $ref: "https://raw.githubusercontent.com/skoulouzis/DRIP/DRIP_3.0/openAPI/TOSCA/NodeTemplate.yml#/NodeTemplate"
  TopologyTemplate:
    $ref: "https://raw.githubusercontent.com/skoulouzis/DRIP/DRIP_3.0/openAPI/TOSCA/TopologyTemplate.yml#/TopologyTemplate"
  ToscaTemplate:
    $ref: "https://raw.githubusercontent.com/skoulouzis/DRIP/DRIP_3.0/openAPI/TOSCA/ToscaTemplate.yml#/ToscaTemplate"