Skip to content

Commit bfd0a22

Browse files
api-clients-generation-pipeline[bot]ci.datadog-api-spec
andauthored
Add OpenAPI spec for GET /api/v2/org_group_policy_suggestions (#1837)
Co-authored-by: ci.datadog-api-spec <packages@datadoghq.com>
1 parent 0f793f2 commit bfd0a22

14 files changed

Lines changed: 954 additions & 0 deletions

.generator/schemas/v2/openapi.yaml

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73429,6 +73429,86 @@ components:
7342973429
- MINUS_ID
7343073430
- NAME
7343173431
- MINUS_NAME
73432+
OrgGroupPolicySuggestionAttributes:
73433+
description: Attributes of an org group policy suggestion.
73434+
properties:
73435+
consensus_ratio:
73436+
description: The ratio of member orgs whose configuration agrees on the recommended value.
73437+
example: 0.75
73438+
format: double
73439+
maximum: 1
73440+
minimum: 0
73441+
type: number
73442+
policy_name:
73443+
description: The name of the suggested policy.
73444+
example: "monitor_timezone"
73445+
type: string
73446+
recommended_value:
73447+
description: The recommended value for the policy, based on member org consensus.
73448+
example: "UTC"
73449+
status:
73450+
$ref: "#/components/schemas/OrgGroupPolicySuggestionStatus"
73451+
required:
73452+
- policy_name
73453+
- status
73454+
- consensus_ratio
73455+
- recommended_value
73456+
type: object
73457+
OrgGroupPolicySuggestionData:
73458+
description: An org group policy suggestion resource.
73459+
properties:
73460+
attributes:
73461+
$ref: "#/components/schemas/OrgGroupPolicySuggestionAttributes"
73462+
id:
73463+
description: The ID of the org group policy suggestion.
73464+
example: "1a2b3c4d-5e6f-7890-abcd-ef0123456789"
73465+
type: string
73466+
relationships:
73467+
$ref: "#/components/schemas/OrgGroupPolicySuggestionRelationships"
73468+
type:
73469+
$ref: "#/components/schemas/OrgGroupPolicySuggestionType"
73470+
required:
73471+
- id
73472+
- type
73473+
- attributes
73474+
type: object
73475+
OrgGroupPolicySuggestionListResponse:
73476+
description: Response containing a list of org group policy suggestions.
73477+
properties:
73478+
data:
73479+
description: An array of org group policy suggestions.
73480+
items:
73481+
$ref: "#/components/schemas/OrgGroupPolicySuggestionData"
73482+
type: array
73483+
required:
73484+
- data
73485+
type: object
73486+
OrgGroupPolicySuggestionRelationships:
73487+
description: Relationships of an org group policy suggestion.
73488+
properties:
73489+
org_group:
73490+
$ref: "#/components/schemas/OrgGroupRelationshipToOne"
73491+
type: object
73492+
OrgGroupPolicySuggestionStatus:
73493+
description: The status of the policy suggestion.
73494+
enum:
73495+
- pending
73496+
- accepted
73497+
- dismissed
73498+
example: pending
73499+
type: string
73500+
x-enum-varnames:
73501+
- PENDING
73502+
- ACCEPTED
73503+
- DISMISSED
73504+
OrgGroupPolicySuggestionType:
73505+
description: Org group policy suggestions resource type.
73506+
enum:
73507+
- org_group_policy_suggestions
73508+
example: org_group_policy_suggestions
73509+
type: string
73510+
x-enum-varnames:
73511+
- ORG_GROUP_POLICY_SUGGESTIONS
7343273512
OrgGroupPolicyType:
7343373513
description: Org group policies resource type.
7343473514
enum:
@@ -164938,6 +165018,64 @@ paths:
164938165018
x-unstable: |-
164939165019
**Note**: This endpoint is in preview and is subject to change.
164940165020
If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).
165021+
/api/v2/org_group_policy_suggestions:
165022+
get:
165023+
description: List suggested organization group policies. Requires a filter on org group ID.
165024+
operationId: ListOrgGroupPolicySuggestions
165025+
parameters:
165026+
- $ref: "#/components/parameters/OrgGroupPolicyFilterOrgGroupId"
165027+
responses:
165028+
"200":
165029+
content:
165030+
application/json:
165031+
examples:
165032+
default:
165033+
value:
165034+
data:
165035+
- attributes:
165036+
consensus_ratio: 0.75
165037+
policy_name: "monitor_timezone"
165038+
recommended_value: "UTC"
165039+
status: "pending"
165040+
id: "1a2b3c4d-5e6f-7890-abcd-ef0123456789"
165041+
relationships:
165042+
org_group:
165043+
data:
165044+
id: "a1b2c3d4-e5f6-7890-abcd-ef0123456789"
165045+
type: org_groups
165046+
type: org_group_policy_suggestions
165047+
schema:
165048+
$ref: "#/components/schemas/OrgGroupPolicySuggestionListResponse"
165049+
description: OK
165050+
"400":
165051+
content:
165052+
application/json:
165053+
schema:
165054+
$ref: "#/components/schemas/JSONAPIErrorResponse"
165055+
description: Bad Request
165056+
"401":
165057+
content:
165058+
application/json:
165059+
schema:
165060+
$ref: "#/components/schemas/JSONAPIErrorResponse"
165061+
description: Unauthorized
165062+
"403":
165063+
content:
165064+
application/json:
165065+
schema:
165066+
$ref: "#/components/schemas/JSONAPIErrorResponse"
165067+
description: Forbidden
165068+
"429":
165069+
$ref: "#/components/responses/TooManyRequestsResponse"
165070+
summary: List org group policy suggestions
165071+
tags: [Org Groups]
165072+
"x-permission":
165073+
operator: OR
165074+
permissions:
165075+
- org_group_read
165076+
x-unstable: |-
165077+
**Note**: This endpoint is in preview and is subject to change.
165078+
If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).
164941165079
/api/v2/org_groups:
164942165080
get:
164943165081
description: List all organization groups that the requesting organization has access to.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// List org group policy suggestions returns "OK" response
2+
use datadog_api_client::datadog;
3+
use datadog_api_client::datadogV2::api_org_groups::OrgGroupsAPI;
4+
use uuid::Uuid;
5+
6+
#[tokio::main]
7+
async fn main() {
8+
let mut configuration = datadog::Configuration::new();
9+
configuration.set_unstable_operation_enabled("v2.ListOrgGroupPolicySuggestions", true);
10+
let api = OrgGroupsAPI::with_config(configuration);
11+
let resp = api
12+
.list_org_group_policy_suggestions(
13+
Uuid::parse_str("a1b2c3d4-e5f6-7890-abcd-ef0123456789").expect("invalid UUID"),
14+
)
15+
.await;
16+
if let Ok(value) = resp {
17+
println!("{:#?}", value);
18+
} else {
19+
println!("{:#?}", resp.unwrap_err());
20+
}
21+
}

