Trigger a deployment gate evaluation

Note: This endpoint is in preview and may be subject to change. If you have any feedback, contact Datadog support.

POST https://api.ap1.datadoghq.com/api/v2/deployments/gates/evaluationhttps://api.ap2.datadoghq.com/api/v2/deployments/gates/evaluationhttps://api.datadoghq.eu/api/v2/deployments/gates/evaluationhttps://api.ddog-gov.com/api/v2/deployments/gates/evaluationhttps://api.us2.ddog-gov.com/api/v2/deployments/gates/evaluationhttps://api.uk1.datadoghq.com/api/v2/deployments/gates/evaluationhttps://api.datadoghq.com/api/v2/deployments/gates/evaluationhttps://api.us3.datadoghq.com/api/v2/deployments/gates/evaluationhttps://api.us5.datadoghq.com/api/v2/deployments/gates/evaluation

Présentation

Triggers an asynchronous deployment gate evaluation for the given service and environment. Returns an evaluation ID that can be used to poll for the result via the GET /api/v2/deployments/gates/evaluation/{id} endpoint.

When the configuration attribute is provided, rules are evaluated inline from that configuration and no pre-configured gate is required. When configuration is omitted, rules are resolved from the gate pre-configured for the given service and environment through the Datadog UI, API, or Terraform.

This endpoint requires the deployment_gates_evaluate permission.

Requête

Body Data (required)

Expand All

Champ

Type

Description

data [required]

object

Data for a deployment gate evaluation request.

attributes [required]

object

Attributes for a deployment gate evaluation request. When configuration is provided, rules are evaluated inline from that configuration. When omitted, rules are resolved from the preconfigured gate for the given service and environment.

configuration

object

Inline rule definitions for a deployment gate evaluation. When provided, rules are evaluated directly from this configuration instead of using the preconfigured gate rules. At least one rule is required.

dry_run

boolean

Gate-level dry run. When enabled, the rules are evaluated normally but the gate always returns pass. The real result is visible in the Datadog UI.

rules [required]

[ <oneOf>]

The list of rules to evaluate. At least one rule is required.

Option 1

object

A monitor rule to evaluate as part of a deployment gate evaluation.

dry_run

boolean

Rule-level dry run. When enabled, the rule is evaluated normally but always returns pass. The real result is visible in the Datadog UI.

name [required]

string

Human-readable name for this rule.

options

object

Options for a monitor rule.

duration

int64

Evaluation window in seconds. Maximum 7200 (2 hours).

query [required]

string

Monitor search query.

type [required]

enum

The type identifier for a monitor rule. Allowed enum values: monitor

Option 2

object

A faulty deployment detection rule to evaluate as part of a deployment gate evaluation.

dry_run

boolean

Rule-level dry run. When enabled, the rule is evaluated normally but it always returns pass. The real result is visible in the Datadog UI.

name [required]

string

Human-readable name for this rule.

options

object

Options for a faulty_deployment_detection rule.

duration

int64

Evaluation window in seconds. Maximum 7200 (2 hours).

excluded_resources

[string]

APM resource names to exclude from analysis.

type [required]

enum

The type identifier for a faulty deployment detection rule. Allowed enum values: faulty_deployment_detection

env [required]

string

The environment of the deployment.

identifier

string

The identifier of the deployment gate. Defaults to "default".

default: default

primary_tag

string

A primary tag to scope APM Faulty Deployment Detection rules.

service [required]

string

The service being deployed.

version

string

The version of the deployment. Required for APM Faulty Deployment Detection rules.

type [required]

enum

JSON:API type for a deployment gate evaluation request. Allowed enum values: deployment_gates_evaluation_request

default: deployment_gates_evaluation_request

{
  "data": {
    "attributes": {
      "env": "production",
      "identifier": "pre",
      "service": "my-service"
    },
    "type": "deployment_gates_evaluation_request"
  }
}

Réponse

Accepted

Response for a deployment gate evaluation request.

Expand All

Champ

Type

Description

data

object

