From 397193adcc2101661e18466f3867e2953522406d Mon Sep 17 00:00:00 2001 From: Kathie Huang Date: Wed, 17 Sep 2025 11:30:36 -0400 Subject: [PATCH 1/9] nit: fix WEBSITE_OWNER_NAME mispelling --- ddcommon/src/azure_app_services.rs | 36 +++++++++++++++--------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/ddcommon/src/azure_app_services.rs b/ddcommon/src/azure_app_services.rs index 8a4a687acf..ae615892ba 100644 --- a/ddcommon/src/azure_app_services.rs +++ b/ddcommon/src/azure_app_services.rs @@ -5,7 +5,7 @@ use regex::Regex; use std::env; use std::sync::LazyLock; -const WEBSITE_ONWER_NAME: &str = "WEBSITE_OWNER_NAME"; +const WEBSITE_OWNER_NAME: &str = "WEBSITE_OWNER_NAME"; const WEBSITE_SITE_NAME: &str = "WEBSITE_SITE_NAME"; const WEBSITE_RESOURCE_GROUP: &str = "WEBSITE_RESOURCE_GROUP"; const SITE_EXTENSION_VERSION: &str = "DD_AAS_DOTNET_EXTENSION_VERSION"; @@ -131,7 +131,7 @@ impl AzureMetadata { fn build_metadata(query: T) -> Option { let subscription_id = - AzureMetadata::extract_subscription_id(query.get_var(WEBSITE_ONWER_NAME)); + AzureMetadata::extract_subscription_id(query.get_var(WEBSITE_OWNER_NAME)); let site_name = query.get_var(WEBSITE_SITE_NAME); let (site_kind, site_type) = match AzureMetadata::get_azure_context(&query) { @@ -141,7 +141,7 @@ impl AzureMetadata { let resource_group = query .get_var(WEBSITE_RESOURCE_GROUP) - .or_else(|| AzureMetadata::extract_resource_group(query.get_var(WEBSITE_ONWER_NAME))); + .or_else(|| AzureMetadata::extract_resource_group(query.get_var(WEBSITE_OWNER_NAME))); let resource_id = AzureMetadata::build_resource_id( subscription_id.as_ref(), site_name.as_ref(), @@ -262,7 +262,7 @@ mod tests { use indexmap::IndexMap; - use crate::azure_app_services::{QueryEnv, WEBSITE_ONWER_NAME}; + use crate::azure_app_services::{QueryEnv, WEBSITE_OWNER_NAME}; use super::*; @@ -353,7 +353,7 @@ mod tests { #[test] fn test_extract_subscription_without_plus_sign() { - let mocked_env = MockEnv::new(&[(WEBSITE_ONWER_NAME, "foo"), (SERVICE_CONTEXT, "1")]); + let mocked_env = MockEnv::new(&[(WEBSITE_OWNER_NAME, "foo"), (SERVICE_CONTEXT, "1")]); let metadata = AzureMetadata::new(mocked_env).unwrap(); @@ -364,7 +364,7 @@ mod tests { #[test] fn test_extract_subscription_with_plus_sign() { - let mocked_env = MockEnv::new(&[(WEBSITE_ONWER_NAME, "foo+bar"), (SERVICE_CONTEXT, "1")]); + let mocked_env = MockEnv::new(&[(WEBSITE_OWNER_NAME, "foo+bar"), (SERVICE_CONTEXT, "1")]); let metadata = AzureMetadata::new(mocked_env).unwrap(); @@ -374,7 +374,7 @@ mod tests { #[test] fn test_extract_subscription_with_empty_string() { - let mocked_env = MockEnv::new(&[(WEBSITE_ONWER_NAME, ""), (SERVICE_CONTEXT, "1")]); + let mocked_env = MockEnv::new(&[(WEBSITE_OWNER_NAME, ""), (SERVICE_CONTEXT, "1")]); let metadata = AzureMetadata::new(mocked_env).unwrap(); @@ -383,7 +383,7 @@ mod tests { #[test] fn test_extract_subscription_with_only_whitespaces() { - let mocked_env = MockEnv::new(&[(WEBSITE_ONWER_NAME, " "), (SERVICE_CONTEXT, "1")]); + let mocked_env = MockEnv::new(&[(WEBSITE_OWNER_NAME, " "), (SERVICE_CONTEXT, "1")]); let metadata = AzureMetadata::new(mocked_env).unwrap(); @@ -392,7 +392,7 @@ mod tests { #[test] fn test_extract_subscription_with_only_plus_sign() { - let mocked_env = MockEnv::new(&[(WEBSITE_ONWER_NAME, "+"), (SERVICE_CONTEXT, "1")]); + let mocked_env = MockEnv::new(&[(WEBSITE_OWNER_NAME, "+"), (SERVICE_CONTEXT, "1")]); let metadata = AzureMetadata::new(mocked_env).unwrap(); @@ -401,7 +401,7 @@ mod tests { #[test] fn test_extract_subscription_with_whitespaces_separated_by_plus() { - let mocked_env = MockEnv::new(&[(WEBSITE_ONWER_NAME, " + "), (SERVICE_CONTEXT, "1")]); + let mocked_env = MockEnv::new(&[(WEBSITE_OWNER_NAME, " + "), (SERVICE_CONTEXT, "1")]); let metadata = AzureMetadata::new(mocked_env).unwrap(); @@ -410,7 +410,7 @@ mod tests { #[test] fn test_extract_subscription_plus_sign_and_other_string() { - let mocked_env = MockEnv::new(&[(WEBSITE_ONWER_NAME, "+other"), (SERVICE_CONTEXT, "1")]); + let mocked_env = MockEnv::new(&[(WEBSITE_OWNER_NAME, "+other"), (SERVICE_CONTEXT, "1")]); let metadata = AzureMetadata::new(mocked_env).unwrap(); @@ -421,7 +421,7 @@ mod tests { fn test_extract_resource_group_pattern_match_linux() { let mocked_env = MockEnv::new(&[ ( - WEBSITE_ONWER_NAME, + WEBSITE_OWNER_NAME, "00000000-0000-0000-0000-000000000000+test-rg-EastUSwebspace-Linux", ), ("FUNCTIONS_WORKER_RUNTIME", "node"), @@ -439,7 +439,7 @@ mod tests { fn test_extract_resource_group_pattern_match_windows() { let mocked_env = MockEnv::new(&[ ( - WEBSITE_ONWER_NAME, + WEBSITE_OWNER_NAME, "00000000-0000-0000-0000-000000000000+test-rg-EastUSwebspace", ), ("FUNCTIONS_WORKER_RUNTIME", "node"), @@ -456,7 +456,7 @@ mod tests { #[test] fn test_extract_resource_group_no_pattern_match() { let mocked_env = MockEnv::new(&[ - (WEBSITE_ONWER_NAME, "foo"), + (WEBSITE_OWNER_NAME, "foo"), (FUNCTIONS_WORKER_RUNTIME, "node"), (FUNCTIONS_EXTENSION_VERSION, "~4"), ]); @@ -471,7 +471,7 @@ mod tests { let mocked_env = MockEnv::new(&[ (WEBSITE_RESOURCE_GROUP, "test-rg-env-var"), ( - WEBSITE_ONWER_NAME, + WEBSITE_OWNER_NAME, "00000000-0000-0000-0000-000000000000+test-rg-EastUSwebspace-Linux", ), (SERVICE_CONTEXT, "1"), @@ -487,7 +487,7 @@ mod tests { #[test] fn test_build_resource_id() { let mocked_env = MockEnv::new(&[ - (WEBSITE_ONWER_NAME, "foo"), + (WEBSITE_OWNER_NAME, "foo"), (WEBSITE_SITE_NAME, "my_website"), (WEBSITE_RESOURCE_GROUP, "resource_group"), (SERVICE_CONTEXT, "1"), @@ -517,7 +517,7 @@ mod tests { #[test] fn test_build_resource_id_with_missing_site_name() { let mocked_env = MockEnv::new(&[ - (WEBSITE_ONWER_NAME, "foo"), + (WEBSITE_OWNER_NAME, "foo"), (WEBSITE_RESOURCE_GROUP, "resource_group"), (SERVICE_CONTEXT, "1"), ]); @@ -530,7 +530,7 @@ mod tests { #[test] fn test_build_resource_id_with_missing_resource_group() { let mocked_env = MockEnv::new(&[ - (WEBSITE_ONWER_NAME, "foo"), + (WEBSITE_OWNER_NAME, "foo"), (WEBSITE_SITE_NAME, "my_website"), (SERVICE_CONTEXT, "1"), ]); From 05f4f3c2b56b9cd27d4c514da07ff667177dfaff Mon Sep 17 00:00:00 2001 From: Kathie Huang Date: Mon, 22 Sep 2025 11:21:52 -0400 Subject: [PATCH 2/9] Check DD_AZURE_RESOURCE_GROUP env variable when getting resource group for flex consumption functions --- ddcommon/src/azure_app_services.rs | 49 ++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/ddcommon/src/azure_app_services.rs b/ddcommon/src/azure_app_services.rs index ae615892ba..00f1cd76df 100644 --- a/ddcommon/src/azure_app_services.rs +++ b/ddcommon/src/azure_app_services.rs @@ -16,6 +16,7 @@ const SERVICE_CONTEXT: &str = "DD_AZURE_APP_SERVICES"; const FUNCTIONS_WORKER_RUNTIME: &str = "FUNCTIONS_WORKER_RUNTIME"; const FUNCTIONS_WORKER_RUNTIME_VERSION: &str = "FUNCTIONS_WORKER_RUNTIME_VERSION"; const FUNCTIONS_EXTENSION_VERSION: &str = "FUNCTIONS_EXTENSION_VERSION"; +const DD_AZURE_RESOURCE_GROUP: &str = "DD_AZURE_RESOURCE_GROUP"; const UNKNOWN_VALUE: &str = "unknown"; @@ -140,8 +141,19 @@ impl AzureMetadata { }; let resource_group = query - .get_var(WEBSITE_RESOURCE_GROUP) - .or_else(|| AzureMetadata::extract_resource_group(query.get_var(WEBSITE_OWNER_NAME))); + .get_var(WEBSITE_RESOURCE_GROUP) + .or_else(|| { + let extracted = AzureMetadata::extract_resource_group(query.get_var(WEBSITE_OWNER_NAME)); + match extracted.as_deref() { + Some("flex") => { + match query.get_var(DD_AZURE_RESOURCE_GROUP) { + Some(rg) => Some(rg), + None => panic!("ERROR: Resource group not found. If you are using Azure Functions on Flex Consumption plan, please add your resource group name as an environment variable called `DD_AZURE_RESOURCE_GROUP` in Azure app settings."), + } + } + _ => extracted, + } + }); let resource_id = AzureMetadata::build_resource_id( subscription_id.as_ref(), site_name.as_ref(), @@ -474,16 +486,49 @@ mod tests { WEBSITE_OWNER_NAME, "00000000-0000-0000-0000-000000000000+test-rg-EastUSwebspace-Linux", ), + (DD_AZURE_RESOURCE_GROUP, "different-test-rg"), (SERVICE_CONTEXT, "1"), ]); let metadata = AzureMetadata::new(mocked_env).unwrap(); + // Should use WEBSITE_RESOURCE_GROUP env var over WEBSITE_OWNER_NAME and DD_AZURE_RESOURCE_GROUP let expected_resource_group = "test-rg-env-var"; assert_eq!(metadata.get_resource_group(), expected_resource_group); } + #[test] + #[should_panic(expected = "ERROR: Resource group not found. If you are using Azure Functions on Flex Consumption plan, please add your resource group name as an environment variable called `DD_AZURE_RESOURCE_GROUP` in Azure app settings.")] + fn test_flex_consumption_panics_without_dd_azure_resource_group() { + let mocked_env = MockEnv::new(&[ + ( + WEBSITE_OWNER_NAME, + "00000000-0000-0000-0000-000000000000+flex-EastUSwebspace-Linux", + ), + (SERVICE_CONTEXT, "1"), + ]); + + AzureMetadata::new(mocked_env); + } + + #[test] + fn test_flex_consumption_uses_dd_azure_resource_group() { + let mocked_env = MockEnv::new(&[ + ( + WEBSITE_OWNER_NAME, + "00000000-0000-0000-0000-000000000000+flex-EastUSwebspace-Linux", + ), + (DD_AZURE_RESOURCE_GROUP, "test-flex-rg"), + (SERVICE_CONTEXT, "1"), + ]); + + let metadata = AzureMetadata::new(mocked_env).unwrap(); + + // Should use the DD_AZURE_RESOURCE_GROUP value instead of extracting from WEBSITE_OWNER_NAME + assert_eq!(metadata.get_resource_group(), "test-flex-rg"); + } + #[test] fn test_build_resource_id() { let mocked_env = MockEnv::new(&[ From 6c2249c3b7b5847437222c31d0853298ef19e266 Mon Sep 17 00:00:00 2001 From: Kathie Huang Date: Mon, 22 Sep 2025 14:22:04 -0400 Subject: [PATCH 3/9] nit: Update panic message --- ddcommon/src/azure_app_services.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ddcommon/src/azure_app_services.rs b/ddcommon/src/azure_app_services.rs index 00f1cd76df..5972226b11 100644 --- a/ddcommon/src/azure_app_services.rs +++ b/ddcommon/src/azure_app_services.rs @@ -148,7 +148,7 @@ impl AzureMetadata { Some("flex") => { match query.get_var(DD_AZURE_RESOURCE_GROUP) { Some(rg) => Some(rg), - None => panic!("ERROR: Resource group not found. If you are using Azure Functions on Flex Consumption plan, please add your resource group name as an environment variable called `DD_AZURE_RESOURCE_GROUP` in Azure app settings."), + None => panic!("ERROR: Resource group not found. If you are using Azure Functions on the Flex Consumption plan, please add your resource group name as an environment variable called `DD_AZURE_RESOURCE_GROUP` in Azure app settings."), } } _ => extracted, @@ -499,7 +499,7 @@ mod tests { } #[test] - #[should_panic(expected = "ERROR: Resource group not found. If you are using Azure Functions on Flex Consumption plan, please add your resource group name as an environment variable called `DD_AZURE_RESOURCE_GROUP` in Azure app settings.")] + #[should_panic(expected = "ERROR: Resource group not found. If you are using Azure Functions on the Flex Consumption plan, please add your resource group name as an environment variable called `DD_AZURE_RESOURCE_GROUP` in Azure app settings.")] fn test_flex_consumption_panics_without_dd_azure_resource_group() { let mocked_env = MockEnv::new(&[ ( From 8d67507ece30514de50486551dcd1b150862a77f Mon Sep 17 00:00:00 2001 From: Kathie Huang Date: Mon, 22 Sep 2025 14:31:28 -0400 Subject: [PATCH 4/9] ran cargo fmt --- ddcommon/src/azure_app_services.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ddcommon/src/azure_app_services.rs b/ddcommon/src/azure_app_services.rs index 5972226b11..5613a4fb03 100644 --- a/ddcommon/src/azure_app_services.rs +++ b/ddcommon/src/azure_app_services.rs @@ -499,7 +499,9 @@ mod tests { } #[test] - #[should_panic(expected = "ERROR: Resource group not found. If you are using Azure Functions on the Flex Consumption plan, please add your resource group name as an environment variable called `DD_AZURE_RESOURCE_GROUP` in Azure app settings.")] + #[should_panic( + expected = "ERROR: Resource group not found. If you are using Azure Functions on the Flex Consumption plan, please add your resource group name as an environment variable called `DD_AZURE_RESOURCE_GROUP` in Azure app settings." + )] fn test_flex_consumption_panics_without_dd_azure_resource_group() { let mocked_env = MockEnv::new(&[ ( From dfb93794aaeb27fb98f466113a736deac1d8b472 Mon Sep 17 00:00:00 2001 From: Kathie Huang Date: Mon, 22 Sep 2025 15:59:04 -0400 Subject: [PATCH 5/9] Changed logic order to check DD_AZURE_RESOURCE_GROUP first --- ddcommon/src/azure_app_services.rs | 47 ++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/ddcommon/src/azure_app_services.rs b/ddcommon/src/azure_app_services.rs index 5613a4fb03..f8cad50125 100644 --- a/ddcommon/src/azure_app_services.rs +++ b/ddcommon/src/azure_app_services.rs @@ -141,19 +141,16 @@ impl AzureMetadata { }; let resource_group = query - .get_var(WEBSITE_RESOURCE_GROUP) - .or_else(|| { - let extracted = AzureMetadata::extract_resource_group(query.get_var(WEBSITE_OWNER_NAME)); - match extracted.as_deref() { - Some("flex") => { - match query.get_var(DD_AZURE_RESOURCE_GROUP) { - Some(rg) => Some(rg), - None => panic!("ERROR: Resource group not found. If you are using Azure Functions on the Flex Consumption plan, please add your resource group name as an environment variable called `DD_AZURE_RESOURCE_GROUP` in Azure app settings."), - } + .get_var(DD_AZURE_RESOURCE_GROUP) + .or_else(|| query.get_var(WEBSITE_RESOURCE_GROUP)) + .or_else(|| { + let extracted = AzureMetadata::extract_resource_group(query.get_var(WEBSITE_OWNER_NAME)); + match extracted.as_deref() { + Some("flex") => panic!("ERROR: Resource group not found. If you are using Azure Functions on the Flex Consumption plan, please add your resource group name as an environment variable called `DD_AZURE_RESOURCE_GROUP` in Azure app settings."), + _ => extracted, } - _ => extracted, - } - }); + }); + let resource_id = AzureMetadata::build_resource_id( subscription_id.as_ref(), site_name.as_ref(), @@ -486,13 +483,11 @@ mod tests { WEBSITE_OWNER_NAME, "00000000-0000-0000-0000-000000000000+test-rg-EastUSwebspace-Linux", ), - (DD_AZURE_RESOURCE_GROUP, "different-test-rg"), (SERVICE_CONTEXT, "1"), ]); let metadata = AzureMetadata::new(mocked_env).unwrap(); - // Should use WEBSITE_RESOURCE_GROUP env var over WEBSITE_OWNER_NAME and DD_AZURE_RESOURCE_GROUP let expected_resource_group = "test-rg-env-var"; assert_eq!(metadata.get_resource_group(), expected_resource_group); @@ -527,10 +522,32 @@ mod tests { let metadata = AzureMetadata::new(mocked_env).unwrap(); - // Should use the DD_AZURE_RESOURCE_GROUP value instead of extracting from WEBSITE_OWNER_NAME + // Should use the DD_AZURE_RESOURCE_GROUP value instead of extracting from + // WEBSITE_OWNER_NAME assert_eq!(metadata.get_resource_group(), "test-flex-rg"); } + #[test] + fn test_dd_azure_resource_group_has_highest_priority() { + let mocked_env = MockEnv::new(&[ + (WEBSITE_RESOURCE_GROUP, "test-rg-env-var"), + ( + WEBSITE_OWNER_NAME, + "00000000-0000-0000-0000-000000000000+test-rg-EastUSwebspace-Linux", + ), + (DD_AZURE_RESOURCE_GROUP, "dd-azure-rg-override"), + (SERVICE_CONTEXT, "1"), + ]); + + let metadata = AzureMetadata::new(mocked_env).unwrap(); + + // DD_AZURE_RESOURCE_GROUP should have highest priority over WEBSITE_RESOURCE_GROUP and + // WEBSITE_OWNER_NAME + let expected_resource_group = "dd-azure-rg-override"; + + assert_eq!(metadata.get_resource_group(), expected_resource_group); + } + #[test] fn test_build_resource_id() { let mocked_env = MockEnv::new(&[ From 7174075c5a87fef40c19c3f9b4566a11c2da54c2 Mon Sep 17 00:00:00 2001 From: Kathie Huang Date: Wed, 24 Sep 2025 13:29:43 -0400 Subject: [PATCH 6/9] Set resource group to unknown instead of panicking --- ddcommon/src/azure_app_services.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/ddcommon/src/azure_app_services.rs b/ddcommon/src/azure_app_services.rs index f8cad50125..db8269df92 100644 --- a/ddcommon/src/azure_app_services.rs +++ b/ddcommon/src/azure_app_services.rs @@ -146,7 +146,7 @@ impl AzureMetadata { .or_else(|| { let extracted = AzureMetadata::extract_resource_group(query.get_var(WEBSITE_OWNER_NAME)); match extracted.as_deref() { - Some("flex") => panic!("ERROR: Resource group not found. If you are using Azure Functions on the Flex Consumption plan, please add your resource group name as an environment variable called `DD_AZURE_RESOURCE_GROUP` in Azure app settings."), + Some("flex") => None, _ => extracted, } }); @@ -494,10 +494,7 @@ mod tests { } #[test] - #[should_panic( - expected = "ERROR: Resource group not found. If you are using Azure Functions on the Flex Consumption plan, please add your resource group name as an environment variable called `DD_AZURE_RESOURCE_GROUP` in Azure app settings." - )] - fn test_flex_consumption_panics_without_dd_azure_resource_group() { + fn test_flex_consumption_resource_group_is_none_without_dd_azure_resource_group() { let mocked_env = MockEnv::new(&[ ( WEBSITE_OWNER_NAME, @@ -506,7 +503,9 @@ mod tests { (SERVICE_CONTEXT, "1"), ]); - AzureMetadata::new(mocked_env); + let metadata = AzureMetadata::new(mocked_env).unwrap(); + + assert_eq!(metadata.get_resource_group(), UNKNOWN_VALUE); } #[test] From ee018b9a119733b3b7a9d14f2a470d7311584504 Mon Sep 17 00:00:00 2001 From: Kathie Huang Date: Wed, 24 Sep 2025 13:55:24 -0400 Subject: [PATCH 7/9] nit: fix formatting --- ddcommon/src/azure_app_services.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ddcommon/src/azure_app_services.rs b/ddcommon/src/azure_app_services.rs index db8269df92..9a2f941a3e 100644 --- a/ddcommon/src/azure_app_services.rs +++ b/ddcommon/src/azure_app_services.rs @@ -144,7 +144,8 @@ impl AzureMetadata { .get_var(DD_AZURE_RESOURCE_GROUP) .or_else(|| query.get_var(WEBSITE_RESOURCE_GROUP)) .or_else(|| { - let extracted = AzureMetadata::extract_resource_group(query.get_var(WEBSITE_OWNER_NAME)); + let extracted = + AzureMetadata::extract_resource_group(query.get_var(WEBSITE_OWNER_NAME)); match extracted.as_deref() { Some("flex") => None, _ => extracted, From 696cfe2e886fca16266c0605ba69e8246740f1e3 Mon Sep 17 00:00:00 2001 From: Kathie Huang Date: Fri, 26 Sep 2025 16:04:54 -0400 Subject: [PATCH 8/9] Use WEBSITE_SKU instead of WEBSITE_OWNER_NAME to check for flex consumption function --- ddcommon/src/azure_app_services.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/ddcommon/src/azure_app_services.rs b/ddcommon/src/azure_app_services.rs index 9a2f941a3e..a1683b8917 100644 --- a/ddcommon/src/azure_app_services.rs +++ b/ddcommon/src/azure_app_services.rs @@ -17,6 +17,7 @@ const FUNCTIONS_WORKER_RUNTIME: &str = "FUNCTIONS_WORKER_RUNTIME"; const FUNCTIONS_WORKER_RUNTIME_VERSION: &str = "FUNCTIONS_WORKER_RUNTIME_VERSION"; const FUNCTIONS_EXTENSION_VERSION: &str = "FUNCTIONS_EXTENSION_VERSION"; const DD_AZURE_RESOURCE_GROUP: &str = "DD_AZURE_RESOURCE_GROUP"; +const WEBSITE_SKU: &str = "WEBSITE_SKU"; const UNKNOWN_VALUE: &str = "unknown"; @@ -144,11 +145,11 @@ impl AzureMetadata { .get_var(DD_AZURE_RESOURCE_GROUP) .or_else(|| query.get_var(WEBSITE_RESOURCE_GROUP)) .or_else(|| { - let extracted = - AzureMetadata::extract_resource_group(query.get_var(WEBSITE_OWNER_NAME)); - match extracted.as_deref() { - Some("flex") => None, - _ => extracted, + // Check if we're in flex consumption plan first + match query.get_var(WEBSITE_SKU).as_deref() { + Some("FlexConsumption") => None, /* Flex Consumption plans need */ + // `DD_AZURE_RESOURCE_GROUP` env var + _ => AzureMetadata::extract_resource_group(query.get_var(WEBSITE_OWNER_NAME)), } }); @@ -485,6 +486,7 @@ mod tests { "00000000-0000-0000-0000-000000000000+test-rg-EastUSwebspace-Linux", ), (SERVICE_CONTEXT, "1"), + (WEBSITE_SKU, "ElasticPremium"), ]); let metadata = AzureMetadata::new(mocked_env).unwrap(); @@ -501,6 +503,7 @@ mod tests { WEBSITE_OWNER_NAME, "00000000-0000-0000-0000-000000000000+flex-EastUSwebspace-Linux", ), + (WEBSITE_SKU, "FlexConsumption"), (SERVICE_CONTEXT, "1"), ]); @@ -517,6 +520,7 @@ mod tests { "00000000-0000-0000-0000-000000000000+flex-EastUSwebspace-Linux", ), (DD_AZURE_RESOURCE_GROUP, "test-flex-rg"), + (WEBSITE_SKU, "FlexConsumption"), (SERVICE_CONTEXT, "1"), ]); From d1b35ef21fff3c4588073504905081c8923bbc4b Mon Sep 17 00:00:00 2001 From: Kathie Huang Date: Fri, 26 Sep 2025 17:09:34 -0400 Subject: [PATCH 9/9] Add comment to ensure future developers know to update other repos if flex consumption rg detection logic changes --- ddcommon/src/azure_app_services.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ddcommon/src/azure_app_services.rs b/ddcommon/src/azure_app_services.rs index a1683b8917..302b15d8c0 100644 --- a/ddcommon/src/azure_app_services.rs +++ b/ddcommon/src/azure_app_services.rs @@ -147,8 +147,11 @@ impl AzureMetadata { .or_else(|| { // Check if we're in flex consumption plan first match query.get_var(WEBSITE_SKU).as_deref() { - Some("FlexConsumption") => None, /* Flex Consumption plans need */ - // `DD_AZURE_RESOURCE_GROUP` env var + Some("FlexConsumption") => None, + /* Flex Consumption plans need the `DD_AZURE_RESOURCE_GROUP` env var. If this + * logic ever changes, update the logic in + * `serverless-components/src/datadog-trace-agent` and the serverless compat + * layers accordingly. */ _ => AzureMetadata::extract_resource_group(query.get_var(WEBSITE_OWNER_NAME)), } });