src/datadog/configuration.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -728,6 +728,7 @@ impl Default for Configuration {
728728
("v2.list_org_group_policies".to_owned(), false),
729729
("v2.list_org_group_policy_configs".to_owned(), false),
730730
("v2.list_org_group_policy_overrides".to_owned(), false),
731+
("v2.list_org_group_policy_suggestions".to_owned(), false),
731732
("v2.list_org_groups".to_owned(), false),
732733
("v2.update_org_group".to_owned(), false),
733734
("v2.update_org_group_membership".to_owned(), false),

src/datadogV2/api/api_org_groups.rs

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,15 @@ pub enum ListOrgGroupPolicyOverridesError {
297297
UnknownValue(serde_json::Value),
298298
}
299299

300+
/// ListOrgGroupPolicySuggestionsError is a struct for typed errors of method [`OrgGroupsAPI::list_org_group_policy_suggestions`]
301+
#[derive(Debug, Clone, Serialize, Deserialize)]
302+
#[serde(untagged)]
303+
pub enum ListOrgGroupPolicySuggestionsError {
304+
JSONAPIErrorResponse(crate::datadogV2::model::JSONAPIErrorResponse),
305+
APIErrorResponse(crate::datadogV2::model::APIErrorResponse),
306+
UnknownValue(serde_json::Value),
307+
}
308+
300309
/// ListOrgGroupsError is a struct for typed errors of method [`OrgGroupsAPI::list_org_groups`]
301310
#[derive(Debug, Clone, Serialize, Deserialize)]
302311
#[serde(untagged)]
@@ -2390,6 +2399,129 @@ impl OrgGroupsAPI {
23902399
}
23912400
}
23922401