Data for a deployment gate evaluation response.

attributes [required]

object

Attributes for a deployment gate evaluation response.

evaluation_id [required]

string

The unique identifier of the gate evaluation.

id [required]

uuid

The unique identifier of the evaluation response.

type [required]

enum

JSON:API type for a deployment gate evaluation response. Allowed enum values: deployment_gates_evaluation_response

default: deployment_gates_evaluation_response

{
  "data": {
    "attributes": {
      "evaluation_id": "e9d2f04f-4f4b-494b-86e5-52f03e10c8e9"
    },
    "id": "e9d2f04f-4f4b-494b-86e5-52f03e10c8e9",
    "type": "deployment_gates_evaluation_response"
  }
}

Bad request.

Bad request.

Expand All

Champ

Type

Description

errors

[object]

Structured errors.

detail

string

Error message.

status

string

Error code.

title

string

Error title.

{
  "errors": [
    {
      "detail": "Malformed payload",
      "status": "400",
      "title": "Bad Request"
    }
  ]
}

Unauthorized

API error response.

Expand All

Champ

Type

Description

errors [required]

[string]

A list of errors.

{
  "errors": [
    "Bad Request"
  ]
}

Forbidden

API error response.

Expand All

Champ

Type

Description

errors [required]

[string]

A list of errors.

{
  "errors": [
    "Bad Request"
  ]
}

Deployment gate not found.

Deployment gate not found.

Expand All

Champ

Type

Description

errors

[object]

Structured errors.

detail

string

Error message.

status

string

Error code.

title

string

Error title.

{
  "errors": [
    {
      "detail": "Malformed payload",
      "status": "400",
      "title": "Bad Request"
    }
  ]
}

Too many requests

API error response.

Expand All

Champ

Type

Description

errors [required]

[string]

A list of errors.

{
  "errors": [
    "Bad Request"
  ]
}

Internal Server Error

Errors occurred.

Expand All

Champ

Type

Description

errors

[object]

Structured errors.

detail

string

Error message.

status

string

Error code.

title

string

Error title.

{
  "errors": [
    {
      "detail": "Malformed payload",
      "status": "400",
      "title": "Bad Request"
    }
  ]
}

Exemple de code

                          ## Evaluate a preconfigured gate
# 

# Curl command
curl -X POST "https://api.ap1.datadoghq.com"https://api.ap2.datadoghq.com"https://api.datadoghq.eu"https://api.ddog-gov.com"https://api.us2.ddog-gov.com"https://api.uk1.datadoghq.com"https://api.datadoghq.com"https://api.us3.datadoghq.com"https://api.us5.datadoghq.com/api/v2/deployments/gates/evaluation" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "DD-API-KEY: ${DD_API_KEY}" \ -H "DD-APPLICATION-KEY: ${DD_APP_KEY}" \ -d @- << EOF { "data": { "attributes": { "env": "staging", "identifier": "pre-deploy", "primary_tag": "region:us-east-1", "service": "transaction-backend", "version": "v1.2.3" }, "type": "deployment_gates_evaluation_request" } } EOF
## Evaluate with inline rule configuration #
# Curl command
curl -X POST "https://api.ap1.datadoghq.com"https://api.ap2.datadoghq.com"https://api.datadoghq.eu"https://api.ddog-gov.com"https://api.us2.ddog-gov.com"https://api.uk1.datadoghq.com"https://api.datadoghq.com"https://api.us3.datadoghq.com"https://api.us5.datadoghq.com/api/v2/deployments/gates/evaluation" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "DD-API-KEY: ${DD_API_KEY}" \ -H "DD-APPLICATION-KEY: ${DD_APP_KEY}" \ -d @- << EOF { "data": { "attributes": { "configuration": { "dry_run": false, "rules": [ { "dry_run": false, "name": "error rate monitors", "options": { "duration": 300, "query": "service:transaction-backend env:production" }, "type": "monitor" }, { "dry_run": false, "name": "apm faulty deployment", "options": { "duration": 900, "excluded_resources": [ "GET /healthcheck" ] }, "type": "faulty_deployment_detection" } ] }, "env": "production", "service": "transaction-backend", "version": "1.2.3" }, "type": "deployment_gates_evaluation_request" } } EOF
// Trigger a deployment gates evaluation returns "Accepted" response

