Skip to content

Commit

Permalink
Add azurerm_powerbi_embedded (#36)
Browse files Browse the repository at this point in the history
* Add module and Fix #36
  • Loading branch information
murggu committed Dec 19, 2022
1 parent d19ff87 commit baa067e
Show file tree
Hide file tree
Showing 11 changed files with 237 additions and 0 deletions.
77 changes: 77 additions & 0 deletions .github/workflows/powerbi-embedded.yml
Original file line number Diff line number Diff line change
@@ -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 }}"
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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) |
Expand Down
18 changes: 18 additions & 0 deletions terraform/powerbi-embedded/main.tf
Original file line number Diff line number Diff line change
@@ -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
}
6 changes: 6 additions & 0 deletions terraform/powerbi-embedded/outputs.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
output "id" {
value = (
length(azurerm_powerbi_embedded.adl_pbi) > 0 ?
azurerm_powerbi_embedded.adl_pbi[0].id : ""
)
}
7 changes: 7 additions & 0 deletions terraform/powerbi-embedded/test/locals.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
locals {
tags = {
Project = "Azure/azure-data-labs-modules"
Module = "powerbi-embedded"
Toolkit = "Terraform"
}
}
3 changes: 3 additions & 0 deletions terraform/powerbi-embedded/test/outputs.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
output "id" {
value = module.powerbi_embedded.id
}
22 changes: 22 additions & 0 deletions terraform/powerbi-embedded/test/powerbi_embedded.tf
Original file line number Diff line number Diff line change
@@ -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
}
20 changes: 20 additions & 0 deletions terraform/powerbi-embedded/test/providers.tf
Original file line number Diff line number Diff line change
@@ -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 {}
}
30 changes: 30 additions & 0 deletions terraform/powerbi-embedded/test/unit_test.go
Original file line number Diff line number Diff line change
@@ -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)
}
10 changes: 10 additions & 0 deletions terraform/powerbi-embedded/test/variables.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
resource "random_string" "postfix" {
length = 8
special = false
upper = false
}

variable "location" {
type = string
default = "North Europe"
}
43 changes: 43 additions & 0 deletions terraform/powerbi-embedded/variables.tf
Original file line number Diff line number Diff line change
@@ -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"
}

0 comments on commit baa067e

Please sign in to comment.