2402+
/// List suggested organization group policies. Requires a filter on org group ID.
2403+
pub async fn list_org_group_policy_suggestions(
2404+
&self,
2405+
filter_org_group_id: uuid::Uuid,
2406+
) -> Result<
2407+
crate::datadogV2::model::OrgGroupPolicySuggestionListResponse,
2408+
datadog::Error<ListOrgGroupPolicySuggestionsError>,
2409+
> {
2410+
match self
2411+
.list_org_group_policy_suggestions_with_http_info(filter_org_group_id)
2412+
.await
2413+
{
2414+
Ok(response_content) => {
2415+
if let Some(e) = response_content.entity {
2416+
Ok(e)
2417+
} else {
2418+
Err(datadog::Error::Serde(serde::de::Error::custom(
2419+
"response content was None",
2420+
)))
2421+
}
2422+
}
2423+
Err(err) => Err(err),
2424+
}
2425+
}
2426+
2427+
/// List suggested organization group policies. Requires a filter on org group ID.
2428+
pub async fn list_org_group_policy_suggestions_with_http_info(
2429+
&self,
2430+
filter_org_group_id: uuid::Uuid,
2431+
) -> Result<
2432+
datadog::ResponseContent<crate::datadogV2::model::OrgGroupPolicySuggestionListResponse>,
2433+
datadog::Error<ListOrgGroupPolicySuggestionsError>,
2434+
> {
2435+
let local_configuration = &self.config;
2436+
let operation_id = "v2.list_org_group_policy_suggestions";
2437+
if local_configuration.is_unstable_operation_enabled(operation_id) {
2438+
warn!("Using unstable operation {operation_id}");
2439+
} else {
2440+
let local_error = datadog::UnstableOperationDisabledError {
2441+
msg: "Operation 'v2.list_org_group_policy_suggestions' is not enabled".to_string(),
2442+
};
2443+
return Err(datadog::Error::UnstableOperationDisabledError(local_error));
2444+
}
2445+
2446+
let local_client = &self.client;
2447+
2448+
let local_uri_str = format!(
2449+
"{}/api/v2/org_group_policy_suggestions",
2450+
local_configuration.get_operation_host(operation_id)
2451+
);
2452+
let mut local_req_builder =
2453+
local_client.request(reqwest::Method::GET, local_uri_str.as_str());
2454+
2455+
local_req_builder =
2456+
local_req_builder.query(&[("filter[org_group_id]", &filter_org_group_id.to_string())]);
2457+
2458+
// build headers
2459+
let mut headers = HeaderMap::new();
2460+
headers.insert("Accept", HeaderValue::from_static("application/json"));
2461+
2462+
// build user agent
2463+
match HeaderValue::from_str(local_configuration.user_agent.as_str()) {
2464+
Ok(user_agent) => headers.insert(reqwest::header::USER_AGENT, user_agent),
2465+
Err(e) => {
2466+
log::warn!("Failed to parse user agent header: {e}, falling back to default");
2467+
headers.insert(
2468+
reqwest::header::USER_AGENT,
2469+
HeaderValue::from_static(datadog::DEFAULT_USER_AGENT.as_str()),
2470+
)
2471+
}
2472+
};
2473+
2474+
// build auth
2475+
if let Some(local_key) = local_configuration.auth_keys.get("apiKeyAuth") {
2476+
headers.insert(
2477+
"DD-API-KEY",
2478+
HeaderValue::from_str(local_key.key.as_str())
2479+
.expect("failed to parse DD-API-KEY header"),
2480+
);
2481+
};
2482+
if let Some(local_key) = local_configuration.auth_keys.get("appKeyAuth") {
2483+
headers.insert(
2484+
"DD-APPLICATION-KEY",
2485+
HeaderValue::from_str(local_key.key.as_str())
2486+
.expect("failed to parse DD-APPLICATION-KEY header"),
2487+
);
2488+
};
2489+
2490+
local_req_builder = local_req_builder.headers(headers);
2491+
let local_req = local_req_builder.build()?;
2492+
log::debug!("request content: {:?}", local_req.body());
2493+
let local_resp = local_client.execute(local_req).await?;
2494+
2495+
let local_status = local_resp.status();
2496+
let local_content = local_resp.text().await?;
2497+
log::debug!("response content: {}", local_content);
2498+
2499+
if !local_status.is_client_error() && !local_status.is_server_error() {
2500+
match serde_json::from_str::<
2501+
crate::datadogV2::model::OrgGroupPolicySuggestionListResponse,
2502+
>(&local_content)
2503+
{
2504+
Ok(e) => {
2505+
return Ok(datadog::ResponseContent {
2506+
status: local_status,
2507+
content: local_content,
2508+
entity: Some(e),
2509+
})
2510+
}
2511+
Err(e) => return Err(datadog::Error::Serde(e)),
2512+
};
2513+
} else {
2514+
let local_entity: Option<ListOrgGroupPolicySuggestionsError> =
2515+
serde_json::from_str(&local_content).ok();
2516+
let local_error = datadog::ResponseContent {
2517+
status: local_status,
2518+
content: local_content,
2519+
entity: local_entity,
2520+
};
2521+
Err(datadog::Error::ResponseError(local_error))
2522+
}
2523+
}
2524+
23932525
/// List all organization groups that the requesting organization has access to.
23942526
pub async fn list_org_groups(
23952527
&self,

src/datadogV2/model/mod.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8590,6 +8590,18 @@ pub mod model_org_group_policy_override_update_data;
85908590
pub use self::model_org_group_policy_override_update_data::OrgGroupPolicyOverrideUpdateData;
85918591
pub mod model_org_group_policy_override_update_attributes;
85928592
pub use self::model_org_group_policy_override_update_attributes::OrgGroupPolicyOverrideUpdateAttributes;
8593+
pub mod model_org_group_policy_suggestion_list_response;
8594+
pub use self::model_org_group_policy_suggestion_list_response::OrgGroupPolicySuggestionListResponse;
8595+
pub mod model_org_group_policy_suggestion_data;
8596+
pub use self::model_org_group_policy_suggestion_data::OrgGroupPolicySuggestionData;
8597+
pub mod model_org_group_policy_suggestion_attributes;
8598+
pub use self::model_org_group_policy_suggestion_attributes::OrgGroupPolicySuggestionAttributes;
8599+
pub mod model_org_group_policy_suggestion_status;
8600+
pub use self::model_org_group_policy_suggestion_status::OrgGroupPolicySuggestionStatus;
8601+
pub mod model_org_group_policy_suggestion_relationships;
8602+
pub use self::model_org_group_policy_suggestion_relationships::OrgGroupPolicySuggestionRelationships;
8603+
pub mod model_org_group_policy_suggestion_type;
8604+
pub use self::model_org_group_policy_suggestion_type::OrgGroupPolicySuggestionType;
85938605
pub mod model_org_group_sort_option;
85948606
pub use self::model_org_group_sort_option::OrgGroupSortOption;
85958607
pub mod model_org_group_list_response;

0 commit comments

Comments
 (0)