Skip to content
This repository was archived by the owner on Apr 6, 2026. It is now read-only.

Commit 7f54562

Browse files
raffertyuydependabot[bot]arnaudlh
authored
dev_center_dev_box_definition implementation (#15)
* Bump the actions group with 3 updates (#1) Bumps the actions group with 3 updates: [actions/checkout](https://github.com/actions/checkout), [terraform-linters/setup-tflint](https://github.com/terraform-linters/setup-tflint) and [hashicorp/setup-terraform](https://github.com/hashicorp/setup-terraform). Updates `actions/checkout` from 3 to 4 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v3...v4) Updates `terraform-linters/setup-tflint` from 3 to 4 - [Release notes](https://github.com/terraform-linters/setup-tflint/releases) - [Commits](terraform-linters/setup-tflint@v3...v4) Updates `hashicorp/setup-terraform` from 2 to 3 - [Release notes](https://github.com/hashicorp/setup-terraform/releases) - [Changelog](https://github.com/hashicorp/setup-terraform/blob/main/CHANGELOG.md) - [Commits](hashicorp/setup-terraform@v2...v3) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '4' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions - dependency-name: terraform-linters/setup-tflint dependency-version: '4' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions - dependency-name: hashicorp/setup-terraform dependency-version: '3' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Arnaud Lheureux <arnaudlh@users.noreply.github.com> * implement dev_box_definitions for default images. * fix terraform fmt issue --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Arnaud Lheureux <arnaudlh@users.noreply.github.com>
1 parent 493c8ad commit 7f54562

File tree

9 files changed

+230
-8
lines changed

9 files changed

+230
-8
lines changed

.github/copilot-instructions.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,4 @@ resource "azurerm_key_vault" "kv" {
254254

255255
---
256256

257-
<!-- - @azure Rule - Use Azure Best Practices: When generating code for Azure, running terminal commands for Azure, or performing operations related to Azure, invoke your `get_azure_best_practices` tool if available. -->
258-
259257
This dev container includes the Azure CLI, GitHub CLI, Terraform CLI, TFLint, and Terragrunt pre-installed and available on the PATH, along with the Terraform and Azure extensions for development.

dev_center_dev_box_definitions.tf

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Dev Center Dev Box Definitions module instantiation
2+
module "dev_center_dev_box_definitions" {
3+
source = "./modules/dev_center_dev_box_definition"
4+
for_each = try(var.dev_center_dev_box_definitions, {})
5+
6+
global_settings = var.global_settings
7+
dev_box_definition = each.value
8+
dev_center_id = lookup(each.value, "dev_center_id", null) != null ? each.value.dev_center_id : module.dev_centers[each.value.dev_center.key].id
9+
location = lookup(each.value, "region", null) != null ? each.value.region : module.resource_groups[each.value.resource_group.key].location
10+
}

docs/module_guide.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -122,12 +122,12 @@ dev_center_dev_box_definitions = {
122122
dev_center = {
123123
key = "devcenter1"
124124
}
125-
image_reference = {
126-
offer = "windows-11"
127-
publisher = "microsoftwindowsdesktop"
128-
sku = "win11-22h2-ent"
129-
version = "latest"
125+
resource_group = {
126+
key = "rg1"
130127
}
128+
# Currently assumes that image definition is one of that's available in the default gallery
129+
# Format: /galleries/{gallery}/images/{image-definition}
130+
image_reference_id = "/galleries/default/images/microsoftwindowsdesktop_windows-ent-cpc_win11-24h2-ent-cpc-m365"
131131
sku_name = "general_i_8c32gb256ssd_v2"
132132
hibernate_support = {
133133
enabled = true

examples/dev_center/simple_case/configuration.tfvars

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,4 @@ dev_centers = {
2323
module = "dev_center"
2424
}
2525
}
26-
}
26+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
global_settings = {
2+
prefixes = ["dev"]
3+
random_length = 3
4+
passthrough = false
5+
use_slug = true
6+
}
7+
8+
resource_groups = {
9+
rg1 = {
10+
name = "devfactory-dc"
11+
region = "eastus"
12+
tags = {
13+
environment = "development"
14+
workload = "devbox-example"
15+
}
16+
}
17+
}
18+
19+
dev_centers = {
20+
devcenter1 = {
21+
name = "devcenter"
22+
resource_group = {
23+
key = "rg1"
24+
}
25+
identity = {
26+
type = "SystemAssigned"
27+
}
28+
tags = {
29+
environment = "demo"
30+
module = "dev_center"
31+
}
32+
}
33+
}
34+
35+
dev_center_dev_box_definitions = {
36+
definition1 = {
37+
name = "win11-dev"
38+
dev_center = {
39+
key = "devcenter1"
40+
}
41+
resource_group = {
42+
key = "rg1"
43+
}
44+
# Currently assumes that image definition is one of that's available in the default gallery
45+
# Format: /galleries/{gallery}/images/{image-definition}
46+
image_reference_id = "/galleries/default/images/microsoftwindowsdesktop_windows-ent-cpc_win11-24h2-ent-cpc-m365"
47+
sku_name = "general_i_8c32gb256ssd_v2"
48+
tags = {
49+
environment = "demo"
50+
module = "dev_center_dev_box_definition"
51+
}
52+
}
53+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
terraform {
2+
required_version = ">= 1.9.0"
3+
required_providers {
4+
azurecaf = {
5+
source = "aztfmod/azurecaf"
6+
version = "~> 1.2.0"
7+
}
8+
azurerm = {
9+
source = "hashicorp/azurerm"
10+
version = "~> 4.26.0"
11+
}
12+
}
13+
}
14+
15+
locals {}
16+
17+
resource "azurecaf_name" "dev_box_definition" {
18+
name = var.dev_box_definition.name
19+
resource_type = "general"
20+
prefixes = var.global_settings.prefixes
21+
random_length = var.global_settings.random_length
22+
clean_input = true
23+
passthrough = var.global_settings.passthrough
24+
use_slug = var.global_settings.use_slug
25+
}
26+
27+
resource "azurerm_dev_center_dev_box_definition" "dev_box_definition" {
28+
name = azurecaf_name.dev_box_definition.result
29+
location = var.location
30+
dev_center_id = var.dev_center_id
31+
image_reference_id = var.dev_box_definition.image_reference_id != null ? "${var.dev_center_id}${var.dev_box_definition.image_reference_id}" : null
32+
sku_name = try(var.dev_box_definition.sku_name, null)
33+
tags = try(var.tags, null)
34+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
output "id" {
2+
description = "The ID of the Dev Center Dev Box Definition"
3+
value = azurerm_dev_center_dev_box_definition.dev_box_definition.id
4+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
variable "global_settings" {
2+
description = "Global settings object"
3+
type = object({
4+
prefixes = optional(list(string))
5+
random_length = optional(number)
6+
passthrough = optional(bool)
7+
use_slug = optional(bool)
8+
})
9+
}
10+
11+
variable "dev_center_id" {
12+
description = "The ID of the Dev Center in which to create the project"
13+
type = string
14+
}
15+
16+
variable "location" {
17+
description = "The location/region where the Dev Center Project is created"
18+
type = string
19+
}
20+
21+
variable "tags" {
22+
description = "A mapping of tags to assign to the resource"
23+
type = map(string)
24+
default = {}
25+
}
26+
27+
variable "dev_box_definition" {
28+
description = "Configuration object for the Dev Box Definition"
29+
type = object({
30+
name = string
31+
image_reference_id = string
32+
sku_name = string
33+
tags = optional(map(string))
34+
})
35+
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
variables {
2+
global_settings = {
3+
prefixes = ["dev"]
4+
random_length = 3
5+
passthrough = false
6+
use_slug = true
7+
}
8+
9+
resource_groups = {
10+
rg1 = {
11+
name = "test-resource-group"
12+
region = "eastus"
13+
tags = {
14+
environment = "test"
15+
}
16+
}
17+
}
18+
19+
dev_centers = {
20+
devcenter1 = {
21+
name = "test-dev-center"
22+
resource_group = {
23+
key = "rg1"
24+
}
25+
tags = {
26+
environment = "test"
27+
module = "dev_center"
28+
}
29+
}
30+
}
31+
32+
dev_center_dev_box_definitions = {
33+
definition1 = {
34+
name = "test-dev-box-definition"
35+
dev_center = {
36+
key = "devcenter1"
37+
}
38+
resource_group = {
39+
key = "rg1"
40+
}
41+
image_reference_id = try(var.dev_box_definition.image_reference_id, null)
42+
sku_name = try(var.dev_box_definition.sku_name, null)
43+
tags = {
44+
environment = "test"
45+
module = "dev_center_dev_box_definition"
46+
}
47+
}
48+
}
49+
50+
// Empty variables required by the root module
51+
dev_center_galleries = {}
52+
dev_center_projects = {}
53+
dev_center_environment_types = {}
54+
dev_center_project_environment_types = {}
55+
dev_center_network_connections = {}
56+
dev_center_catalogs = {}
57+
shared_image_galleries = {}
58+
}
59+
60+
mock_provider "azurerm" {}
61+
62+
run "dev_box_definition_creation" {
63+
command = plan
64+
65+
module {
66+
source = "../../../"
67+
}
68+
69+
assert {
70+
condition = module.dev_center_dev_box_definitions["definition1"].name != ""
71+
error_message = "Dev Box Definition name should not be empty"
72+
}
73+
74+
assert {
75+
condition = contains(keys(module.dev_center_dev_box_definitions["definition1"]), "id")
76+
error_message = "Dev Box Definition ID should be present in module outputs"
77+
}
78+
79+
assert {
80+
condition = contains(keys(module.dev_center_dev_box_definitions["definition1"].tags), "environment")
81+
error_message = "Dev Box Definition tags did not contain environment tag"
82+
}
83+
84+
assert {
85+
condition = contains(keys(module.dev_center_dev_box_definitions["definition1"].tags), "module")
86+
error_message = "Dev Box Definition tags did not contain module tag"
87+
}
88+
}

0 commit comments

Comments
 (0)