From 9a6edac1bbfe4d443cbe615634e2f9e9b1b55e59 Mon Sep 17 00:00:00 2001 From: Yun Liu Date: Mon, 18 Jul 2022 12:21:37 +0800 Subject: [PATCH 1/9] update ne3w3 rec --- internal/services/kusto/client/client.go | 5 + ...uster_managed_private_endpoint_resource.go | 42 ++++++ ..._managed_private_endpoint_resource_test.go | 1 + .../kusto/parse/managed_private_endpoints.go | 75 ++++++++++ .../parse/managed_private_endpoints_test.go | 128 ++++++++++++++++++ internal/services/kusto/registration.go | 21 +-- internal/services/kusto/resourceids.go | 1 + .../validate/managed_private_endpoints_id.go | 23 ++++ .../managed_private_endpoints_id_test.go | 88 ++++++++++++ 9 files changed, 374 insertions(+), 10 deletions(-) create mode 100644 internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go create mode 100644 internal/services/kusto/kusto_cluster_managed_private_endpoint_resource_test.go create mode 100644 internal/services/kusto/parse/managed_private_endpoints.go create mode 100644 internal/services/kusto/parse/managed_private_endpoints_test.go create mode 100644 internal/services/kusto/validate/managed_private_endpoints_id.go create mode 100644 internal/services/kusto/validate/managed_private_endpoints_id_test.go diff --git a/internal/services/kusto/client/client.go b/internal/services/kusto/client/client.go index 6e2badb7a925..551eff602bb0 100644 --- a/internal/services/kusto/client/client.go +++ b/internal/services/kusto/client/client.go @@ -8,6 +8,7 @@ import ( type Client struct { AttachedDatabaseConfigurationsClient *kusto.AttachedDatabaseConfigurationsClient ClustersClient *kusto.ClustersClient + ClusterManagedPrivateEndpointClient *kusto.ManagedPrivateEndpointsClient ClusterPrincipalAssignmentsClient *kusto.ClusterPrincipalAssignmentsClient DatabasesClient *kusto.DatabasesClient DataConnectionsClient *kusto.DataConnectionsClient @@ -19,6 +20,9 @@ func NewClient(o *common.ClientOptions) *Client { ClustersClient := kusto.NewClustersClientWithBaseURI(o.ResourceManagerEndpoint, o.SubscriptionId) o.ConfigureClient(&ClustersClient.Client, o.ResourceManagerAuthorizer) + ClusterManagedPrivateEndpointClient := kusto.NewManagedPrivateEndpointsClientWithBaseURI(o.ResourceManagerEndpoint, o.SubscriptionId) + o.ConfigureClient(&ClusterManagedPrivateEndpointClient.Client, o.ResourceManagerAuthorizer) + ClusterPrincipalAssignmentsClient := kusto.NewClusterPrincipalAssignmentsClientWithBaseURI(o.ResourceManagerEndpoint, o.SubscriptionId) o.ConfigureClient(&ClusterPrincipalAssignmentsClient.Client, o.ResourceManagerAuthorizer) @@ -39,6 +43,7 @@ func NewClient(o *common.ClientOptions) *Client { return &Client{ AttachedDatabaseConfigurationsClient: &AttachedDatabaseConfigurationsClient, ClustersClient: &ClustersClient, + ClusterManagedPrivateEndpointClient: &ClusterManagedPrivateEndpointClient, ClusterPrincipalAssignmentsClient: &ClusterPrincipalAssignmentsClient, DatabasesClient: &DatabasesClient, DataConnectionsClient: &DataConnectionsClient, diff --git a/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go b/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go new file mode 100644 index 000000000000..47cfeef0f893 --- /dev/null +++ b/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go @@ -0,0 +1,42 @@ +package kusto + +import ( + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-provider-azurerm/internal/services/datafactory/parse" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" + "time" +) + +func resourceKustoClusterManagedPrivateEndpoint() *pluginsdk.Resource { + return &pluginsdk.Resource{ + Create: resourceKustoClusterManagedPrivateEndpointCreateUpdate, + Read: resourceKustoClusterManagedPrivateEndpointRead, + Delete: resourceKustoClusterManagedPrivateEndpointDelete, + + Importer: pluginsdk.ImporterValidatingResourceId(func(id string) error { + _, err := parse.ManagedPrivateEndpointID(id) + return err + }), + + Timeouts: &pluginsdk.ResourceTimeout{ + Create: pluginsdk.DefaultTimeout(60 * time.Minute), + Read: pluginsdk.DefaultTimeout(5 * time.Minute), + Update: pluginsdk.DefaultTimeout(60 * time.Minute), + Delete: pluginsdk.DefaultTimeout(60 * time.Minute), + }, + + Schema: map[string]*pluginsdk.Schema{}, + } +} + +func resourceKustoClusterManagedPrivateEndpointDelete(data *schema.ResourceData, i interface{}) error { + +} + +func resourceKustoClusterManagedPrivateEndpointRead(data *schema.ResourceData, i interface{}) error { + +} + +func resourceKustoClusterManagedPrivateEndpointCreateUpdate(data *schema.ResourceData, i interface{}) error { + +} diff --git a/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource_test.go b/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource_test.go new file mode 100644 index 000000000000..b37fc7c0a8a1 --- /dev/null +++ b/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource_test.go @@ -0,0 +1 @@ +package kusto diff --git a/internal/services/kusto/parse/managed_private_endpoints.go b/internal/services/kusto/parse/managed_private_endpoints.go new file mode 100644 index 000000000000..fd19db83447e --- /dev/null +++ b/internal/services/kusto/parse/managed_private_endpoints.go @@ -0,0 +1,75 @@ +package parse + +// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten + +import ( + "fmt" + "strings" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +type ManagedPrivateEndpointsId struct { + SubscriptionId string + ResourceGroup string + ClusterName string + ManagedPrivateEndpointName string +} + +func NewManagedPrivateEndpointsID(subscriptionId, resourceGroup, clusterName, managedPrivateEndpointName string) ManagedPrivateEndpointsId { + return ManagedPrivateEndpointsId{ + SubscriptionId: subscriptionId, + ResourceGroup: resourceGroup, + ClusterName: clusterName, + ManagedPrivateEndpointName: managedPrivateEndpointName, + } +} + +func (id ManagedPrivateEndpointsId) String() string { + segments := []string{ + fmt.Sprintf("Managed Private Endpoint Name %q", id.ManagedPrivateEndpointName), + fmt.Sprintf("Cluster Name %q", id.ClusterName), + fmt.Sprintf("Resource Group %q", id.ResourceGroup), + } + segmentsStr := strings.Join(segments, " / ") + return fmt.Sprintf("%s: (%s)", "Managed Private Endpoints", segmentsStr) +} + +func (id ManagedPrivateEndpointsId) ID() string { + fmtString := "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Kusto/Clusters/%s/ManagedPrivateEndpoints/%s" + return fmt.Sprintf(fmtString, id.SubscriptionId, id.ResourceGroup, id.ClusterName, id.ManagedPrivateEndpointName) +} + +// ManagedPrivateEndpointsID parses a ManagedPrivateEndpoints ID into an ManagedPrivateEndpointsId struct +func ManagedPrivateEndpointsID(input string) (*ManagedPrivateEndpointsId, error) { + id, err := resourceids.ParseAzureResourceID(input) + if err != nil { + return nil, err + } + + resourceId := ManagedPrivateEndpointsId{ + SubscriptionId: id.SubscriptionID, + ResourceGroup: id.ResourceGroup, + } + + if resourceId.SubscriptionId == "" { + return nil, fmt.Errorf("ID was missing the 'subscriptions' element") + } + + if resourceId.ResourceGroup == "" { + return nil, fmt.Errorf("ID was missing the 'resourceGroups' element") + } + + if resourceId.ClusterName, err = id.PopSegment("Clusters"); err != nil { + return nil, err + } + if resourceId.ManagedPrivateEndpointName, err = id.PopSegment("ManagedPrivateEndpoints"); err != nil { + return nil, err + } + + if err := id.ValidateNoEmptySegments(input); err != nil { + return nil, err + } + + return &resourceId, nil +} diff --git a/internal/services/kusto/parse/managed_private_endpoints_test.go b/internal/services/kusto/parse/managed_private_endpoints_test.go new file mode 100644 index 000000000000..f640274df420 --- /dev/null +++ b/internal/services/kusto/parse/managed_private_endpoints_test.go @@ -0,0 +1,128 @@ +package parse + +// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten + +import ( + "testing" + + "github.com/hashicorp/go-azure-helpers/resourcemanager/resourceids" +) + +var _ resourceids.Id = ManagedPrivateEndpointsId{} + +func TestManagedPrivateEndpointsIDFormatter(t *testing.T) { + actual := NewManagedPrivateEndpointsID("12345678-1234-9876-4563-123456789012", "resGroup1", "cluster1", "endpoint1").ID() + expected := "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Kusto/Clusters/cluster1/ManagedPrivateEndpoints/endpoint1" + if actual != expected { + t.Fatalf("Expected %q but got %q", expected, actual) + } +} + +func TestManagedPrivateEndpointsID(t *testing.T) { + testData := []struct { + Input string + Error bool + Expected *ManagedPrivateEndpointsId + }{ + + { + // empty + Input: "", + Error: true, + }, + + { + // missing SubscriptionId + Input: "/", + Error: true, + }, + + { + // missing value for SubscriptionId + Input: "/subscriptions/", + Error: true, + }, + + { + // missing ResourceGroup + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/", + Error: true, + }, + + { + // missing value for ResourceGroup + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/", + Error: true, + }, + + { + // missing ClusterName + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Kusto/", + Error: true, + }, + + { + // missing value for ClusterName + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Kusto/Clusters/", + Error: true, + }, + + { + // missing ManagedPrivateEndpointName + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Kusto/Clusters/cluster1/", + Error: true, + }, + + { + // missing value for ManagedPrivateEndpointName + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Kusto/Clusters/cluster1/ManagedPrivateEndpoints/", + Error: true, + }, + + { + // valid + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Kusto/Clusters/cluster1/ManagedPrivateEndpoints/endpoint1", + Expected: &ManagedPrivateEndpointsId{ + SubscriptionId: "12345678-1234-9876-4563-123456789012", + ResourceGroup: "resGroup1", + ClusterName: "cluster1", + ManagedPrivateEndpointName: "endpoint1", + }, + }, + + { + // upper-cased + Input: "/SUBSCRIPTIONS/12345678-1234-9876-4563-123456789012/RESOURCEGROUPS/RESGROUP1/PROVIDERS/MICROSOFT.KUSTO/CLUSTERS/CLUSTER1/MANAGEDPRIVATEENDPOINTS/ENDPOINT1", + Error: true, + }, + } + + for _, v := range testData { + t.Logf("[DEBUG] Testing %q", v.Input) + + actual, err := ManagedPrivateEndpointsID(v.Input) + if err != nil { + if v.Error { + continue + } + + t.Fatalf("Expect a value but got an error: %s", err) + } + if v.Error { + t.Fatal("Expect an error but didn't get one") + } + + if actual.SubscriptionId != v.Expected.SubscriptionId { + t.Fatalf("Expected %q but got %q for SubscriptionId", v.Expected.SubscriptionId, actual.SubscriptionId) + } + if actual.ResourceGroup != v.Expected.ResourceGroup { + t.Fatalf("Expected %q but got %q for ResourceGroup", v.Expected.ResourceGroup, actual.ResourceGroup) + } + if actual.ClusterName != v.Expected.ClusterName { + t.Fatalf("Expected %q but got %q for ClusterName", v.Expected.ClusterName, actual.ClusterName) + } + if actual.ManagedPrivateEndpointName != v.Expected.ManagedPrivateEndpointName { + t.Fatalf("Expected %q but got %q for ManagedPrivateEndpointName", v.Expected.ManagedPrivateEndpointName, actual.ManagedPrivateEndpointName) + } + } +} diff --git a/internal/services/kusto/registration.go b/internal/services/kusto/registration.go index a29f38799f8b..fd4f6a9ecd79 100644 --- a/internal/services/kusto/registration.go +++ b/internal/services/kusto/registration.go @@ -36,15 +36,16 @@ func (r Registration) SupportedDataSources() map[string]*pluginsdk.Resource { // SupportedResources returns the supported Resources supported by this Service func (r Registration) SupportedResources() map[string]*pluginsdk.Resource { return map[string]*pluginsdk.Resource{ - "azurerm_kusto_cluster": resourceKustoCluster(), - "azurerm_kusto_cluster_customer_managed_key": resourceKustoClusterCustomerManagedKey(), - "azurerm_kusto_cluster_principal_assignment": resourceKustoClusterPrincipalAssignment(), - "azurerm_kusto_database": resourceKustoDatabase(), - "azurerm_kusto_database_principal_assignment": resourceKustoDatabasePrincipalAssignment(), - "azurerm_kusto_eventgrid_data_connection": resourceKustoEventGridDataConnection(), - "azurerm_kusto_eventhub_data_connection": resourceKustoEventHubDataConnection(), - "azurerm_kusto_iothub_data_connection": resourceKustoIotHubDataConnection(), - "azurerm_kusto_attached_database_configuration": resourceKustoAttachedDatabaseConfiguration(), - "azurerm_kusto_script": resourceKustoDatabaseScript(), + "azurerm_kusto_cluster": resourceKustoCluster(), + "azurerm_kusto_cluster_customer_managed_key": resourceKustoClusterCustomerManagedKey(), + "azurerm_kusto_cluster_managed_private_endpoint": resourceKustoClusterManagedPrivateEndpoint(), + "azurerm_kusto_cluster_principal_assignment": resourceKustoClusterPrincipalAssignment(), + "azurerm_kusto_database": resourceKustoDatabase(), + "azurerm_kusto_database_principal_assignment": resourceKustoDatabasePrincipalAssignment(), + "azurerm_kusto_eventgrid_data_connection": resourceKustoEventGridDataConnection(), + "azurerm_kusto_eventhub_data_connection": resourceKustoEventHubDataConnection(), + "azurerm_kusto_iothub_data_connection": resourceKustoIotHubDataConnection(), + "azurerm_kusto_attached_database_configuration": resourceKustoAttachedDatabaseConfiguration(), + "azurerm_kusto_script": resourceKustoDatabaseScript(), } } diff --git a/internal/services/kusto/resourceids.go b/internal/services/kusto/resourceids.go index fc01d2e8ce5d..9a619189f3c3 100644 --- a/internal/services/kusto/resourceids.go +++ b/internal/services/kusto/resourceids.go @@ -8,3 +8,4 @@ package kusto //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=DatabasePrincipalAssignment -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Kusto/Clusters/cluster1/Databases/database1/PrincipalAssignments/assignment1 //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=DataConnection -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Kusto/Clusters/cluster1/Databases/database1/DataConnections/connection1 //go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=Script -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Kusto/Clusters/cluster1/Databases/database1/Scripts/script1 +//go:generate go run ../../tools/generator-resource-id/main.go -path=./ -name=ManagedPrivateEndpoints -id=/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Kusto/Clusters/cluster1/ManagedPrivateEndpoints/endpoint1 diff --git a/internal/services/kusto/validate/managed_private_endpoints_id.go b/internal/services/kusto/validate/managed_private_endpoints_id.go new file mode 100644 index 000000000000..c6094925725a --- /dev/null +++ b/internal/services/kusto/validate/managed_private_endpoints_id.go @@ -0,0 +1,23 @@ +package validate + +// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten + +import ( + "fmt" + + "github.com/hashicorp/terraform-provider-azurerm/internal/services/kusto/parse" +) + +func ManagedPrivateEndpointsID(input interface{}, key string) (warnings []string, errors []error) { + v, ok := input.(string) + if !ok { + errors = append(errors, fmt.Errorf("expected %q to be a string", key)) + return + } + + if _, err := parse.ManagedPrivateEndpointsID(v); err != nil { + errors = append(errors, err) + } + + return +} diff --git a/internal/services/kusto/validate/managed_private_endpoints_id_test.go b/internal/services/kusto/validate/managed_private_endpoints_id_test.go new file mode 100644 index 000000000000..bb85b718708b --- /dev/null +++ b/internal/services/kusto/validate/managed_private_endpoints_id_test.go @@ -0,0 +1,88 @@ +package validate + +// NOTE: this file is generated via 'go:generate' - manual changes will be overwritten + +import "testing" + +func TestManagedPrivateEndpointsID(t *testing.T) { + cases := []struct { + Input string + Valid bool + }{ + + { + // empty + Input: "", + Valid: false, + }, + + { + // missing SubscriptionId + Input: "/", + Valid: false, + }, + + { + // missing value for SubscriptionId + Input: "/subscriptions/", + Valid: false, + }, + + { + // missing ResourceGroup + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/", + Valid: false, + }, + + { + // missing value for ResourceGroup + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/", + Valid: false, + }, + + { + // missing ClusterName + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Kusto/", + Valid: false, + }, + + { + // missing value for ClusterName + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Kusto/Clusters/", + Valid: false, + }, + + { + // missing ManagedPrivateEndpointName + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Kusto/Clusters/cluster1/", + Valid: false, + }, + + { + // missing value for ManagedPrivateEndpointName + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Kusto/Clusters/cluster1/ManagedPrivateEndpoints/", + Valid: false, + }, + + { + // valid + Input: "/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/resGroup1/providers/Microsoft.Kusto/Clusters/cluster1/ManagedPrivateEndpoints/endpoint1", + Valid: true, + }, + + { + // upper-cased + Input: "/SUBSCRIPTIONS/12345678-1234-9876-4563-123456789012/RESOURCEGROUPS/RESGROUP1/PROVIDERS/MICROSOFT.KUSTO/CLUSTERS/CLUSTER1/MANAGEDPRIVATEENDPOINTS/ENDPOINT1", + Valid: false, + }, + } + for _, tc := range cases { + t.Logf("[DEBUG] Testing Value %s", tc.Input) + _, errors := ManagedPrivateEndpointsID(tc.Input, "test") + valid := len(errors) == 0 + + if tc.Valid != valid { + t.Fatalf("Expected %t but got %t", tc.Valid, valid) + } + } +} From d71fb94e0005811cbc74d448bcf42f26c2919f4b Mon Sep 17 00:00:00 2001 From: Yun Liu Date: Mon, 18 Jul 2022 16:44:37 +0800 Subject: [PATCH 2/9] Complete kusto_cluster_managed_private_endpoint_resource.go --- ...uster_managed_private_endpoint_resource.go | 154 +++++++++++++++++- 1 file changed, 148 insertions(+), 6 deletions(-) diff --git a/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go b/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go index 47cfeef0f893..d993594fd1ab 100644 --- a/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go +++ b/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go @@ -1,9 +1,18 @@ package kusto import ( + "fmt" + "github.com/Azure/azure-sdk-for-go/services/kusto/mgmt/2022-02-01/kusto" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-provider-azurerm/internal/services/datafactory/parse" + "github.com/hashicorp/terraform-provider-azurerm/helpers/azure" + "github.com/hashicorp/terraform-provider-azurerm/helpers/tf" + "github.com/hashicorp/terraform-provider-azurerm/internal/clients" + "github.com/hashicorp/terraform-provider-azurerm/internal/services/kusto/parse" + "github.com/hashicorp/terraform-provider-azurerm/internal/services/kusto/validate" "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" + "github.com/hashicorp/terraform-provider-azurerm/internal/timeouts" + "github.com/hashicorp/terraform-provider-azurerm/utils" "time" ) @@ -11,10 +20,11 @@ func resourceKustoClusterManagedPrivateEndpoint() *pluginsdk.Resource { return &pluginsdk.Resource{ Create: resourceKustoClusterManagedPrivateEndpointCreateUpdate, Read: resourceKustoClusterManagedPrivateEndpointRead, + Update: resourceKustoClusterManagedPrivateEndpointCreateUpdate, Delete: resourceKustoClusterManagedPrivateEndpointDelete, Importer: pluginsdk.ImporterValidatingResourceId(func(id string) error { - _, err := parse.ManagedPrivateEndpointID(id) + _, err := parse.ManagedPrivateEndpointsID(id) return err }), @@ -25,18 +35,150 @@ func resourceKustoClusterManagedPrivateEndpoint() *pluginsdk.Resource { Delete: pluginsdk.DefaultTimeout(60 * time.Minute), }, - Schema: map[string]*pluginsdk.Schema{}, + Schema: map[string]*pluginsdk.Schema{ + "resource_group_name": azure.SchemaResourceGroupName(), + + "cluster_name": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validate.ClusterName, + }, + + "name": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "private_link_resource_id": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: azure.ValidateResourceID, + }, + + "group_id": { + Type: pluginsdk.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "private_link_resource_region": { + Type: pluginsdk.TypeString, + Optional: true, + ForceNew: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + + "request_message": { + Type: pluginsdk.TypeString, + Optional: true, + ForceNew: true, + ValidateFunc: validation.StringIsNotEmpty, + }, + }, } } -func resourceKustoClusterManagedPrivateEndpointDelete(data *schema.ResourceData, i interface{}) error { +func resourceKustoClusterManagedPrivateEndpointCreateUpdate(d *schema.ResourceData, meta interface{}) error { + client := meta.(*clients.Client).Kusto.ClusterManagedPrivateEndpointClient + subscriptionId := meta.(*clients.Client).Account.SubscriptionId + ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d) + defer cancel() + + id := parse.NewManagedPrivateEndpointsID(subscriptionId, d.Get("resource_group_name").(string), d.Get("cluster_name").(string), d.Get("name").(string)) + if d.IsNewResource() { + managedPrivateEndpoint, err := client.Get(ctx, id.ResourceGroup, id.ClusterName, id.ManagedPrivateEndpointName) + if err != nil { + if !utils.ResponseWasNotFound(managedPrivateEndpoint.Response) { + return fmt.Errorf("checking for presence of existing %s: %+v", id, err) + } + } + + if !utils.ResponseWasNotFound(managedPrivateEndpoint.Response) { + return tf.ImportAsExistsError("azurerm_kusto_cluster_managed_private_endpoint", id.ID()) + } + } + + managedPrivateEndpoint := kusto.ManagedPrivateEndpoint{ + ManagedPrivateEndpointProperties: &kusto.ManagedPrivateEndpointProperties{ + PrivateLinkResourceID: utils.String(d.Get("private_link_resource_id").(string)), + GroupID: utils.String(d.Get("group_id").(string)), + }, + } + + if v, ok := d.GetOk("private_link_resource_region"); ok { + managedPrivateEndpoint.PrivateLinkResourceRegion = utils.String(v.(string)) + } + + if v, ok := d.GetOk("request_message"); ok { + managedPrivateEndpoint.PrivateLinkResourceRegion = utils.String(v.(string)) + } + + future, err := client.CreateOrUpdate(ctx, id.ResourceGroup, id.ClusterName, id.ManagedPrivateEndpointName, managedPrivateEndpoint) + if err != nil { + return fmt.Errorf("creating/updating %s: %+v", id, err) + } + + if err = future.WaitForCompletionRef(ctx, client.Client); err != nil { + return fmt.Errorf("waiting for creation/update of %s: %+v", id, err) + } + d.SetId(id.ID()) + return resourceKustoClusterManagedPrivateEndpointRead(d, meta) } -func resourceKustoClusterManagedPrivateEndpointRead(data *schema.ResourceData, i interface{}) error { +func resourceKustoClusterManagedPrivateEndpointRead(d *schema.ResourceData, meta interface{}) error { + client := meta.(*clients.Client).Kusto.ClusterManagedPrivateEndpointClient + ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d) + defer cancel() + + id, err := parse.ManagedPrivateEndpointsID(d.Id()) + if err != nil { + return err + } + + resp, err := client.Get(ctx, id.ResourceGroup, id.ClusterName, id.ManagedPrivateEndpointName) + + d.Set("name", id.ManagedPrivateEndpointName) + d.Set("cluster_name", id.ClusterName) + d.Set("resource_group_name", id.ResourceGroup) + d.Set("private_link_resource_id", resp.PrivateLinkResourceID) + d.Set("group_id", resp.GroupID) + + if resp.PrivateLinkResourceRegion != nil { + d.Set("private_link_resource_region", resp.PrivateLinkResourceRegion) + } + + if resp.RequestMessage != nil { + d.Set("request_message", resp.RequestMessage) + } + return nil } -func resourceKustoClusterManagedPrivateEndpointCreateUpdate(data *schema.ResourceData, i interface{}) error { +func resourceKustoClusterManagedPrivateEndpointDelete(d *schema.ResourceData, meta interface{}) error { + client := meta.(*clients.Client).Kusto.ClusterManagedPrivateEndpointClient + ctx, cancel := timeouts.ForCreateUpdate(meta.(*clients.Client).StopContext, d) + defer cancel() + + id, err := parse.ManagedPrivateEndpointsID(d.Id()) + if err != nil { + return err + } + + future, err := client.Delete(ctx, id.ResourceGroup, id.ClusterName, id.ManagedPrivateEndpointName) + + if err != nil { + return fmt.Errorf("deleting %s: %+v", *id, err) + } + + if err = future.WaitForCompletionRef(ctx, client.Client); err != nil { + return fmt.Errorf("waiting for deletion of %s: %+v", *id, err) + } + return nil } From 28a0f6d5ee6d95c3e6cd8bcd1566344d3b050886 Mon Sep 17 00:00:00 2001 From: Yun Liu Date: Mon, 18 Jul 2022 17:08:57 +0800 Subject: [PATCH 3/9] Complete kusto_cluster_managed_private_endpoint_resource_test.go --- ...uster_managed_private_endpoint_resource.go | 6 +- ..._managed_private_endpoint_resource_test.go | 146 +++++++++++++++++- 2 files changed, 148 insertions(+), 4 deletions(-) diff --git a/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go b/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go index d993594fd1ab..894d60797a66 100644 --- a/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go +++ b/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go @@ -2,6 +2,8 @@ package kusto import ( "fmt" + "time" + "github.com/Azure/azure-sdk-for-go/services/kusto/mgmt/2022-02-01/kusto" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-provider-azurerm/helpers/azure" @@ -13,7 +15,6 @@ import ( "github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation" "github.com/hashicorp/terraform-provider-azurerm/internal/timeouts" "github.com/hashicorp/terraform-provider-azurerm/utils" - "time" ) func resourceKustoClusterManagedPrivateEndpoint() *pluginsdk.Resource { @@ -59,7 +60,7 @@ func resourceKustoClusterManagedPrivateEndpoint() *pluginsdk.Resource { ValidateFunc: azure.ValidateResourceID, }, - "group_id": { + "c": { Type: pluginsdk.TypeString, Required: true, ForceNew: true, @@ -76,7 +77,6 @@ func resourceKustoClusterManagedPrivateEndpoint() *pluginsdk.Resource { "request_message": { Type: pluginsdk.TypeString, Optional: true, - ForceNew: true, ValidateFunc: validation.StringIsNotEmpty, }, }, diff --git a/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource_test.go b/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource_test.go index b37fc7c0a8a1..abdfe92461d9 100644 --- a/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource_test.go +++ b/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource_test.go @@ -1 +1,145 @@ -package kusto +package kusto_test + +import ( + "context" + "fmt" + "testing" + + "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance" + "github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check" + "github.com/hashicorp/terraform-provider-azurerm/internal/clients" + "github.com/hashicorp/terraform-provider-azurerm/internal/services/kusto/parse" + "github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk" + "github.com/hashicorp/terraform-provider-azurerm/utils" +) + +type KustoClusterManagedEndpointResource struct{} + +func TestAccKustoClusterManagedEndpoint_basic(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_kusto_cluster_managed_private_endpoint", "test") + r := KustoClusterManagedEndpointResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.basic(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + check.That(data.ResourceName).Key("group_id").HasValue("blob"), + ), + }, + data.ImportStep()}, + ) +} + +func TestAccKustoClusterManagedEndpoint_complete(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_kusto_cluster_managed_private_endpoint", "test") + r := KustoClusterManagedEndpointResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.complete(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + check.That(data.ResourceName).Key("group_id").HasValue("blob"), + check.That(data.ResourceName).Key("request_message").HasValue("Please Approve"), + ), + }, + data.ImportStep()}, + ) +} + +func (KustoClusterManagedEndpointResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { + id, err := parse.ManagedPrivateEndpointsID(state.ID) + if err != nil { + return nil, err + } + + resp, err := clients.Kusto.ClusterManagedPrivateEndpointClient.Get(ctx, id.ResourceGroup, id.ClusterName, id.ManagedPrivateEndpointName) + if err != nil { + return nil, fmt.Errorf("retrieving %s: %v", id.String(), err) + } + + return utils.Bool(resp.ManagedPrivateEndpointProperties != nil), nil +} + +func (r KustoClusterManagedEndpointResource) basic(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "rg" { + name = "acctestRG-kusto-%d" + location = "%s" +} + +resource "azurerm_kusto_cluster" "test" { + name = "acctestkc%s" + location = azurerm_resource_group.rg.location + resource_group_name = azurerm_resource_group.rg.name + + sku { + name = "Dev(No SLA)_Standard_D11_v2" + capacity = 1 + } +} + +resource "azurerm_storage_account" "test" { + name = "acctestsa%s" + resource_group_name = azurerm_resource_group.rg.name + location = azurerm_resource_group.rg.location + account_tier = "Basic" + account_replication_type = "LRS" +} + +resource "azurerm_kusto_cluster_managed_private_endpoint" "test" { + name = "acctestmpe%d" + resource_group_name = azurerm_resource_group.rg.name + cluster_name = azurerm_kusto_cluster.test.name + private_link_resource_id = azurerm_storage_account.test.id + group_id = "blob" +} +`, data.RandomInteger, data.Locations.Primary, data.RandomString, data.RandomString, data.RandomInteger) +} + +func (r KustoClusterManagedEndpointResource) complete(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "rg" { + name = "acctestRG-kusto-%d" + location = "%s" +} + +resource "azurerm_kusto_cluster" "test" { + name = "acctestkc%s" + location = azurerm_resource_group.rg.location + resource_group_name = azurerm_resource_group.rg.name + + sku { + name = "Dev(No SLA)_Standard_D11_v2" + capacity = 1 + } +} + +resource "azurerm_storage_account" "test" { + name = "acctestsa%s" + resource_group_name = azurerm_resource_group.rg.name + location = azurerm_resource_group.rg.location + account_tier = "Basic" + account_replication_type = "LRS" +} + +resource "azurerm_kusto_cluster_managed_private_endpoint" "test" { + name = "acctestmpe%d" + resource_group_name = azurerm_resource_group.rg.name + cluster_name = azurerm_kusto_cluster.test.name + private_link_resource_id = azurerm_storage_account.test.id + private_link_resource_region = azurerm_storage_account.test.location + group_id = "blob" + request_message = "Please Approve" +} +`, data.RandomInteger, data.Locations.Primary, data.RandomString, data.RandomString, data.RandomInteger) +} From f7dcf48d350ff0016c389900fe6c57411d826fbe Mon Sep 17 00:00:00 2001 From: Yun Liu Date: Mon, 18 Jul 2022 17:57:52 +0800 Subject: [PATCH 4/9] Update kusto_cluster_managed_private_endpoint_resource_test.go and kusto_cluster_managed_private_endpoint_resource.go --- .../kusto/kusto_cluster_managed_private_endpoint_resource.go | 2 +- .../kusto_cluster_managed_private_endpoint_resource_test.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go b/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go index 894d60797a66..55f3e19d7037 100644 --- a/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go +++ b/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go @@ -60,7 +60,7 @@ func resourceKustoClusterManagedPrivateEndpoint() *pluginsdk.Resource { ValidateFunc: azure.ValidateResourceID, }, - "c": { + "group_id": { Type: pluginsdk.TypeString, Required: true, ForceNew: true, diff --git a/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource_test.go b/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource_test.go index abdfe92461d9..dc5f7629b06c 100644 --- a/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource_test.go +++ b/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource_test.go @@ -88,7 +88,7 @@ resource "azurerm_storage_account" "test" { name = "acctestsa%s" resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location - account_tier = "Basic" + account_tier = "Standard" account_replication_type = "LRS" } @@ -128,7 +128,7 @@ resource "azurerm_storage_account" "test" { name = "acctestsa%s" resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location - account_tier = "Basic" + account_tier = "Standard" account_replication_type = "LRS" } From ac7eb1334b960e046d903872bed8f750a6ef09c7 Mon Sep 17 00:00:00 2001 From: Yun Liu Date: Mon, 18 Jul 2022 21:07:25 +0800 Subject: [PATCH 5/9] Fix bug in kusto_cluster_managed_private_endpoint_resource.go --- .../kusto/kusto_cluster_managed_private_endpoint_resource.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go b/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go index 55f3e19d7037..79a7eac91806 100644 --- a/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go +++ b/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go @@ -115,7 +115,7 @@ func resourceKustoClusterManagedPrivateEndpointCreateUpdate(d *schema.ResourceDa } if v, ok := d.GetOk("request_message"); ok { - managedPrivateEndpoint.PrivateLinkResourceRegion = utils.String(v.(string)) + managedPrivateEndpoint.RequestMessage = utils.String(v.(string)) } future, err := client.CreateOrUpdate(ctx, id.ResourceGroup, id.ClusterName, id.ManagedPrivateEndpointName, managedPrivateEndpoint) From 6344dd4206bfab61e753e0bd01dae2cc774a3dd2 Mon Sep 17 00:00:00 2001 From: Yun Liu Date: Tue, 19 Jul 2022 09:49:33 +0800 Subject: [PATCH 6/9] Add kusto_cluster_managed_private_endpoint.html.markdown doc. --- ...ter_managed_private_endpoint.html.markdown | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 website/docs/r/kusto_cluster_managed_private_endpoint.html.markdown diff --git a/website/docs/r/kusto_cluster_managed_private_endpoint.html.markdown b/website/docs/r/kusto_cluster_managed_private_endpoint.html.markdown new file mode 100644 index 000000000000..2bd654781ab4 --- /dev/null +++ b/website/docs/r/kusto_cluster_managed_private_endpoint.html.markdown @@ -0,0 +1,86 @@ +--- +subcategory: "Data Explorer" +layout: "azurerm" +page_title: "Azure Resource Manager: azurerm_kusto_cluster_managed_private_endpoint" +description: |- +Manages a Managed Private Endpoint for a Kusto Cluster. +--- + +# azurerm_kusto_cluster_managed_private_endpoint + +Manages a Managed Private Endpoint for a Kusto Cluster. + +## Example Usage + +```hcl +data "azurerm_client_config" "current" {} + +resource "azurerm_resource_group" "example" { + name = "example-resources" + location = "West Europe" +} + +resource "azurerm_kusto_cluster" "example" { + name = "examplekc" + location = azurerm_resource_group.example.location + resource_group_name = azurerm_resource_group.example.name + + sku { + name = "Dev(No SLA)_Standard_D11_v2" + capacity = 1 + } +} + +resource "azurerm_storage_account" "example" { + name = "examplesa" + resource_group_name = azurerm_resource_group.example.name + location = azurerm_resource_group.example.location + account_tier = "Standard" + account_replication_type = "LRS" +} + +resource "azurerm_kusto_cluster_managed_private_endpoint" "example" { + name = "examplempe" + resource_group_name = azurerm_resource_group.example.name + cluster_name = azurerm_kusto_cluster.example.name + private_link_resource_id = azurerm_storage_account.example.id + private_link_resource_region = azurerm_storage_account.example.location + group_id = "blob" + request_message = "Please Approve" +} +``` + +## Arguments Reference + +The following arguments are supported: + +* `name` - (Required) The name of the Managed Private Endpoints to create. Changing this forces a new resource to be created. + +* `cluster_name` - (Required) The name of the Kusto Cluster. Changing this forces a new resource to be created. + +* `resource_group_name` - (Required) Specifies the Resource Group where the Kusto Cluster should exist. Changing this forces a new resource to be created. + +* `private_link_resource_id` - (Required) The ARM resource ID of the resource for which the managed private endpoint is created. Changing this forces a new resource to be created. + +* `group_id` - (Required) The group id in which the managed private endpoint is created. Changing this forces a new resource to be created. + +* `private_link_resource_region` - (Optional) The region of the resource to which the managed private endpoint is created. Changing this forces a new resource to be created. + +* `request_message` - (Optional) The user request message. + +## Timeouts + +The `timeouts` block allows you to specify [timeouts](https://www.terraform.io/docs/configuration/resources.html#timeouts) for certain actions: + +* `create` - (Defaults to 60 minutes) Used when creating the Kusto Cluster Customer Managed Key. +* `read` - (Defaults to 5 minutes) Used when retrieving the Kusto Cluster Customer Managed Key. +* `update` - (Defaults to 60 minutes) Used when updating the Kusto Cluster Customer Managed Key. +* `delete` - (Defaults to 60 minutes) Used when deleting the Kusto Cluster Customer Managed Key. + +## Import + +Managed Private Endpoint for a Kusto Cluster can be imported using the `resource id`, e.g. + +```shell +terraform import azurerm_kusto_cluster_managed_private_endpoint.example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/group1/providers/Microsoft.Kusto/Clusters/cluster1/managedPrivateEndpoints/managedPrivateEndpoint1 +``` \ No newline at end of file From 697690ed6a5f458f4f54ea308cba79df8c7244f9 Mon Sep 17 00:00:00 2001 From: Yun Liu Date: Tue, 19 Jul 2022 10:30:31 +0800 Subject: [PATCH 7/9] update doc for weblint failed --- .../docs/r/kusto_cluster_managed_private_endpoint.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/r/kusto_cluster_managed_private_endpoint.html.markdown b/website/docs/r/kusto_cluster_managed_private_endpoint.html.markdown index 2bd654781ab4..a358d14e0481 100644 --- a/website/docs/r/kusto_cluster_managed_private_endpoint.html.markdown +++ b/website/docs/r/kusto_cluster_managed_private_endpoint.html.markdown @@ -3,7 +3,7 @@ subcategory: "Data Explorer" layout: "azurerm" page_title: "Azure Resource Manager: azurerm_kusto_cluster_managed_private_endpoint" description: |- -Manages a Managed Private Endpoint for a Kusto Cluster. + Manages a Managed Private Endpoint for a Kusto Cluster. --- # azurerm_kusto_cluster_managed_private_endpoint From 193675e8769cbf96156956838780e08903fc6ee4 Mon Sep 17 00:00:00 2001 From: Yun Liu Date: Tue, 19 Jul 2022 10:43:47 +0800 Subject: [PATCH 8/9] update doc for error check --- .../kusto_cluster_managed_private_endpoint_resource.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go b/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go index 79a7eac91806..b681e3aec054 100644 --- a/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go +++ b/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource.go @@ -142,6 +142,13 @@ func resourceKustoClusterManagedPrivateEndpointRead(d *schema.ResourceData, meta } resp, err := client.Get(ctx, id.ResourceGroup, id.ClusterName, id.ManagedPrivateEndpointName) + if err != nil { + if utils.ResponseWasNotFound(resp.Response) { + d.SetId("") + return nil + } + return fmt.Errorf("retrieving %s: %+v", *id, err) + } d.Set("name", id.ManagedPrivateEndpointName) d.Set("cluster_name", id.ClusterName) From 05120f2e2c04cbdd5554ebb4f6b641033b2b5253 Mon Sep 17 00:00:00 2001 From: Yun Liu Date: Tue, 19 Jul 2022 10:47:32 +0800 Subject: [PATCH 9/9] update testing name --- ...ter_managed_private_endpoint_resource_test.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource_test.go b/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource_test.go index dc5f7629b06c..e94fc67f55d8 100644 --- a/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource_test.go +++ b/internal/services/kusto/kusto_cluster_managed_private_endpoint_resource_test.go @@ -13,11 +13,11 @@ import ( "github.com/hashicorp/terraform-provider-azurerm/utils" ) -type KustoClusterManagedEndpointResource struct{} +type KustoClusterManagedPrivateEndpointResource struct{} -func TestAccKustoClusterManagedEndpoint_basic(t *testing.T) { +func TestAccKustoClusterManagedPrivateEndpoint_basic(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_kusto_cluster_managed_private_endpoint", "test") - r := KustoClusterManagedEndpointResource{} + r := KustoClusterManagedPrivateEndpointResource{} data.ResourceTest(t, r, []acceptance.TestStep{ { @@ -31,9 +31,9 @@ func TestAccKustoClusterManagedEndpoint_basic(t *testing.T) { ) } -func TestAccKustoClusterManagedEndpoint_complete(t *testing.T) { +func TestAccKustoClusterManagedPrivateEndpoint_complete(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_kusto_cluster_managed_private_endpoint", "test") - r := KustoClusterManagedEndpointResource{} + r := KustoClusterManagedPrivateEndpointResource{} data.ResourceTest(t, r, []acceptance.TestStep{ { @@ -48,7 +48,7 @@ func TestAccKustoClusterManagedEndpoint_complete(t *testing.T) { ) } -func (KustoClusterManagedEndpointResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { +func (KustoClusterManagedPrivateEndpointResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { id, err := parse.ManagedPrivateEndpointsID(state.ID) if err != nil { return nil, err @@ -62,7 +62,7 @@ func (KustoClusterManagedEndpointResource) Exists(ctx context.Context, clients * return utils.Bool(resp.ManagedPrivateEndpointProperties != nil), nil } -func (r KustoClusterManagedEndpointResource) basic(data acceptance.TestData) string { +func (r KustoClusterManagedPrivateEndpointResource) basic(data acceptance.TestData) string { return fmt.Sprintf(` provider "azurerm" { features {} @@ -102,7 +102,7 @@ resource "azurerm_kusto_cluster_managed_private_endpoint" "test" { `, data.RandomInteger, data.Locations.Primary, data.RandomString, data.RandomString, data.RandomInteger) } -func (r KustoClusterManagedEndpointResource) complete(data acceptance.TestData) string { +func (r KustoClusterManagedPrivateEndpointResource) complete(data acceptance.TestData) string { return fmt.Sprintf(` provider "azurerm" { features {}