The Provisioning Coordinator is the module responsible for coordinating all the provisioning tasks of resources within Witboost.
It interacts with Tech Adapters to deploy and undeploy resources to the underlying infrastructure.
The Provisioning Coordinator API is used to validate and execute provisioning plans, as well as to retrieve the status of a provisioning operation. It is also the central point for updating Access Control Lists on the infrastructure, always by interacting with Tech Adapters.
The Provisioning Coordinator is not meant to be called directly by users from their browsers, but instead it is called by the Witboost Control Plane. Therefore, the base URL of the API will depend on the network address given by the Kubernetes network e.g. http://<service k8s endpoint name>.<namespace>:<port>. Below, we are providing an example base URL, yours may differ.
A deployment request descriptor wrapped as a string into a simple object
| descriptor required | string |
{- "descriptor": "string"
}"string"| token required | string token that identifies the request |
{- "status": "RUNNING",
- "validationSummaryStatus": {
- "results": [
- {
- "validationPhaseKind": "INTERNAL_VALIDATION_PHASE",
- "validatedDescriptor": "string",
- "errors": {
- "errors": [
- "string"
], - "code": "string",
- "userMessage": "string",
- "input": "string",
- "inputErrorField": "string",
- "moreInfo": {
- "problems": [
- "string"
], - "solutions": [
- "string"
]
}
}, - "status": "RUNNING"
}
]
}
}| deployment-unit-id required | string Example: my-system:2 |
| environment required | string Example: environment=development |
| include-descriptor required | boolean Default: false Whether the response should include the deployed deployment unit descriptor |
{- "status": "DEPLOYED",
- "provisioningDetails": {
- "descriptorVersion": "2.7.1",
- "descriptor": {
- "id": "my-system:2",
- "name": "my-system",
- "version": "2.7.1",
- "components": [
- {
- "id": "my-component-1",
- "name": "My Component 1",
- "dependsOn": [ ]
}, - {
- "id": "my-component-2",
- "name": "My Component 2",
- "dependsOn": [ ]
}, - {
- "id": "my-component-3",
- "name": "My Component 3",
- "dependsOn": [
- "my-component-1"
]
}
]
}, - "provisioningInfo": {
}, - "componentsStatus": [
- {
- "componentId": "my-component-1",
- "descriptorVersion": "2.7.1",
- "status": "DEPLOYED"
}
]
}
}| deployment-unit-id required | string Example: my-system:2 |
| component-id required | string Example: my-component-1 |
| environment required | string Example: environment=development |
| include-descriptor required | boolean Default: false Whether the response should include the deployment unit descriptor |
{- "status": "DEPLOYED",
- "provisioningDetails": {
- "descriptorVersion": "2.7.1",
- "descriptor": {
- "id": "my-system:2",
- "name": "my-system",
- "version": "2.7.1",
- "components": [
- {
- "id": "my-component-1",
- "name": "My Component 1",
- "dependsOn": [ ]
}, - {
- "id": "my-component-2",
- "name": "My Component 2",
- "dependsOn": [ ]
}, - {
- "id": "my-component-3",
- "name": "My Component 3",
- "dependsOn": [
- "my-component-1"
]
}
]
}
}
}| deployment-unit-id required | string Example: my-system:2 |
| environment required | string Example: environment=development |
| autofill-target-status | boolean Default: false
|
Provisioning request
| descriptor required | object Deployment unit descriptor |
required | Array of objects Desired provisioning status on the different components |
| removeData | boolean Default: false Used to indicate to the tech adapters of components that are going to be undeployed, whether the underlying infrastructural data are to be removed as well. Actions |
| preventRedeploy | boolean Default: false If true, when a component is already deployed and its descriptor has remained unchanged, it will not be marked as to redeploy. Actions |
{- "descriptor": {
- "id": "my-system:2",
- "name": "my-system",
- "version": "2.7.1",
- "components": [
- {
- "id": "my-component-1",
- "name": "My Component 1",
- "dependsOn": [ ]
}, - {
- "id": "my-component-2",
- "name": "My Component 2",
- "dependsOn": [ ]
}, - {
- "id": "my-component-3",
- "name": "My Component 3",
- "dependsOn": [
- "my-component-1"
]
}
]
}, - "targetStatus": [
- {
- "componentId": "my-component-1",
- "targetStatus": "DEPLOYED",
- "action": "DEPLOY"
}
], - "removeData": false,
- "preventRedeploy": false
}{- "outcome": "OK",
- "operations": [
- {
- "componentId": "my-component-1",
- "targetStatus": "DEPLOYED",
- "action": "DEPLOY",
- "reason": "REQUEST",
- "additionalReasons": [
- "REQUEST"
], - "dependencyOf": [
- "my-component-3"
], - "dependantOn": [
- "my-component-4"
]
}
], - "conflictingOperations": [ ]
}| deployment-unit-id required | string Example: my-system:2 |
| environment required | string Example: environment=development |
| unsafe | boolean Default: false If set to false, the request body is required to specify the desired provisioning status for each component in the descriptor. When set to true, any missing target status indications will be automatically inferred by trying to preserve the current provisioning status of the component. |
Provisioning request
| descriptor required | object Deployment unit descriptor |
required | Array of objects Desired provisioning status on the different components |
| removeData | boolean Default: false Used to indicate to the tech adapters of components that are going to be undeployed, whether the underlying infrastructural data are to be removed as well. Actions |
| preventRedeploy | boolean Default: false If true, when a component is already deployed and its descriptor has remained unchanged, it will not be marked as to redeploy. Actions |
{- "descriptor": {
- "id": "my-system:2",
- "name": "my-system",
- "version": "2.7.1",
- "components": [
- {
- "id": "my-component-1",
- "name": "My Component 1",
- "dependsOn": [ ]
}, - {
- "id": "my-component-2",
- "name": "My Component 2",
- "dependsOn": [ ]
}, - {
- "id": "my-component-3",
- "name": "My Component 3",
- "dependsOn": [
- "my-component-1"
]
}
]
}, - "targetStatus": [
- {
- "componentId": "my-component-1",
- "targetStatus": "DEPLOYED",
- "action": "DEPLOY"
}
], - "removeData": false,
- "preventRedeploy": false
}"aa53de04-f563-4bd3-9407-fb963a00d26b"Interrupts any ongoing provisioning operation on the provided deployment unit. If the operation is associated with an active execution plan, the termination request will seamlessly pass to the plan. This last scenario mirrors a direct invocation of the v1/execution-plans/{token}/terminate endpoint.
| deployment-unit-id required | string Example: my-system:2 |
| environment required | string Example: environment=development |
| mode | string Default: "safe" Enum: "safe" "forced" Example: mode=safe
|
{- "errors": [
- "string"
], - "code": "string",
- "userMessage": "string",
- "input": "string",
- "inputErrorField": "string",
- "moreInfo": {
- "problems": [
- "string"
], - "solutions": [
- "string"
]
}
}Returns a list of provisioning operations matching the provided filter criteria, ordered by start time
| environment | string Example: environment=development,production Filter by environment (comma-separated list) |
| status | string Example: status=SUCCEEDED,FAILED Filter by provisioning operation status (comma-separated list).
|
| include-descriptors | boolean Default: false Whether to include deployment unit descriptors in the result |
| sort-order | string Default: "desc" Enum: "asc" "desc" Sort order by start time |
| start-time-after | string <date-time> Example: start-time-after=2022-01-01T00:00:00Z Filter for operations that started after the specified time (exclusive).
Use this as a cursor when |
| start-time-before | string <date-time> Example: start-time-before=2022-01-01T00:00:00Z Filter for operations that started before the specified time (exclusive).
Use this as a cursor when |
| limit | integer Default: 20 Maximum number of results to return |
{- "data": [
- {
- "operation": {
- "operationId": "string",
- "provisioningAction": "DEPLOY",
- "deploymentUnitId": "my-system:2",
- "environment": "development",
- "descriptorVersion": "2.7.1",
- "status": "SCHEDULED",
- "executionPlanId": "a12f3dc4-789b-456c-b2d9-12345678abcd",
- "startTime": "2019-08-24T14:15:22Z",
- "stopTime": "2019-08-24T14:15:22Z"
}, - "descriptor": { },
- "components": [
- {
- "componentId": "my-component-1",
- "provisioningAction": "DEPLOY",
- "operationStatus": "SCHEDULED"
}
]
}
], - "meta": {
- "pagination": {
- "limit": 10,
- "minStartTime": "2019-08-24T14:15:22Z",
- "maxStartTime": "2019-08-24T14:15:22Z"
}
}
}A deployment request descriptor wrapped as a string into a simple object
| descriptor required | string Data Product descriptor in yaml format |
| removeData | boolean Default: false If true, when a component is undeployed, its underlying data will also be deleted |
{- "descriptor": "string",
- "removeData": false
}{- "results": [
- {
- "validationPhaseKind": "INTERNAL_VALIDATION_PHASE",
- "validatedDescriptor": "string",
- "errors": {
- "errors": [
- "string"
], - "code": "string",
- "userMessage": "string",
- "input": "string",
- "inputErrorField": "string",
- "moreInfo": {
- "problems": [
- "string"
], - "solutions": [
- "string"
]
}
}, - "status": "RUNNING"
}
]
}| provisioning_plan_id required | string The id of the plan for which we want to fetch the logs |
| level | string Filter for logs severity level to be displayed |
| task_id | string Filter for the Id of the task that generated the logs to be retrieved |
[- {
- "timestamp": "2019-08-24T14:15:22Z",
- "severity": "DEBUG",
- "task": "string",
- "message": "string",
- "phase": "string"
}
]Deprecation notice: Replaced by
v2/deployment-units/{deployment-unit-id}/provisioning
A data product descriptor wrapped as a string into a simple object
| descriptor required | string Data Product descriptor in yaml format |
| removeData | boolean Default: false If true, when a component is undeployed, its underlying data will also be deleted |
{- "descriptor": "string",
- "removeData": false
}"string"Deprecation notice: Replaced by
v2/deployment-units/{deployment-unit-id}/provisioning
A data product descriptor wrapped as a string into a simple object
| descriptor required | string Data Product descriptor in yaml format |
| removeData | boolean Default: false If true, when a component is undeployed, its underlying data will also be deleted |
{- "descriptor": "string",
- "removeData": false
}"string"| token required | string token that identifies the execution plan |
| mode | string Default: "safe" Enum: "safe" "forced" Example: mode=safe it describe the termination mode |
"string"| data-product-id required | string the id of the data product |
| environments required | string the environments to filter |
| version | string the data product version to filter |
| operations | string the operations to filter |
| include-descriptors | boolean Default: true whether to include the data product descriptor along with other task details |
| include-snapshot | boolean Default: true whether to retrieve also snapshot versions |
| offset | integer offset value |
| limit | integer limit value |
| ordering | string Enum: "asc" "desc" Sort order, default is desc |
{- "provisioningPlans": [
- {
- "environment": "string",
- "dag": {
- "id": "string",
- "displayName": "string",
- "name": "string",
- "componentName": "string",
- "descriptor": "string",
- "version": "string",
- "status": "RUNNING",
- "action": "PROVISION",
- "result": "string",
- "startTime": "2019-08-24T14:15:22Z",
- "stopTime": "2019-08-24T14:15:22Z",
- "dependsOnTasks": [
- { }
], - "subPlanId": "string"
}
}
], - "page": {
- "offset": 0,
- "limit": 0,
- "count": 0
}
}Deprecation notice: Replaced by
v1/execution-plans/{token}/status
| token required | string token that identifies the request |
{- "status": "RUNNING",
- "result": "string",
- "info": {
- "publicInfo": { },
- "privateInfo": { }
}
}| token required | string token that identifies the request |
| include-descriptors | boolean Default: true whether to include the data product descriptor along with other task details |
{- "environment": "string",
- "dag": {
- "id": "string",
- "displayName": "string",
- "name": "string",
- "componentName": "string",
- "descriptor": "string",
- "version": "string",
- "status": "RUNNING",
- "action": "PROVISION",
- "result": "string",
- "startTime": "2019-08-24T14:15:22Z",
- "stopTime": "2019-08-24T14:15:22Z",
- "dependsOnTasks": [
- { }
], - "subPlanId": "string"
}
}An object containing the template metadata
| id required | string |
| name required | string |
| description required | string |
| version required | string |
| infrastructureIdRef | string |
| url | string |
| environment | string |
object (InfraTemplateProperties) |
{- "id": "urn:dmb:itm:snowflake-outputport-provisioner:0",
- "name": "Snowflake Output Port",
- "description": "Provisions a Snowflake Output Port",
- "version": "0",
- "environment": "production"
}"string"| id required | string Unique identifier of the tech adapter |
| version required | string Version of the tech adapter used for display purposes |
| name required | string |
| description | string |
| labels | Array of strings Labels that can be used for filtering |
{- "id": "urn:dmb:itm:snowflake-outputport-provisioner:0",
- "version": "0",
- "name": "Snowflake Output Port Tech Adapter",
- "description": "Provisions a Snowflake Output Port",
- "labels": [
- "technology=snowflake"
]
}{- "id": "urn:dmb:itm:snowflake-outputport-provisioner:0",
- "version": "0",
- "name": "Snowflake Output Port Tech Adapter",
- "description": "Provisions a Snowflake Output Port",
- "labels": [
- "technology=snowflake"
], - "deployments": {
- "environments": [
- {
- "environment": "production",
- "enabled": true
}
]
}
}| search | string Example: search=Snowflake Search keyword for filtering results by tech adapter name. Supports partial and case-insensitive matches. |
| labels | string Example: labels=label1,label2,label3 Filter tech adapters by a list of labels |
| sort-by | string Default: "name" Value: "name" Field name to sort by |
| sort-order | string Default: "asc" Enum: "asc" "desc" Sort order |
| limit | integer Default: 20 Maximum number of items to return |
| offset | integer Default: 0 Number of items to skip |
{- "data": [
- {
- "id": "urn:dmb:itm:snowflake-outputport-provisioner:0",
- "version": "0",
- "name": "Snowflake Output Port Tech Adapter",
- "description": "Provisions a Snowflake Output Port",
- "labels": [
- "technology=snowflake"
], - "deployments": {
- "environments": [
- {
- "environment": "production",
- "enabled": true
}
]
}
}
], - "meta": {
- "pagination": {
- "offset": 0,
- "limit": 10,
- "total": 100
}
}
}| id required | string Example: urn:dmb:itm:snowflake-outputport-provisioner:0 |
{- "id": "urn:dmb:itm:snowflake-outputport-provisioner:0",
- "version": "0",
- "name": "Snowflake Output Port Tech Adapter",
- "description": "Provisions a Snowflake Output Port",
- "labels": [
- "technology=snowflake"
], - "deployments": {
- "environments": [
- {
- "environment": "production",
- "enabled": true
}
]
}
}| id required | string Example: urn:dmb:itm:snowflake-outputport-provisioner:0 |
{- "errors": [
- "string"
], - "code": "string",
- "userMessage": "string",
- "input": "string",
- "inputErrorField": "string",
- "moreInfo": {
- "problems": [
- "string"
], - "solutions": [
- "string"
]
}
}Creates or updates a tech adapter deployment in one of the environments
| id required | string Example: urn:dmb:itm:snowflake-outputport-provisioner:0 |
| environment required | string Example: production |
| url required | string |
| enabled | boolean Default: true |
object (InfraTemplateProperties) |
{- "enabled": true,
- "properties": {
- "dataContractGuardian": {
- "policies": [
- {
- "resourceType": "dataproduct",
- "spec": {
- "id": "9f86d081-8143-4196-8536-41c91f876f7c",
- "name": "Data Contract Guardian Policy",
- "description": "Passive policy for data contract monitoring results"
}
}
]
}
}
}{- "environment": "production",
- "enabled": true,
- "properties": {
- "dataContractGuardian": {
- "policies": [
- {
- "resourceType": "string",
- "id": "string"
}
]
}
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Returns information about a tech adapter deployment in one of the environments
| id required | string Example: urn:dmb:itm:snowflake-outputport-provisioner:0 |
| environment required | string Example: production |
{- "environment": "production",
- "enabled": true,
- "properties": {
- "dataContractGuardian": {
- "policies": [
- {
- "resourceType": "string",
- "id": "string"
}
]
}
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}| id required | string Example: urn:dmb:itm:snowflake-outputport-provisioner:0 |
| environment required | string Example: production |
{- "errors": [
- "string"
], - "code": "string",
- "userMessage": "string",
- "input": "string",
- "inputErrorField": "string",
- "moreInfo": {
- "problems": [
- "string"
], - "solutions": [
- "string"
]
}
}An object containing the access request
| dataProductUrn required | string |
| outputPortId required | integer |
| outputPortUrn required | string |
| requestId required | string |
| identities required | Array of strings |
| environment required | string |
| accessControlFields | object |
{- "dataProductUrn": "string",
- "outputPortId": 0,
- "outputPortUrn": "string",
- "requestId": "string",
- "identities": [
- "string"
], - "environment": "string",
- "accessControlFields": { }
}"string"| environment | string environment name |
| resource-types | string Example: resource-types=type1,type2,type3 Comma-separated list of resource types to filter on |
| id | string deployment unit id |
| offset | integer number of items to skip before retrieving data. |
| limit | integer <= 50 Default: 5 maximum number of items to return |
{- "content": [
- "string"
], - "page": {
- "offset": 0,
- "limit": 0,
- "count": 0
}
}| useCaseTemplateId required | string Component's use case template id |
| infrastructureTemplateIds required | Array of strings non-empty IDs of all the infrastructure templates involved in the component's provisioning |
| environment required | string Environment of the specific provisioners (infrastructure templates) to be involved in the reverse provisioning process |
| params | object Reverse provisioning input params |
| catalogInfo | object Content of the current |
{- "useCaseTemplateId": "urn:dmb:utm:op-standard:0.0.0",
- "infrastructureTemplateIds": [
- "urn:dmb:itm:op-provisioner:0"
], - "environment": "production",
- "params": {
- "inputA": "value A",
- "inputB": 1
}, - "catalogInfo": { }
}"string"| token required | string token that identifies the execution plan |
{- "environment": "string",
- "dag": {
- "id": "string",
- "displayName": "string",
- "name": "string",
- "status": "RUNNING",
- "result": { },
- "startTime": "2019-08-24T14:15:22Z",
- "stopTime": "2019-08-24T14:15:22Z",
- "dependsOnTasks": [ ]
}
}| kind required | string Value: "pre-deployed" the kind related to the descriptor that we want to take. "pre-deployed" for having a descriptor without deploy and build info |
| lastDeploymentTime | string <date-time> the time after which the coordinator must search for descriptors |
| limit required | integer the number of descriptors that the coordinator must return |
{- "descriptors": [
- {
- "descriptor": "string",
- "operation": "Provision"
}
], - "lastDeploymentTime": "2019-08-24T14:15:22Z"
}