From baa067e4c2880b0fd3aae5424343dda908efa82f Mon Sep 17 00:00:00 2001 From: Aitor Murguzur Date: Mon, 19 Dec 2022 12:40:34 +0100 Subject: [PATCH] Add azurerm_powerbi_embedded (#36) * Add module and Fix #36 --- .github/workflows/powerbi-embedded.yml | 77 +++++++++++++++++++ README.md | 1 + terraform/powerbi-embedded/main.tf | 18 +++++ terraform/powerbi-embedded/outputs.tf | 6 ++ terraform/powerbi-embedded/test/locals.tf | 7 ++ terraform/powerbi-embedded/test/outputs.tf | 3 + .../powerbi-embedded/test/powerbi_embedded.tf | 22 ++++++ terraform/powerbi-embedded/test/providers.tf | 20 +++++ terraform/powerbi-embedded/test/unit_test.go | 30 ++++++++ terraform/powerbi-embedded/test/variables.tf | 10 +++ terraform/powerbi-embedded/variables.tf | 43 +++++++++++ 11 files changed, 237 insertions(+) create mode 100644 .github/workflows/powerbi-embedded.yml create mode 100644 terraform/powerbi-embedded/main.tf create mode 100644 terraform/powerbi-embedded/outputs.tf create mode 100644 terraform/powerbi-embedded/test/locals.tf create mode 100644 terraform/powerbi-embedded/test/outputs.tf create mode 100644 terraform/powerbi-embedded/test/powerbi_embedded.tf create mode 100644 terraform/powerbi-embedded/test/providers.tf create mode 100644 terraform/powerbi-embedded/test/unit_test.go create mode 100644 terraform/powerbi-embedded/test/variables.tf create mode 100644 terraform/powerbi-embedded/variables.tf diff --git a/.github/workflows/powerbi-embedded.yml b/.github/workflows/powerbi-embedded.yml new file mode 100644 index 00000000..f0ec0760 --- /dev/null +++ b/.github/workflows/powerbi-embedded.yml @@ -0,0 +1,77 @@ +name: Module:powerbi-embedded +on: + workflow_dispatch: + pull_request: + branches: + - main + paths: + - '.github/workflows/powerbi-embedded.yml' + - 'terraform/powerbi-embedded/**' + - '.github/actions/**' + +env: + terraform_workingdir: "terraform/powerbi-embedded" + GH_TOKEN: ${{ secrets.GH_TOKEN }} + ARM_CLIENT_ID: ${{ secrets.ARM_CLIENT_ID }} + ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }} + ARM_SUBSCRIPTION_ID: ${{ secrets.ARM_SUBSCRIPTION_ID }} + ARM_TENANT_ID: ${{ secrets.ARM_TENANT_ID }} + +jobs: + terraform-lint: + name: Run Terraform lint + runs-on: ubuntu-latest + defaults: + run: + working-directory: "${{ env.terraform_workingdir }}" + + steps: + - uses: actions/checkout@v2 + - uses: hashicorp/setup-terraform@v2 + + - name: Terraform fmt + id: fmt + run: terraform fmt -check + continue-on-error: false + + terraform-sec: + name: Run Terraform tfsec + needs: + - terraform-lint + runs-on: ubuntu-latest + + steps: + - name: Check out code + uses: actions/checkout@main + + - name: Run tfsec with reviewdog output on the PR + uses: ./.github/actions/run-terraform-sec + + terratest: + name: Run Terratest + needs: + - terraform-sec + runs-on: ubuntu-latest + + defaults: + run: + working-directory: "${{ env.terraform_workingdir }}/test" + + steps: + - name: Check out code + uses: actions/checkout@v3 + + - name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: 1.18.2 + + - name: Setup Dependencies + run: go mod init test && go mod tidy + env: + GOPATH: "/home/runner/work/azure-labs-modules/azure-labs-modules/${{ env.terraform_workingdir }}" + + - name: Unit-test + run: go test -v -timeout 45m + env: + GOPATH: "/home/runner/work/azure-labs-modules/azure-labs-modules/${{ env.terraform_workingdir }}" \ No newline at end of file diff --git a/README.md b/README.md index 94cf1786..5b6cb6ae 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,7 @@ This repository includes a library of curated [Terraform](https://registry.terra | [Network Security Group](https://github.com/Azure/azure-data-labs-modules/tree/main/terraform/network-security-group) |[![Module:network-security-group](https://github.com/Azure/azure-data-labs-modules/actions/workflows/network-security-group.yml/badge.svg)](https://github.com/Azure/azure-data-labs-modules/actions/workflows/network-security-group.yml) | | [Network Security Rule](https://github.com/Azure/azure-data-labs-modules/tree/main/terraform/network-security-rule) |[![Module:network-security-group](https://github.com/Azure/azure-data-labs-modules/actions/workflows/network-security-group.yml/badge.svg)](https://github.com/Azure/azure-data-labs-modules/actions/workflows/network-security-group.yml)| | [PostgreSQL Database](https://github.com/Azure/azure-data-labs-modules/tree/main/terraform/postgresql-database) | [![Module:postgresql-database](https://github.com/Azure/azure-data-labs-modules/actions/workflows/postgresql-database.yml/badge.svg)](https://github.com/Azure/azure-data-labs-modules/actions/workflows/postgresql-database.yml) | +| [Power BI Embedded](https://github.com/Azure/azure-data-labs-modules/tree/main/terraform/powerbi-embedded) | [![Module:powerbi-embedded](https://github.com/Azure/azure-data-labs-modules/actions/workflows/powerbi-embedded.yml/badge.svg)](https://github.com/Azure/azure-data-labs-modules/actions/workflows/powerbi-embedded.yml) | | [Private DNS Zone](https://github.com/Azure/azure-data-labs-modules/tree/main/terraform/private-dns-zone) | [![Module:private-dns-zone](https://github.com/Azure/azure-data-labs-modules/actions/workflows/private-dns-zone.yml/badge.svg)](https://github.com/Azure/azure-data-labs-modules/actions/workflows/private-dns-zone.yml) | | [Purview](https://github.com/Azure/azure-data-labs-modules/tree/main/terraform/purview) | [![Module:purview](https://github.com/Azure/azure-data-labs-modules/actions/workflows/purview.yml/badge.svg)](https://github.com/Azure/azure-data-labs-modules/actions/workflows/purview.yml) | | [Resource Group](https://github.com/Azure/azure-data-labs-modules/tree/main/terraform/resource-group) | [![Module:resource-group](https://github.com/Azure/azure-data-labs-modules/actions/workflows/resource-group.yml/badge.svg)](https://github.com/Azure/azure-data-labs-modules/actions/workflows/resource-group.yml) | diff --git a/terraform/powerbi-embedded/main.tf b/terraform/powerbi-embedded/main.tf new file mode 100644 index 00000000..f2823433 --- /dev/null +++ b/terraform/powerbi-embedded/main.tf @@ -0,0 +1,18 @@ +# https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/powerbi_embedded + +locals { + safe_basename = replace(var.basename, "-", "") +} + +resource "azurerm_powerbi_embedded" "adl_pbi" { + name = "pbi${local.safe_basename}" + location = var.location + resource_group_name = var.rg_name + sku_name = var.sku_name + + administrators = var.administrators + mode = var.mode + + count = var.module_enabled ? 1 : 0 + tags = var.tags +} \ No newline at end of file diff --git a/terraform/powerbi-embedded/outputs.tf b/terraform/powerbi-embedded/outputs.tf new file mode 100644 index 00000000..ba4a4455 --- /dev/null +++ b/terraform/powerbi-embedded/outputs.tf @@ -0,0 +1,6 @@ +output "id" { + value = ( + length(azurerm_powerbi_embedded.adl_pbi) > 0 ? + azurerm_powerbi_embedded.adl_pbi[0].id : "" + ) +} \ No newline at end of file diff --git a/terraform/powerbi-embedded/test/locals.tf b/terraform/powerbi-embedded/test/locals.tf new file mode 100644 index 00000000..b359afc0 --- /dev/null +++ b/terraform/powerbi-embedded/test/locals.tf @@ -0,0 +1,7 @@ +locals { + tags = { + Project = "Azure/azure-data-labs-modules" + Module = "powerbi-embedded" + Toolkit = "Terraform" + } +} \ No newline at end of file diff --git a/terraform/powerbi-embedded/test/outputs.tf b/terraform/powerbi-embedded/test/outputs.tf new file mode 100644 index 00000000..28c94c64 --- /dev/null +++ b/terraform/powerbi-embedded/test/outputs.tf @@ -0,0 +1,3 @@ +output "id" { + value = module.powerbi_embedded.id +} \ No newline at end of file diff --git a/terraform/powerbi-embedded/test/powerbi_embedded.tf b/terraform/powerbi-embedded/test/powerbi_embedded.tf new file mode 100644 index 00000000..329913d5 --- /dev/null +++ b/terraform/powerbi-embedded/test/powerbi_embedded.tf @@ -0,0 +1,22 @@ +module "powerbi_embedded" { + source = "../" + + basename = random_string.postfix.result + rg_name = module.local_rg.name + location = var.location + + administrators = ["aimurg@microsoft.com"] + + tags = {} +} + +# Modules dependencies + +module "local_rg" { + source = "../../resource-group" + + basename = random_string.postfix.result + location = var.location + + tags = local.tags +} \ No newline at end of file diff --git a/terraform/powerbi-embedded/test/providers.tf b/terraform/powerbi-embedded/test/providers.tf new file mode 100644 index 00000000..820d2209 --- /dev/null +++ b/terraform/powerbi-embedded/test/providers.tf @@ -0,0 +1,20 @@ +terraform { + backend "azurerm" { + resource_group_name = "rg-adl-terraform-state" + storage_account_name = "stadltfstate" + container_name = "default" + key = "powerbiembedded.terraform.tfstate" + } + + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "= 3.36.0" + } + } + +} + +provider "azurerm" { + features {} +} \ No newline at end of file diff --git a/terraform/powerbi-embedded/test/unit_test.go b/terraform/powerbi-embedded/test/unit_test.go new file mode 100644 index 00000000..a372c42b --- /dev/null +++ b/terraform/powerbi-embedded/test/unit_test.go @@ -0,0 +1,30 @@ +package test + +import ( + "testing" + "github.com/gruntwork-io/terratest/modules/terraform" + "github.com/stretchr/testify/assert" +) + +func TestModule(t *testing.T) { + t.Parallel() + + terraformOptions := &terraform.Options{ + TerraformDir: "./", + // VarFiles: []string{"terraform_unitest.tfvars"}, + } + + // At the end of the test, run `terraform destroy` to clean up any resources that were created + defer terraform.Destroy(t, terraformOptions) + + // Is used mainly for debugging, fail early if plan is not possible + terraform.InitAndPlan(t, terraformOptions) + + // This will run `terraform init` and `terraform apply` and fail the test if there are any errors + terraform.InitAndApply(t, terraformOptions) + + // Check if the outputs exist + assert := assert.New(t) + id := terraform.Output(t, terraformOptions, "id") + assert.NotNil(id) +} \ No newline at end of file diff --git a/terraform/powerbi-embedded/test/variables.tf b/terraform/powerbi-embedded/test/variables.tf new file mode 100644 index 00000000..b025435b --- /dev/null +++ b/terraform/powerbi-embedded/test/variables.tf @@ -0,0 +1,10 @@ +resource "random_string" "postfix" { + length = 8 + special = false + upper = false +} + +variable "location" { + type = string + default = "North Europe" +} \ No newline at end of file diff --git a/terraform/powerbi-embedded/variables.tf b/terraform/powerbi-embedded/variables.tf new file mode 100644 index 00000000..7566e2f8 --- /dev/null +++ b/terraform/powerbi-embedded/variables.tf @@ -0,0 +1,43 @@ +variable "basename" { + type = string + description = "Basename of the module" +} + +variable "rg_name" { + type = string + description = "Resource group name" +} + +variable "location" { + type = string + description = "Location of the resource group" +} + +variable "tags" { + type = map(string) + default = {} + description = "A mapping of tags which should be assigned to the deployed resource" +} + +variable "module_enabled" { + type = bool + description = "Variable to enable or disable the module" + default = true +} + +variable "sku_name" { + type = string + description = "Sets the PowerBI Embedded's pricing level's SKU" + default = "A1" +} + +variable "administrators" { + type = list(string) + description = "A set of administrator user identities, which manages the Power BI Embedded and must be a member user or a service principal in your AAD tenant" +} + +variable "mode" { + type = string + description = "Sets the PowerBI Embedded's mode" + default = "Gen1" +} \ No newline at end of file