package main

import (
	"context"
	"encoding/json"
	"fmt"
	"os"

	"github.com/DataDog/datadog-api-client-go/v2/api/datadog"
	"github.com/DataDog/datadog-api-client-go/v2/api/datadogV2"
)

func main() {
	// there is a valid "deployment_gate" in the system
	DeploymentGateDataAttributesIdentifier := os.Getenv("DEPLOYMENT_GATE_DATA_ATTRIBUTES_IDENTIFIER")

	body := datadogV2.DeploymentGatesEvaluationRequest{
		Data: datadogV2.DeploymentGatesEvaluationRequestData{
			Attributes: datadogV2.DeploymentGatesEvaluationRequestAttributes{
				Env:        "production",
				Identifier: datadog.PtrString(DeploymentGateDataAttributesIdentifier),
				Service:    "my-service",
			},
			Type: datadogV2.DEPLOYMENTGATESEVALUATIONREQUESTDATATYPE_DEPLOYMENT_GATES_EVALUATION_REQUEST,
		},
	}
	ctx := datadog.NewDefaultContext(context.Background())
	configuration := datadog.NewConfiguration()
	configuration.SetUnstableOperationEnabled("v2.TriggerDeploymentGatesEvaluation", true)
	apiClient := datadog.NewAPIClient(configuration)
	api := datadogV2.NewDeploymentGatesApi(apiClient)
	resp, r, err := api.TriggerDeploymentGatesEvaluation(ctx, body)

	if err != nil {
		fmt.Fprintf(os.Stderr, "Error when calling `DeploymentGatesApi.TriggerDeploymentGatesEvaluation`: %v\n", err)
		fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
	}

	responseContent, _ := json.MarshalIndent(resp, "", "  ")
	fmt.Fprintf(os.Stdout, "Response from `DeploymentGatesApi.TriggerDeploymentGatesEvaluation`:\n%s\n", responseContent)
}

Instructions

First install the library and its dependencies and then save the example to main.go and run following commands:

    
DD_SITE="datadoghq.comus3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comap2.datadoghq.comuk1.datadoghq.comddog-gov.comus2.ddog-gov.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" go run "main.go"
// Trigger a deployment gates evaluation returns "Accepted" response

import com.datadog.api.client.ApiClient;
import com.datadog.api.client.ApiException;
import com.datadog.api.client.v2.api.DeploymentGatesApi;
import com.datadog.api.client.v2.model.DeploymentGatesEvaluationRequest;
import com.datadog.api.client.v2.model.DeploymentGatesEvaluationRequestAttributes;
import com.datadog.api.client.v2.model.DeploymentGatesEvaluationRequestData;
import com.datadog.api.client.v2.model.DeploymentGatesEvaluationRequestDataType;
import com.datadog.api.client.v2.model.DeploymentGatesEvaluationResponse;

public class Example {
  public static void main(String[] args) {
    ApiClient defaultClient = ApiClient.getDefaultApiClient();
    defaultClient.setUnstableOperationEnabled("v2.triggerDeploymentGatesEvaluation", true);
    DeploymentGatesApi apiInstance = new DeploymentGatesApi(defaultClient);

    // there is a valid "deployment_gate" in the system
    String DEPLOYMENT_GATE_DATA_ATTRIBUTES_IDENTIFIER =
        System.getenv("DEPLOYMENT_GATE_DATA_ATTRIBUTES_IDENTIFIER");

    DeploymentGatesEvaluationRequest body =
        new DeploymentGatesEvaluationRequest()
            .data(
                new DeploymentGatesEvaluationRequestData()
                    .attributes(
                        new DeploymentGatesEvaluationRequestAttributes()
                            .env("production")
                            .identifier(DEPLOYMENT_GATE_DATA_ATTRIBUTES_IDENTIFIER)
                            .service("my-service"))
                    .type(
                        DeploymentGatesEvaluationRequestDataType
                            .DEPLOYMENT_GATES_EVALUATION_REQUEST));

    try {
      DeploymentGatesEvaluationResponse result = apiInstance.triggerDeploymentGatesEvaluation(body);
      System.out.println(result);
    } catch (ApiException e) {
      System.err.println(
          "Exception when calling DeploymentGatesApi#triggerDeploymentGatesEvaluation");
      System.err.println("Status code: " + e.getCode());
      System.err.println("Reason: " + e.getResponseBody());
      System.err.println("Response headers: " + e.getResponseHeaders());
      e.printStackTrace();
    }
  }
}

