Skip to content

Commit

Permalink
azurerm_powerbi_embedded - add mode attribute to support Gen2 (#12394)
Browse files Browse the repository at this point in the history
* Update PBI SDK to 2021-01-01

* mode for powrebi embedded

* Doc

* Linting

* Tidy up powerbi tests

* Fix tflint

Co-authored-by: Tom Bamford <[email protected]>
  • Loading branch information
kosinsky and manicminer authored Jul 14, 2021
1 parent bf0bcf3 commit 5781b12
Show file tree
Hide file tree
Showing 16 changed files with 1,152 additions and 211 deletions.
2 changes: 1 addition & 1 deletion azurerm/internal/services/powerbi/client/client.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package client

import (
"github.com/Azure/azure-sdk-for-go/services/powerbidedicated/mgmt/2017-10-01/powerbidedicated"
"github.com/Azure/azure-sdk-for-go/services/powerbidedicated/mgmt/2021-01-01/powerbidedicated"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/common"
)

Expand Down
23 changes: 20 additions & 3 deletions azurerm/internal/services/powerbi/powerbi_embedded_resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"log"
"time"

"github.com/Azure/azure-sdk-for-go/services/powerbidedicated/mgmt/2017-10-01/powerbidedicated"
"github.com/Azure/azure-sdk-for-go/services/powerbidedicated/mgmt/2021-01-01/powerbidedicated"
"github.com/hashicorp/go-azure-helpers/response"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/tf"
Expand Down Expand Up @@ -72,6 +72,17 @@ func resourcePowerBIEmbedded() *pluginsdk.Resource {
},
},

"mode": {
Type: pluginsdk.TypeString,
Optional: true,
Default: string(powerbidedicated.ModeGen1),
ForceNew: true,
ValidateFunc: validation.StringInSlice([]string{
string(powerbidedicated.ModeGen1),
string(powerbidedicated.ModeGen2),
}, false),
},

"tags": tags.Schema(),
},
}
Expand All @@ -98,6 +109,7 @@ func resourcePowerBIEmbeddedCreate(d *pluginsdk.ResourceData, meta interface{})
location := azure.NormalizeLocation(d.Get("location").(string))
administrators := d.Get("administrators").(*pluginsdk.Set).List()
skuName := d.Get("sku_name").(string)
mode := d.Get("mode").(string)
t := d.Get("tags").(map[string]interface{})

parameters := powerbidedicated.DedicatedCapacity{
Expand All @@ -106,8 +118,9 @@ func resourcePowerBIEmbeddedCreate(d *pluginsdk.ResourceData, meta interface{})
Administration: &powerbidedicated.DedicatedCapacityAdministrators{
Members: utils.ExpandStringSlice(administrators),
},
Mode: powerbidedicated.Mode(mode),
},
Sku: &powerbidedicated.ResourceSku{
Sku: &powerbidedicated.CapacitySku{
Name: utils.String(skuName),
},
Tags: tags.Expand(t),
Expand Down Expand Up @@ -162,6 +175,8 @@ func resourcePowerBIEmbeddedRead(d *pluginsdk.ResourceData, meta interface{}) er
if err := d.Set("administrators", utils.FlattenStringSlice(props.Administration.Members)); err != nil {
return fmt.Errorf("Error setting `administration`: %+v", err)
}

d.Set("mode", props.Mode)
}

skuName := ""
Expand All @@ -182,15 +197,17 @@ func resourcePowerBIEmbeddedUpdate(d *pluginsdk.ResourceData, meta interface{})
resourceGroup := d.Get("resource_group_name").(string)
administrators := d.Get("administrators").(*pluginsdk.Set).List()
skuName := d.Get("sku_name").(string)
mode := d.Get("mode").(string)
t := d.Get("tags").(map[string]interface{})

parameters := powerbidedicated.DedicatedCapacityUpdateParameters{
DedicatedCapacityMutableProperties: &powerbidedicated.DedicatedCapacityMutableProperties{
Administration: &powerbidedicated.DedicatedCapacityAdministrators{
Members: utils.ExpandStringSlice(administrators),
},
Mode: powerbidedicated.Mode(mode),
},
Sku: &powerbidedicated.ResourceSku{
Sku: &powerbidedicated.CapacitySku{
Name: utils.String(skuName),
},
Tags: tags.Expand(t),
Expand Down
136 changes: 80 additions & 56 deletions azurerm/internal/services/powerbi/powerbi_embedded_resource_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,70 +31,81 @@ func TestAccPowerBIEmbedded_basic(t *testing.T) {
})
}

func TestAccPowerBIEmbedded_requiresImport(t *testing.T) {
func TestAccPowerBIEmbedded_complete(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_powerbi_embedded", "test")
r := PowerBIEmbeddedResource{}

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.basic(data),
Config: r.complete(data),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
),
},
{
Config: r.requiresImport(data),
ExpectError: acceptance.RequiresImportError("azurerm_powerbi_embedded"),
},
data.ImportStep(),
})
}

func TestAccPowerBIEmbedded_complete(t *testing.T) {
func TestAccPowerBIEmbedded_update(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_powerbi_embedded", "test")
r := PowerBIEmbeddedResource{}

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.basic(data),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
),
},
data.ImportStep(),
{
Config: r.complete(data),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
check.That(data.ResourceName).Key("sku_name").HasValue("A2"),
check.That(data.ResourceName).Key("tags.ENV").HasValue("Test"),
),
},
data.ImportStep(),
{
Config: r.basic(data),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
),
},
data.ImportStep(),
})
}

