Skip to content

Commit

Permalink
Upgrade Kusto SDK to 2020-02-15
Browse files Browse the repository at this point in the history
  • Loading branch information
jrauschenbusch committed May 24, 2020
1 parent c89a117 commit 42b8831
Show file tree
Hide file tree
Showing 22 changed files with 3,514 additions and 451 deletions.
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,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/timeouts"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils"
)
Expand Down Expand Up @@ -141,15 +142,21 @@ func resourceArmKustoDatabasePrincipalCreate(d *schema.ResourceData, meta interf
fqn = fmt.Sprintf("aadapp=%s;%s", objectID, clientID)
}

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

return fmt.Errorf("Error loading Kusto Database %q (Resource Group %q): %+v", databaseName, resourceGroup, err)
}
resourceId := fmt.Sprintf("%s/Role/%s/FQN/%s", *database.ID, role, fqn)

if databaseModel.Value == nil {
return fmt.Errorf("Kusto Database %q was not found ", databaseName)
}

database, _ := databaseModel.Value.AsDatabase()
resourceID := fmt.Sprintf("%s/Role/%s/FQN/%s", *database.ID, role, fqn)

if features.ShouldResourcesBeImported() && d.IsNewResource() {
resp, err := client.ListPrincipals(ctx, resourceGroup, clusterName, databaseName)
Expand All @@ -163,7 +170,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 @@ -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)
databaseModel, err := client.Get(ctx, id.ResourceGroup, id.Cluster, id.Database)
if err != nil {
if utils.ResponseWasNotFound(databaseResponse.Response) {
if utils.ResponseWasNotFound(databaseModel.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

0 comments on commit 42b8831

Please sign in to comment.