Instructions

First install the library and its dependencies and then save the example to Example.java and run following commands:

    
DD_SITE="datadoghq.comus3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comap2.datadoghq.comuk1.datadoghq.comddog-gov.comus2.ddog-gov.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" java "Example.java"
"""
Trigger a deployment gates evaluation returns "Accepted" response
"""

from os import environ
from datadog_api_client import ApiClient, Configuration
from datadog_api_client.v2.api.deployment_gates_api import DeploymentGatesApi
from datadog_api_client.v2.model.deployment_gates_evaluation_request import DeploymentGatesEvaluationRequest
from datadog_api_client.v2.model.deployment_gates_evaluation_request_attributes import (
    DeploymentGatesEvaluationRequestAttributes,
)
from datadog_api_client.v2.model.deployment_gates_evaluation_request_data import DeploymentGatesEvaluationRequestData
from datadog_api_client.v2.model.deployment_gates_evaluation_request_data_type import (
    DeploymentGatesEvaluationRequestDataType,
)

# there is a valid "deployment_gate" in the system
DEPLOYMENT_GATE_DATA_ATTRIBUTES_IDENTIFIER = environ["DEPLOYMENT_GATE_DATA_ATTRIBUTES_IDENTIFIER"]

body = DeploymentGatesEvaluationRequest(
    data=DeploymentGatesEvaluationRequestData(
        attributes=DeploymentGatesEvaluationRequestAttributes(
            env="production",
            identifier=DEPLOYMENT_GATE_DATA_ATTRIBUTES_IDENTIFIER,
            service="my-service",
        ),
        type=DeploymentGatesEvaluationRequestDataType.DEPLOYMENT_GATES_EVALUATION_REQUEST,
    ),
)

configuration = Configuration()
configuration.unstable_operations["trigger_deployment_gates_evaluation"] = True
with ApiClient(configuration) as api_client:
    api_instance = DeploymentGatesApi(api_client)
    response = api_instance.trigger_deployment_gates_evaluation(body=body)

    print(response)

Instructions

First install the library and its dependencies and then save the example to example.py and run following commands:

    
DD_SITE="datadoghq.comus3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comap2.datadoghq.comuk1.datadoghq.comddog-gov.comus2.ddog-gov.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" python3 "example.py"
# Trigger a deployment gates evaluation returns "Accepted" response

require "datadog_api_client"
DatadogAPIClient.configure do |config|
  config.unstable_operations["v2.trigger_deployment_gates_evaluation".to_sym] = true
end
api_instance = DatadogAPIClient::V2::DeploymentGatesAPI.new

# there is a valid "deployment_gate" in the system
DEPLOYMENT_GATE_DATA_ATTRIBUTES_IDENTIFIER = ENV["DEPLOYMENT_GATE_DATA_ATTRIBUTES_IDENTIFIER"]

body = DatadogAPIClient::V2::DeploymentGatesEvaluationRequest.new({
  data: DatadogAPIClient::V2::DeploymentGatesEvaluationRequestData.new({
    attributes: DatadogAPIClient::V2::DeploymentGatesEvaluationRequestAttributes.new({
      env: "production",
      identifier: DEPLOYMENT_GATE_DATA_ATTRIBUTES_IDENTIFIER,
      service: "my-service",
    }),
    type: DatadogAPIClient::V2::DeploymentGatesEvaluationRequestDataType::DEPLOYMENT_GATES_EVALUATION_REQUEST,
  }),
})
p api_instance.trigger_deployment_gates_evaluation(body)

