Skip to content

Commit fa8aed1

Browse files
teowajackofallopspromisinganuj
authored
New Resource: azurerm_cognitive_account_connection_* (#30981)
Co-authored-by: jackofallops <ste@hashicorp.com> Co-authored-by: Anuj Parashar <11286537+promisinganuj@users.noreply.github.com>
1 parent f1bd016 commit fa8aed1

81 files changed

Lines changed: 8977 additions & 12 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

internal/services/cognitive/client/client.go

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,32 @@ package client
66
import (
77
"fmt"
88

9+
"github.com/hashicorp/go-azure-sdk/resource-manager/cognitive/2026-03-01/accountconnectionresource"
910
"github.com/hashicorp/go-azure-sdk/resource-manager/cognitive/2026-03-01/cognitiveservicesaccounts"
1011
"github.com/hashicorp/go-azure-sdk/resource-manager/cognitive/2026-03-01/cognitiveservicesprojects"
1112
"github.com/hashicorp/go-azure-sdk/resource-manager/cognitive/2026-03-01/deployments"
1213
"github.com/hashicorp/go-azure-sdk/resource-manager/cognitive/2026-03-01/raiblocklists"
1314
"github.com/hashicorp/go-azure-sdk/resource-manager/cognitive/2026-03-01/raipolicies"
15+
1416
"github.com/hashicorp/terraform-provider-azurerm/internal/common"
1517
)
1618

1719
type Client struct {
18-
AccountsClient *cognitiveservicesaccounts.CognitiveServicesAccountsClient
19-
DeploymentsClient *deployments.DeploymentsClient
20-
ProjectsClient *cognitiveservicesprojects.CognitiveServicesProjectsClient
21-
RaiBlocklistsClient *raiblocklists.RaiBlocklistsClient
22-
RaiPoliciesClient *raipolicies.RaiPoliciesClient
20+
ProjectsClient *cognitiveservicesprojects.CognitiveServicesProjectsClient
21+
AccountConnectionResourceClient *accountconnectionresource.AccountConnectionResourceClient
22+
AccountsClient *cognitiveservicesaccounts.CognitiveServicesAccountsClient
23+
DeploymentsClient *deployments.DeploymentsClient
24+
RaiBlocklistsClient *raiblocklists.RaiBlocklistsClient
25+
RaiPoliciesClient *raipolicies.RaiPoliciesClient
2326
}
2427

2528
func NewClient(o *common.ClientOptions) (*Client, error) {
29+
accountConnectionResourceClient, err := accountconnectionresource.NewAccountConnectionResourceClientWithBaseURI(o.Environment.ResourceManager)
30+
if err != nil {
31+
return nil, fmt.Errorf("building Account Connection client: %+v", err)
32+
}
33+
o.Configure(accountConnectionResourceClient.Client, o.Authorizers.ResourceManager)
34+
2635
accountsClient, err := cognitiveservicesaccounts.NewCognitiveServicesAccountsClientWithBaseURI(o.Environment.ResourceManager)
2736
if err != nil {
2837
return nil, fmt.Errorf("building Accounts client: %+v", err)
@@ -54,10 +63,11 @@ func NewClient(o *common.ClientOptions) (*Client, error) {
5463
o.Configure(raiBlobklistsClient.Client, o.Authorizers.ResourceManager)
5564

5665
return &Client{
57-
AccountsClient: accountsClient,
58-
DeploymentsClient: deploymentsClient,
59-
ProjectsClient: projectsClient,
60-
RaiBlocklistsClient: raiBlobklistsClient,
61-
RaiPoliciesClient: raiPoliciesClient,
66+
ProjectsClient: projectsClient,
67+
AccountConnectionResourceClient: accountConnectionResourceClient,
68+
AccountsClient: accountsClient,
69+
DeploymentsClient: deploymentsClient,
70+
RaiBlocklistsClient: raiBlobklistsClient,
71+
RaiPoliciesClient: raiPoliciesClient,
6272
}, nil
6373
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package cognitive
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"strings"
7+
8+
"github.com/hashicorp/go-azure-helpers/lang/pointer"
9+
"github.com/hashicorp/go-azure-helpers/lang/response"
10+
"github.com/hashicorp/go-azure-sdk/resource-manager/cognitive/2026-03-01/accountconnectionresource"
11+
"github.com/hashicorp/terraform-provider-azurerm/internal/sdk"
12+
)
13+
14+
func cognitiveAccountConnectionImporter(expectedAuthType accountconnectionresource.ConnectionAuthType, resourceType string) sdk.ResourceRunFunc {
15+
return func(ctx context.Context, metadata sdk.ResourceMetaData) error {
16+
client := metadata.Client.Cognitive.AccountConnectionResourceClient
17+
18+
id, err := accountconnectionresource.ParseConnectionID(metadata.ResourceData.Id())
19+
if err != nil {
20+
return err
21+
}
22+
23+
resp, err := client.AccountConnectionsGet(ctx, *id)
24+
if err != nil {
25+
if response.WasNotFound(resp.HttpResponse) {
26+
return metadata.MarkAsGone(id)
27+
}
28+
return fmt.Errorf("retrieving %s: %+v", *id, err)
29+
}
30+
31+
if model := resp.Model; model != nil && model.Properties != nil {
32+
if authType := model.Properties.ConnectionPropertiesV2().AuthType; authType != expectedAuthType {
33+
return fmt.Errorf("connection %s has auth type `%s` and cannot be managed by `%s`", *id, authType, resourceType)
34+
}
35+
}
36+
37+
return nil
38+
}
39+
}
40+
41+
func flattenAccountConnectionMetadata(priorMetadata map[string]string, apiMetadata *map[string]string) map[string]string {
42+
// Some Connection APIs return additional metadata fields beyond those configured (e.g. `ApiVersion`,
43+
// `DeploymentApiVersion`). When prior configuration is known (Read/Update) only the configured
44+
// keys are surfaced to avoid diffs; otherwise (import or list) all API metadata fields are returned.
45+
apiMetadataValues := pointer.From(apiMetadata)
46+
if len(priorMetadata) == 0 {
47+
return apiMetadataValues
48+
}
49+
50+
filtered := make(map[string]string)
51+
for configKey := range priorMetadata {
52+
for apiKey, apiValue := range apiMetadataValues {
53+
if strings.EqualFold(configKey, apiKey) {
54+
filtered[configKey] = apiValue
55+
break
56+
}
57+
}
58+
}
59+
return filtered
60+
}

0 commit comments

Comments
 (0)