v2_service_definition_CreateOrUpdateServiceDefinitions_1808735248/
v2_service-definition_CreateOrUpdateServiceDefinitions_1808735248.rs

1// Create or update service definition using schema v2 returns "CREATED" response
2use datadog_api_client::datadog;
3use datadog_api_client::datadogV2::api_service_definition::ServiceDefinitionAPI;
4use datadog_api_client::datadogV2::model::ServiceDefinitionV2;
5use datadog_api_client::datadogV2::model::ServiceDefinitionV2Contact;
6use datadog_api_client::datadogV2::model::ServiceDefinitionV2Doc;
7use datadog_api_client::datadogV2::model::ServiceDefinitionV2Email;
8use datadog_api_client::datadogV2::model::ServiceDefinitionV2EmailType;
9use datadog_api_client::datadogV2::model::ServiceDefinitionV2Integrations;
10use datadog_api_client::datadogV2::model::ServiceDefinitionV2Link;
11use datadog_api_client::datadogV2::model::ServiceDefinitionV2LinkType;
12use datadog_api_client::datadogV2::model::ServiceDefinitionV2Opsgenie;
13use datadog_api_client::datadogV2::model::ServiceDefinitionV2OpsgenieRegion;
14use datadog_api_client::datadogV2::model::ServiceDefinitionV2Repo;
15use datadog_api_client::datadogV2::model::ServiceDefinitionV2Version;
16use datadog_api_client::datadogV2::model::ServiceDefinitionsCreateRequest;
17use serde_json::Value;
18use std::collections::BTreeMap;
19
20#[tokio::main]
21async fn main() {
22    let body = ServiceDefinitionsCreateRequest::ServiceDefinitionV2(Box::new(
23        ServiceDefinitionV2::new(
24            "service-exampleservicedefinition".to_string(),
25            ServiceDefinitionV2Version::V2,
26        )
27        .contacts(vec![ServiceDefinitionV2Contact::ServiceDefinitionV2Email(
28            Box::new(
29                ServiceDefinitionV2Email::new(
30                    "contact@datadoghq.com".to_string(),
31                    ServiceDefinitionV2EmailType::EMAIL,
32                )
33                .name("Team Email".to_string()),
34            ),
35        )])
36        .dd_team("my-team".to_string())
37        .docs(vec![ServiceDefinitionV2Doc::new(
38            "Architecture".to_string(),
39            "https://gdrive/mydoc".to_string(),
40        )
41        .provider("google drive".to_string())])
42        .extensions(BTreeMap::from([(
43            "myorgextension".to_string(),
44            Value::from("extensionvalue"),
45        )]))
46        .integrations(
47            ServiceDefinitionV2Integrations::new()
48                .opsgenie(
49                    ServiceDefinitionV2Opsgenie::new(
50                        "https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000"
51                            .to_string(),
52                    )
53                    .region(ServiceDefinitionV2OpsgenieRegion::US),
54                )
55                .pagerduty("https://my-org.pagerduty.com/service-directory/PMyService".to_string()),
56        )
57        .links(vec![ServiceDefinitionV2Link::new(
58            "Runbook".to_string(),
59            ServiceDefinitionV2LinkType::RUNBOOK,
60            "https://my-runbook".to_string(),
61        )])
62        .repos(vec![ServiceDefinitionV2Repo::new(
63            "Source Code".to_string(),
64            "https://github.com/DataDog/schema".to_string(),
65        )
66        .provider("GitHub".to_string())])
67        .tags(vec!["my:tag".to_string(), "service:tag".to_string()])
68        .team("my-team".to_string()),
69    ));
70    let configuration = datadog::Configuration::new();
71    let api = ServiceDefinitionAPI::with_config(configuration);
72    let resp = api.create_or_update_service_definitions(body).await;
73    if let Ok(value) = resp {
74        println!("{:#?}", value);
75    } else {
76        println!("{:#?}", resp.unwrap_err());
77    }
78}