Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upgrade Kusto SDK to 2020-02-15 from 2019-05-15 #6838

Merged
merged 2 commits into from Jun 16, 2020
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion azurerm/internal/services/kusto/client/client.go
@@ -1,7 +1,7 @@
package client

import (
"github.com/Azure/azure-sdk-for-go/services/kusto/mgmt/2019-05-15/kusto"
"github.com/Azure/azure-sdk-for-go/services/kusto/mgmt/2020-02-15/kusto"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/common"
)

Expand Down
27 changes: 11 additions & 16 deletions azurerm/internal/services/kusto/kusto_cluster_resource.go
Expand Up @@ -7,13 +7,14 @@ import (
"strings"
"time"

"github.com/Azure/azure-sdk-for-go/services/kusto/mgmt/2019-05-15/kusto"
"github.com/Azure/azure-sdk-for-go/services/kusto/mgmt/2020-02-15/kusto"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/helper/validation"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/tf"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/clients"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/features"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/kusto/parse"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/tags"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/timeouts"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils"
Expand Down Expand Up @@ -181,26 +182,23 @@ func resourceArmKustoClusterRead(d *schema.ResourceData, meta interface{}) error
ctx, cancel := timeouts.ForRead(meta.(*clients.Client).StopContext, d)
defer cancel()

id, err := azure.ParseAzureResourceID(d.Id())
id, err := parse.KustoClusterID(d.Id())
if err != nil {
return err
}

resourceGroup := id.ResourceGroup
name := id.Path["Clusters"]

clusterResponse, err := client.Get(ctx, resourceGroup, name)
clusterResponse, err := client.Get(ctx, id.ResourceGroup, id.Name)

if err != nil {
if utils.ResponseWasNotFound(clusterResponse.Response) {
d.SetId("")
return nil
}
return fmt.Errorf("Error retrieving Kusto Cluster %q (Resource Group %q): %+v", name, resourceGroup, err)
return fmt.Errorf("Error retrieving Kusto Cluster %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err)
}

d.Set("name", name)
d.Set("resource_group_name", resourceGroup)
d.Set("name", id.Name)
d.Set("resource_group_name", id.ResourceGroup)

if location := clusterResponse.Location; location != nil {
d.Set("location", azure.NormalizeLocation(*location))
Expand All @@ -225,21 +223,18 @@ func resourceArmKustoClusterDelete(d *schema.ResourceData, meta interface{}) err
ctx, cancel := timeouts.ForDelete(meta.(*clients.Client).StopContext, d)
defer cancel()

id, err := azure.ParseAzureResourceID(d.Id())
id, err := parse.KustoClusterID(d.Id())
if err != nil {
return err
}

resGroup := id.ResourceGroup
name := id.Path["Clusters"]

future, err := client.Delete(ctx, resGroup, name)
future, err := client.Delete(ctx, id.ResourceGroup, id.Name)
if err != nil {
return fmt.Errorf("Error deleting Kusto Cluster %q (Resource Group %q): %+v", name, resGroup, err)
return fmt.Errorf("Error deleting Kusto Cluster %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err)
}

if err = future.WaitForCompletionRef(ctx, client.Client); err != nil {
return fmt.Errorf("Error waiting for deletion of Kusto Cluster %q (Resource Group %q): %+v", name, resGroup, err)
return fmt.Errorf("Error waiting for deletion of Kusto Cluster %q (Resource Group %q): %+v", id.Name, id.ResourceGroup, err)
}

return nil
Expand Down
Expand Up @@ -6,13 +6,13 @@ import (
"strings"
"time"

"github.com/Azure/azure-sdk-for-go/services/kusto/mgmt/2019-05-15/kusto"
"github.com/Azure/azure-sdk-for-go/services/kusto/mgmt/2020-02-15/kusto"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/helper/validation"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/tf"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/clients"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/features"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/kusto/parse"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/timeouts"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils"
)
Expand Down Expand Up @@ -141,17 +141,26 @@ func resourceArmKustoDatabasePrincipalCreate(d *schema.ResourceData, meta interf
fqn = fmt.Sprintf("aadapp=%s;%s", objectID, clientID)
}

database, err := client.Get(ctx, resourceGroup, clusterName, databaseName)
resp, err := client.Get(ctx, resourceGroup, clusterName, databaseName)
if err != nil {
if utils.ResponseWasNotFound(database.Response) {
return fmt.Errorf("Kusto Database %q (Resource Group %q) was not found", databaseName, resourceGroup)
if utils.ResponseWasNotFound(resp.Response) {
return fmt.Errorf("Kusto Database %q (Resource Group %q, Cluster %q) was not found", databaseName, resourceGroup, clusterName)
}

return fmt.Errorf("Error loading Kusto Database %q (Resource Group %q): %+v", databaseName, resourceGroup, err)
return fmt.Errorf("Error loading Kusto Database %q (Resource Group %q, Cluster %q): %+v", databaseName, resourceGroup, clusterName, err)
}
if resp.Value == nil {
return fmt.Errorf("Error loading Kusto Database %q (Resource Group %q, Cluster %q): Invalid resource response", databaseName, resourceGroup, clusterName)
}

database, ok := resp.Value.AsReadWriteDatabase()
if !ok {
return fmt.Errorf("Exisiting resource is not a Kusto Read/Write Database %q (Resource Group %q, Cluster %q)", databaseName, resourceGroup, clusterName)
}
resourceId := fmt.Sprintf("%s/Role/%s/FQN/%s", *database.ID, role, fqn)

if features.ShouldResourcesBeImported() && d.IsNewResource() {
resourceID := fmt.Sprintf("%s/Role/%s/FQN/%s", *database.ID, role, fqn)

if d.IsNewResource() {
resp, err := client.ListPrincipals(ctx, resourceGroup, clusterName, databaseName)
if err != nil {
if !utils.ResponseWasNotFound(resp.Response) {
Expand All @@ -163,7 +172,7 @@ func resourceArmKustoDatabasePrincipalCreate(d *schema.ResourceData, meta interf
for _, principal := range *principals {
// kusto database principals are unique when looked at with name and role
if string(principal.Role) == role && principal.Fqn != nil && *principal.Fqn == fqn {
return tf.ImportAsExistsError("azurerm_kusto_database_principal", resourceId)
return tf.ImportAsExistsError("azurerm_kusto_database_principal", resourceID)
}
}
}
Expand All @@ -175,9 +184,7 @@ func resourceArmKustoDatabasePrincipalCreate(d *schema.ResourceData, meta interf
Fqn: utils.String(fqn),
// These three must be specified or the api returns `The request is invalid.`
// For more info: https://github.com/Azure/azure-sdk-for-go/issues/6547
Email: utils.String(""),
AppID: utils.String(""),
Name: utils.String(""),
Name: utils.String(""),
}

principals := []kusto.DatabasePrincipal{kustoPrincipal}
Expand All @@ -189,14 +196,14 @@ func resourceArmKustoDatabasePrincipalCreate(d *schema.ResourceData, meta interf
return fmt.Errorf("Error creating Kusto Database Principal (Resource Group %q, Cluster %q): %+v", resourceGroup, clusterName, err)
}

resp, err := client.ListPrincipals(ctx, resourceGroup, clusterName, databaseName)
principalsResp, err := client.ListPrincipals(ctx, resourceGroup, clusterName, databaseName)
if err != nil {
if !utils.ResponseWasNotFound(resp.Response) {
if !utils.ResponseWasNotFound(principalsResp.Response) {
return fmt.Errorf("Error checking for presence of existing Kusto Database Principals (Resource Group %q, Cluster %q): %s", resourceGroup, clusterName, err)
}
}

d.SetId(resourceId)
d.SetId(resourceID)

return resourceArmKustoDatabasePrincipalRead(d, meta)
}
Expand All @@ -206,39 +213,33 @@ func resourceArmKustoDatabasePrincipalRead(d *schema.ResourceData, meta interfac
ctx, cancel := timeouts.ForRead(meta.(*clients.Client).StopContext, d)
defer cancel()

id, err := azure.ParseAzureResourceID(d.Id())
id, err := parse.KustoDatabasePrincipalID(d.Id())
if err != nil {
return err
}

resourceGroup := id.ResourceGroup
clusterName := id.Path["Clusters"]
databaseName := id.Path["Databases"]
role := id.Path["Role"]
fqn := id.Path["FQN"]

databaseResponse, err := client.Get(ctx, resourceGroup, clusterName, databaseName)
resp, err := client.Get(ctx, id.ResourceGroup, id.Cluster, id.Database)
if err != nil {
if utils.ResponseWasNotFound(databaseResponse.Response) {
if utils.ResponseWasNotFound(resp.Response) {
d.SetId("")
return nil
}
return fmt.Errorf("Error retrieving Kusto Database %q (Resource Group %q, Cluster %q): %+v", databaseName, resourceGroup, clusterName, err)
return fmt.Errorf("Error retrieving Kusto Database %q (Resource Group %q, Cluster %q): %+v", id.Database, id.ResourceGroup, id.Cluster, err)
}

resp, err := client.ListPrincipals(ctx, resourceGroup, clusterName, databaseName)
databasePrincipals, err := client.ListPrincipals(ctx, id.ResourceGroup, id.Cluster, id.Database)
if err != nil {
if !utils.ResponseWasNotFound(resp.Response) {
return fmt.Errorf("Error checking for presence of existing Kusto Database Principals %q (Resource Group %q, Cluster %q): %s", id, resourceGroup, clusterName, err)
if !utils.ResponseWasNotFound(databasePrincipals.Response) {
return fmt.Errorf("Error checking for presence of existing Kusto Database Principals %q (Resource Group %q, Cluster %q): %s", id, id.ResourceGroup, id.Cluster, err)
}
}

principal := kusto.DatabasePrincipal{}
found := false
if principals := resp.Value; principals != nil {
if principals := databasePrincipals.Value; principals != nil {
for _, currPrincipal := range *principals {
// kusto database principals are unique when looked at with fqn and role
if string(currPrincipal.Role) == role && currPrincipal.Fqn != nil && *currPrincipal.Fqn == fqn {
if string(currPrincipal.Role) == id.Role && currPrincipal.Fqn != nil && *currPrincipal.Fqn == id.Name {
principal = currPrincipal
found = true
break
Expand All @@ -252,9 +253,9 @@ func resourceArmKustoDatabasePrincipalRead(d *schema.ResourceData, meta interfac
return nil
}

d.Set("resource_group_name", resourceGroup)
d.Set("cluster_name", clusterName)
d.Set("database_name", databaseName)
d.Set("resource_group_name", id.ResourceGroup)
d.Set("cluster_name", id.Cluster)
d.Set("database_name", id.Database)

d.Set("role", string(principal.Role))
d.Set("type", string(principal.Type))
Expand All @@ -271,13 +272,13 @@ func resourceArmKustoDatabasePrincipalRead(d *schema.ResourceData, meta interfac
d.Set("name", principal.Name)
}

splitFQN := strings.Split(fqn, "=")
splitFQN := strings.Split(id.Name, "=")
if len(splitFQN) != 2 {
return fmt.Errorf("Expected `fqn` to be in the format aadtype=objectid:clientid but got: %q", fqn)
return fmt.Errorf("Expected `fqn` to be in the format aadtype=objectid:clientid but got: %q", id.Name)
}
splitIDs := strings.Split(splitFQN[1], ";")
if len(splitIDs) != 2 {
return fmt.Errorf("Expected `fqn` to be in the format aadtype=objectid:clientid but got: %q", fqn)
return fmt.Errorf("Expected `fqn` to be in the format aadtype=objectid:clientid but got: %q", id.Name)
}
d.Set("object_id", splitIDs[0])
d.Set("client_id", splitIDs[1])
Expand All @@ -290,20 +291,14 @@ func resourceArmKustoDatabasePrincipalDelete(d *schema.ResourceData, meta interf
ctx, cancel := timeouts.ForDelete(meta.(*clients.Client).StopContext, d)
defer cancel()

id, err := azure.ParseAzureResourceID(d.Id())
id, err := parse.KustoDatabasePrincipalID(d.Id())
if err != nil {
return err
}

resGroup := id.ResourceGroup
clusterName := id.Path["Clusters"]
databaseName := id.Path["Databases"]
role := id.Path["Role"]
fqn := id.Path["FQN"]

kustoPrincipal := kusto.DatabasePrincipal{
Role: kusto.DatabasePrincipalRole(role),
Fqn: utils.String(fqn),
Role: kusto.DatabasePrincipalRole(id.Role),
Fqn: utils.String(id.Name),
Type: kusto.DatabasePrincipalType(d.Get("type").(string)),
// These three must be specified or the api returns `The request is invalid.`
// For more info: https://github.com/Azure/azure-sdk-for-go/issues/6547
Expand All @@ -317,8 +312,8 @@ func resourceArmKustoDatabasePrincipalDelete(d *schema.ResourceData, meta interf
Value: &principals,
}

if _, err = client.RemovePrincipals(ctx, resGroup, clusterName, databaseName, request); err != nil {
return fmt.Errorf("Error deleting Kusto Database Principal %q (Resource Group %q, Cluster %q, Database %q): %+v", id, resGroup, clusterName, databaseName, err)
if _, err = client.RemovePrincipals(ctx, id.ResourceGroup, id.Cluster, id.Database, request); err != nil {
return fmt.Errorf("Error deleting Kusto Database Principal %q (Resource Group %q, Cluster %q, Database %q): %+v", id, id.ResourceGroup, id.Cluster, id.Database, err)
}

return nil
Expand Down