Instructions

First install the library and its dependencies and then save the example to example.rb and run following commands:

    
DD_SITE="datadoghq.comus3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comap2.datadoghq.comuk1.datadoghq.comddog-gov.comus2.ddog-gov.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" rb "example.rb"
// Trigger a deployment gates evaluation returns "Accepted" response
use datadog_api_client::datadog;
use datadog_api_client::datadogV2::api_deployment_gates::DeploymentGatesAPI;
use datadog_api_client::datadogV2::model::DeploymentGatesEvaluationRequest;
use datadog_api_client::datadogV2::model::DeploymentGatesEvaluationRequestAttributes;
use datadog_api_client::datadogV2::model::DeploymentGatesEvaluationRequestData;
use datadog_api_client::datadogV2::model::DeploymentGatesEvaluationRequestDataType;

#[tokio::main]
async fn main() {
    // there is a valid "deployment_gate" in the system
    let deployment_gate_data_attributes_identifier =
        std::env::var("DEPLOYMENT_GATE_DATA_ATTRIBUTES_IDENTIFIER").unwrap();
    let body = DeploymentGatesEvaluationRequest::new(DeploymentGatesEvaluationRequestData::new(
        DeploymentGatesEvaluationRequestAttributes::new(
            "production".to_string(),
            "my-service".to_string(),
        )
        .identifier(deployment_gate_data_attributes_identifier.clone()),
        DeploymentGatesEvaluationRequestDataType::DEPLOYMENT_GATES_EVALUATION_REQUEST,
    ));
    let mut configuration = datadog::Configuration::new();
    configuration.set_unstable_operation_enabled("v2.TriggerDeploymentGatesEvaluation", true);
    let api = DeploymentGatesAPI::with_config(configuration);
    let resp = api.trigger_deployment_gates_evaluation(body).await;
    if let Ok(value) = resp {
        println!("{:#?}", value);
    } else {
        println!("{:#?}", resp.unwrap_err());
    }
}

Instructions

First install the library and its dependencies and then save the example to src/main.rs and run following commands:

    
DD_SITE="datadoghq.comus3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comap2.datadoghq.comuk1.datadoghq.comddog-gov.comus2.ddog-gov.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" cargo run
/**
 * Trigger a deployment gates evaluation returns "Accepted" response
 */

import { client, v2 } from "@datadog/datadog-api-client";

const configuration = client.createConfiguration();
configuration.unstableOperations["v2.triggerDeploymentGatesEvaluation"] = true;
const apiInstance = new v2.DeploymentGatesApi(configuration);

// there is a valid "deployment_gate" in the system
const DEPLOYMENT_GATE_DATA_ATTRIBUTES_IDENTIFIER = process.env
  .DEPLOYMENT_GATE_DATA_ATTRIBUTES_IDENTIFIER as string;

const params: v2.DeploymentGatesApiTriggerDeploymentGatesEvaluationRequest = {
  body: {
    data: {
      attributes: {
        env: "production",
        identifier: DEPLOYMENT_GATE_DATA_ATTRIBUTES_IDENTIFIER,
        service: "my-service",
      },
      type: "deployment_gates_evaluation_request",
    },
  },
};

apiInstance
  .triggerDeploymentGatesEvaluation(params)
  .then((data: v2.DeploymentGatesEvaluationResponse) => {
    console.log(
      "API called successfully. Returned data: " + JSON.stringify(data)
    );
  })
  .catch((error: any) => console.error(error));

Instructions

First install the library and its dependencies and then save the example to example.ts and run following commands:

    
DD_SITE="datadoghq.comus3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comap2.datadoghq.comuk1.datadoghq.comddog-gov.comus2.ddog-gov.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" tsc "example.ts"