{
  "swagger": "2.0",
  "info": {
    "description": "Deployment Orchestration API",
    "title": "Deployment API",
    "version": "1.0"
  },
  "paths": {
    "/deployments": {
      "get": {
        "description": "list deployments",
        "produces": ["application/json"],
        "tags": ["DeploymentController"],
        "operationId": "DeploymentControllerListDeployments",
        "parameters": [
          {
            "type": "integer",
            "name": "page",
            "in": "query"
          },
          {
            "type": "integer",
            "name": "per_page",
            "in": "query"
          },
          {
            "type": "string",
            "name": "scenario",
            "in": "query",
            "enum": ["aws_premium_region", "aws_byoc_region"]
          },
          {
            "type": "string",
            "name": "phase",
            "in": "query",
            "enum": [
              "created",
              "preview_pending",
              "preview_running",
              "preview_succeeded",
              "preview_failed",
              "approving",
              "apply_pending",
              "apply_running",
              "apply_succeeded",
              "apply_failed",
              "canceled"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/ListDeploymentResp"
            }
          }
        }
      },
      "post": {
        "description": "create a new deployment",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "tags": ["DeploymentController"],
        "operationId": "DeploymentControllerCreateDeployment",
        "parameters": [
          {
            "name": "req",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/CreateDeploymentReq"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/CreateDeploymentResp"
            }
          }
        }
      }
    },
    "/deployments/{deployment_id}": {
      "get": {
        "description": "get a deployment",
        "produces": ["application/json"],
        "tags": ["DeploymentController"],
        "operationId": "DeploymentControllerGetDeployment",
        "parameters": [
          {
            "type": "integer",
            "name": "deployment_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/GetDeploymentResp"
            }
          }
        }
      }
    },
    "/deployments/{deployment_id}/preview": {
      "post": {
        "description": "start preview workflow for a deployment",
        "produces": ["application/json"],
        "tags": ["DeploymentController"],
        "operationId": "DeploymentControllerStartPreview",
        "parameters": [
          {
            "type": "integer",
            "name": "deployment_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/BaseResp"
            }
          }
        }
      }
    },
    "/deployments/{deployment_id}/apply": {
      "post": {
        "description": "start apply workflow for a deployment (after approval)",
        "produces": ["application/json"],
        "tags": ["DeploymentController"],
        "operationId": "DeploymentControllerStartApply",
        "parameters": [
          {
            "type": "integer",
            "name": "deployment_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/BaseResp"
            }
          }
        }
      }
    },
    "/deployments/{deployment_id}/retry": {
      "post": {
        "description": "retry a failed apply using the same frozen snapshot",
        "produces": ["application/json"],
        "tags": ["DeploymentController"],
        "operationId": "DeploymentControllerRetryApply",
        "parameters": [
          {
            "type": "integer",
            "name": "deployment_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/BaseResp"
            }
          }
        }
      }
    },
    "/deployments/{deployment_id}/cancel": {
      "post": {
        "description": "cancel a deployment",
        "produces": ["application/json"],
        "tags": ["DeploymentController"],
        "operationId": "DeploymentControllerCancel",
        "parameters": [
          {
            "type": "integer",
            "name": "deployment_id",
            "in": "path",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/BaseResp"
            }
          }
        }
      }
    }
  },
  "definitions": {
    "BaseResp": {
      "type": "object",
      "properties": {
        "errcode": {
          "type": "string"
        },
        "errmsg": {
          "type": "string"
        },
        "trace_id": {
          "type": "string"
        }
      }
    },
    "CreateDeploymentReq": {
      "type": "object",
      "required": ["scenario", "params"],
      "properties": {
        "scenario": {
          "type": "string",
          "enum": ["aws_premium_region", "aws_byoc_region"]
        },
        "params": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      }
    },
    "CreateDeploymentResp": {
      "type": "object",
      "properties": {
        "errcode": {
          "type": "string"
        },
        "errmsg": {
          "type": "string"
        },
        "trace_id": {
          "type": "string"
        },
        "id": {
          "type": "integer"
        }
      }
    },
    "Deployment": {
      "type": "object",
      "properties": {
        "id": {
          "type": "integer"
        },
        "scenario": {
          "type": "string",
          "enum": ["aws_premium_region", "aws_byoc_region"]
        },
        "phase": {
          "type": "string",
          "enum": [
            "created",
            "preview_pending",
            "preview_running",
            "preview_succeeded",
            "preview_failed",
            "approving",
            "apply_pending",
            "apply_running",
            "apply_succeeded",
            "apply_failed",
            "canceled"
          ]
        },
        "applicant": {
          "type": "string"
        },
        "params": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "frozen_snapshot": {
          "$ref": "#/definitions/FrozenSnapshot"
        },
        "preview_meta": {
          "$ref": "#/definitions/WorkflowRunMeta"
        },
        "apply_meta": {
          "$ref": "#/definitions/WorkflowRunMeta"
        },
        "approval_id": {
          "type": "integer"
        },
        "created_at": {
          "type": "integer"
        },
        "closed_at": {
          "type": "integer"
        }
      }
    },
    "FrozenSnapshot": {
      "type": "object",
      "properties": {
        "params": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "workflow_name": {
          "type": "string"
        },
        "workflow_inputs": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "frozen_at": {
          "type": "integer"
        }
      }
    },
    "WorkflowRunMeta": {
      "type": "object",
      "properties": {
        "workflow_name": {
          "type": "string"
        },
        "run_id": {
          "type": "integer"
        },
        "run_url": {
          "type": "string"
        },
        "status": {
          "type": "string"
        },
        "summary": {
          "type": "string"
        },
        "retry_count": {
          "type": "integer"
        }
      }
    },
    "GetDeploymentResp": {
      "type": "object",
      "properties": {
        "errcode": {
          "type": "string"
        },
        "errmsg": {
          "type": "string"
        },
        "trace_id": {
          "type": "string"
        },
        "deployment": {
          "$ref": "#/definitions/Deployment"
        }
      }
    },
    "ListDeploymentResp": {
      "type": "object",
      "properties": {
        "errcode": {
          "type": "string"
        },
        "errmsg": {
          "type": "string"
        },
        "trace_id": {
          "type": "string"
        },
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Deployment"
          }
        },
        "total": {
          "type": "integer"
        }
      }
    }
  }
}
