Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion pkg/recipes/configloader/environment.go
Original file line number Diff line number Diff line change
Expand Up @@ -163,8 +163,12 @@ func getConfigurationV20250801(environment *v20250801preview.EnvironmentResource
envDatamodel := env.(*datamodel.Environment_v20250801preview)
if envDatamodel.Properties.Providers != nil {
if envDatamodel.Properties.Providers.Azure != nil {
scope := "/subscriptions/" + envDatamodel.Properties.Providers.Azure.SubscriptionId
if envDatamodel.Properties.Providers.Azure.ResourceGroupName != "" {
scope += "/resourceGroups/" + envDatamodel.Properties.Providers.Azure.ResourceGroupName
}
config.Providers.Azure = datamodel.ProvidersAzure{
Scope: envDatamodel.Properties.Providers.Azure.SubscriptionId,
Scope: scope,
}
}
if envDatamodel.Properties.Providers.AWS != nil {
Expand Down
36 changes: 34 additions & 2 deletions pkg/recipes/configloader/environment_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -399,7 +399,7 @@ func TestGetConfigurationV20250801(t *testing.T) {
errString string
}{
{
name: "azure provider with env resource v20250801",
name: "azure provider with subscription only v20250801",
envResource: &modelv20250801.EnvironmentResource{
Properties: &modelv20250801.EnvironmentProperties{
Providers: &modelv20250801.Providers{
Expand All @@ -423,7 +423,39 @@ func TestGetConfigurationV20250801(t *testing.T) {
},
Providers: datamodel.Providers{
Azure: datamodel.ProvidersAzure{
Scope: "test-subscription-id",
Scope: "/subscriptions/test-subscription-id",
},
},
Simulated: false,
},
},
{
name: "azure provider with subscription and resource group v20250801",
envResource: &modelv20250801.EnvironmentResource{
Properties: &modelv20250801.EnvironmentProperties{
Providers: &modelv20250801.Providers{
Azure: &modelv20250801.ProvidersAzure{
SubscriptionID: to.Ptr("85716382-aaaa-aaaa-aaaa-2126e459a123"),
ResourceGroupName: to.Ptr("my-resource-group"),
},
Kubernetes: &modelv20250801.ProvidersKubernetes{
Namespace: to.Ptr(envNamespace),
},
},
Simulated: to.Ptr(false),
},
},
appResource: nil,
expectedConfig: &recipes.Configuration{
Runtime: recipes.RuntimeConfiguration{
Kubernetes: &recipes.KubernetesRuntime{
Namespace: envNamespace,
EnvironmentNamespace: envNamespace,
},
},
Providers: datamodel.Providers{
Azure: datamodel.ProvidersAzure{
Scope: "/subscriptions/85716382-aaaa-aaaa-aaaa-2126e459a123/resourceGroups/my-resource-group",
},
},
Simulated: false,
Expand Down
73 changes: 73 additions & 0 deletions pkg/recipes/recipecontext/context_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -383,3 +383,76 @@ func TestNewContext_WithConnectedResources(t *testing.T) {
"port": 6379,
}, cacheConn.Properties)
}

func TestNewContext_AzureProviderWithResourceGroup(t *testing.T) {
// This test verifies the fix for the issue where Azure provider config
// with separate subscriptionId and resourceGroupName fields should construct
// the full Azure resource ID path correctly
testMetadata := &recipes.ResourceMetadata{
ResourceID: "/planes/radius/local/resourceGroups/testGroup/providers/applications.datastores/mongodatabases/mongo0",
EnvironmentID: "/planes/radius/local/resourceGroups/test-group/providers/Applications.Core/environments/env0",
ApplicationID: "/planes/radius/local/resourceGroups/test-group/providers/Applications.Core/applications/testApplication",
Properties: map[string]any{
"throughput": 100,
},
}

testConfig := &recipes.Configuration{
Runtime: recipes.RuntimeConfiguration{
Kubernetes: &recipes.KubernetesRuntime{
Namespace: "radius-test-app",
EnvironmentNamespace: "radius-test-env",
},
},
Providers: coredm.Providers{
Azure: coredm.ProvidersAzure{
Scope: "/subscriptions/85716382-aaaa-aaaa-aaaa-2126e459a123/resourceGroups/my-resource-group",
},
},
}

recipeContext, err := New(testMetadata, testConfig)
require.NoError(t, err)
require.NotNil(t, recipeContext)
require.NotNil(t, recipeContext.Azure)

// Verify the Azure provider fields are correctly parsed
require.Equal(t, "85716382-aaaa-aaaa-aaaa-2126e459a123", recipeContext.Azure.Subscription.SubscriptionID)
require.Equal(t, "/subscriptions/85716382-aaaa-aaaa-aaaa-2126e459a123", recipeContext.Azure.Subscription.ID)
require.Equal(t, "my-resource-group", recipeContext.Azure.ResourceGroup.Name)
require.Equal(t, "/subscriptions/85716382-aaaa-aaaa-aaaa-2126e459a123/resourceGroups/my-resource-group", recipeContext.Azure.ResourceGroup.ID)
}

func TestNewContext_AzureProviderSubscriptionOnly(t *testing.T) {
// Test that Azure provider with only subscription ID also works correctly
testMetadata := &recipes.ResourceMetadata{
ResourceID: "/planes/radius/local/resourceGroups/testGroup/providers/applications.datastores/mongodatabases/mongo0",
EnvironmentID: "/planes/radius/local/resourceGroups/test-group/providers/Applications.Core/environments/env0",
ApplicationID: "/planes/radius/local/resourceGroups/test-group/providers/Applications.Core/applications/testApplication",
}

testConfig := &recipes.Configuration{
Runtime: recipes.RuntimeConfiguration{
Kubernetes: &recipes.KubernetesRuntime{
Namespace: "radius-test-app",
EnvironmentNamespace: "radius-test-env",
},
},
Providers: coredm.Providers{
Azure: coredm.ProvidersAzure{
Scope: "/subscriptions/test-subscription-id",
},
},
}

recipeContext, err := New(testMetadata, testConfig)
require.NoError(t, err)
require.NotNil(t, recipeContext)
require.NotNil(t, recipeContext.Azure)

// Verify the Azure provider fields are correctly parsed (no resource group)
require.Equal(t, "test-subscription-id", recipeContext.Azure.Subscription.SubscriptionID)
require.Equal(t, "/subscriptions/test-subscription-id", recipeContext.Azure.Subscription.ID)
require.Equal(t, "", recipeContext.Azure.ResourceGroup.Name)
require.Equal(t, "/subscriptions/test-subscription-id/resourceGroups/", recipeContext.Azure.ResourceGroup.ID)
}