func TestAccPowerBIEmbedded_update(t *testing.T) {
func TestAccPowerBIEmbedded_gen2(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_powerbi_embedded", "test")
r := PowerBIEmbeddedResource{}

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.basic(data),
Config: r.gen2(data),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
check.That(data.ResourceName).Key("sku_name").HasValue("A1"),
check.That(data.ResourceName).Key("mode").HasValue("Gen2"),
),
},
data.ImportStep(),
})
}

func TestAccPowerBIEmbedded_requiresImport(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_powerbi_embedded", "test")
r := PowerBIEmbeddedResource{}

data.ResourceTest(t, r, []acceptance.TestStep{
{
Config: r.complete(data),
Config: r.basic(data),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
check.That(data.ResourceName).Key("sku_name").HasValue("A2"),
),
},
data.ImportStep(),
{
Config: r.basic(data),
Check: acceptance.ComposeTestCheckFunc(
check.That(data.ResourceName).ExistsInAzure(r),
check.That(data.ResourceName).Key("sku_name").HasValue("A1"),
),
Config: r.requiresImport(data),
ExpectError: acceptance.RequiresImportError("azurerm_powerbi_embedded"),
},
data.ImportStep(),
})
}

Expand All @@ -112,65 +123,78 @@ func (PowerBIEmbeddedResource) Exists(ctx context.Context, clients *clients.Clie
return utils.Bool(resp.DedicatedCapacityProperties != nil), nil
}

func (PowerBIEmbeddedResource) basic(data acceptance.TestData) string {
template := PowerBIEmbeddedResource{}.template(data)
func (PowerBIEmbeddedResource) template(data acceptance.TestData) string {
return fmt.Sprintf(`
%s
provider "azurerm" {
features {}
}
resource "azurerm_powerbi_embedded" "test" {
name = "acctestpowerbi%d"
location = "${azurerm_resource_group.test.location}"
resource_group_name = "${azurerm_resource_group.test.name}"
sku_name = "A1"
administrators = ["${data.azurerm_client_config.test.object_id}"]
resource "azurerm_resource_group" "test" {
name = "acctestRG-powerbi-%[1]d"
location = "%[2]s"
}
`, template, data.RandomInteger)
data "azurerm_client_config" "test" {}
`, data.RandomInteger, data.Locations.Primary)
}

func (r PowerBIEmbeddedResource) requiresImport(data acceptance.TestData) string {
func (r PowerBIEmbeddedResource) basic(data acceptance.TestData) string {
return fmt.Sprintf(`
%s
%[1]s
resource "azurerm_powerbi_embedded" "import" {
name = "${azurerm_powerbi_embedded.test.name}"
location = "${azurerm_powerbi_embedded.test.location}"
resource_group_name = "${azurerm_resource_group.test.name}"
resource "azurerm_powerbi_embedded" "test" {
name = "acctestpowerbi%[2]d"
location = azurerm_resource_group.test.location
resource_group_name = azurerm_resource_group.test.name
sku_name = "A1"
administrators = ["${data.azurerm_client_config.test.object_id}"]
administrators = [data.azurerm_client_config.test.object_id]
}
`, r.basic(data))
`, r.template(data), data.RandomInteger)
}

func (PowerBIEmbeddedResource) complete(data acceptance.TestData) string {
template := PowerBIEmbeddedResource{}.template(data)
func (r PowerBIEmbeddedResource) complete(data acceptance.TestData) string {
return fmt.Sprintf(`
%s
%[1]s
resource "azurerm_powerbi_embedded" "test" {
name = "acctestpowerbi%d"
location = "${azurerm_resource_group.test.location}"
resource_group_name = "${azurerm_resource_group.test.name}"
name = "acctestpowerbi%[2]d"
location = azurerm_resource_group.test.location
resource_group_name = azurerm_resource_group.test.name
sku_name = "A2"
administrators = ["${data.azurerm_client_config.test.object_id}"]
administrators = [data.azurerm_client_config.test.object_id]
tags = {
ENV = "Test"
}
}
`, template, data.RandomInteger)
`, r.template(data), data.RandomInteger)
}

func (PowerBIEmbeddedResource) template(data acceptance.TestData) string {
func (r PowerBIEmbeddedResource) gen2(data acceptance.TestData) string {
return fmt.Sprintf(`
provider "azurerm" {
features {}
}
%[1]s
resource "azurerm_resource_group" "test" {
name = "acctestRG-powerbi-%d"
location = "%s"
resource "azurerm_powerbi_embedded" "test" {
name = "acctestpowerbi%[2]d"
location = azurerm_resource_group.test.location
resource_group_name = azurerm_resource_group.test.name
sku_name = "A1"
administrators = [data.azurerm_client_config.test.object_id]
mode = "Gen2"
}
`, r.template(data), data.RandomInteger)
}

data "azurerm_client_config" "test" {}
`, data.RandomInteger, data.Locations.Primary)
func (r PowerBIEmbeddedResource) requiresImport(data acceptance.TestData) string {
return fmt.Sprintf(`
%[1]s
resource "azurerm_powerbi_embedded" "import" {
name = azurerm_powerbi_embedded.test.name
location = azurerm_powerbi_embedded.test.location
resource_group_name = azurerm_resource_group.test.name
sku_name = "A1"
administrators = [data.azurerm_client_config.test.object_id]
}
`, r.basic(data))
}

This file was deleted.

This file was deleted.

Loading

0 comments on commit 5781b12

Please sign in to comment.