Skip to content

Commit 38096c8

Browse files
authored
New resource storage management policy and attributes (#26)
* feat: Storage account resource now includes all attributes from newest azurerm provider version feat: Module now inclues a resource for storage management policy * feat: Examples now include storage management policy
1 parent 4a94f69 commit 38096c8

7 files changed

Lines changed: 331 additions & 13 deletions

File tree

examples/apply_main.tf

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,47 @@ module "storage" {
2727
ip_rules = ["172.0.0.2"]
2828
virtual_network_subnet_ids = [module.network.subnet["snet-app-mms"].id]
2929
}
30+
blob_properties = {
31+
last_access_time_enabled = true
32+
}
33+
tags = {
34+
project = "mms-github"
35+
environment = terraform.workspace
36+
managed-by = "terraform"
37+
}
38+
}
39+
}
40+
storage_management_policy = {
41+
policy = {
42+
storage_account_id = module.storage.storage_account.stmms.id
43+
rule = {
44+
rule1 = {
45+
filters = {
46+
blob_types = ["blockBlob"]
47+
prefix_match = ["terraform"]
48+
match_blob_index_tag = {
49+
name = "project"
50+
value = "mms-github"
51+
operation = "=="
52+
}
53+
}
54+
actions = {
55+
base_blob = {
56+
tier_to_cool_after_days_since_last_access_time_greater_than = 7
57+
auto_tier_to_hot_from_cool_enabled = true
58+
tier_to_cold_after_days_since_modification_greater_than = 30
59+
}
60+
snapshot = {
61+
tier_to_archive_after_days_since_last_tier_change_greater_than = 60
62+
delete_after_days_since_creation_greater_than = 180
63+
}
64+
version = {
65+
tier_to_cold_after_days_since_creation_greater_than = 30
66+
delete_after_days_since_creation = 90
67+
}
68+
}
69+
}
70+
}
3071
}
3172
}
3273
storage_container = {

examples/full_main.tf

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,49 @@ module "storage" {
2727
ip_rules = ["172.0.0.2"]
2828
virtual_network_subnet_ids = [module.network.subnet["snet-app-mms"].id]
2929
}
30+
blob_properties = {
31+
last_access_time_enabled = true
32+
}
3033
tags = {
3134
project = "mms-github"
3235
environment = terraform.workspace
3336
managed-by = "terraform"
3437
}
3538
}
3639
}
40+
storage_management_policy = {
41+
policy = {
42+
storage_account_id = module.storage.storage_account.stmms.id
43+
rule = {
44+
rule1 = {
45+
filters = {
46+
blob_types = ["blockBlob"]
47+
prefix_match = ["terraform"]
48+
match_blob_index_tag = {
49+
name = "project"
50+
value = "mms-github"
51+
operation = "=="
52+
}
53+
}
54+
actions = {
55+
base_blob = {
56+
tier_to_cool_after_days_since_last_access_time_greater_than = 7
57+
auto_tier_to_hot_from_cool_enabled = true
58+
tier_to_cold_after_days_since_modification_greater_than = 30
59+
}
60+
snapshot = {
61+
tier_to_archive_after_days_since_last_tier_change_greater_than = 60
62+
delete_after_days_since_creation_greater_than = 180
63+
}
64+
version = {
65+
tier_to_cold_after_days_since_creation_greater_than = 30
66+
delete_after_days_since_creation = 90
67+
}
68+
}
69+
}
70+
}
71+
}
72+
}
3773
storage_container = {
3874
terraform = {
3975
storage_account_name = module.storage.storage_account["stmms"].name

examples/min_main.tf

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,23 @@ module "storage" {
66
resource_group_name = "rg-mms-github"
77
}
88
}
9+
storage_management_policy = {
10+
policy = {
11+
storage_account_id = module.storage.storage_account.stmms.id
12+
rule = {
13+
rule1 = {
14+
filters = {
15+
blob_types = ["blockBlob"]
16+
}
17+
actions = {
18+
base_blob = {
19+
delete_after_days_since_modification_greater_than = 7
20+
}
21+
}
22+
}
23+
}
24+
}
25+
}
926
storage_container = {
1027
terraform = {
1128
storage_account_name = module.storage.storage_account["stmms"].name

main.tf

Lines changed: 89 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,13 @@ resource "azurerm_storage_account" "storage_account" {
2727
is_hns_enabled = local.storage_account[each.key].is_hns_enabled
2828
nfsv3_enabled = local.storage_account[each.key].nfsv3_enabled
2929
large_file_share_enabled = local.storage_account[each.key].large_file_share_enabled
30+
local_user_enabled = local.storage_account[each.key].local_user_enabled
3031
queue_encryption_key_type = local.storage_account[each.key].queue_encryption_key_type
3132
table_encryption_key_type = local.storage_account[each.key].table_encryption_key_type
3233
infrastructure_encryption_enabled = local.storage_account[each.key].infrastructure_encryption_enabled
3334
allowed_copy_scope = local.storage_account[each.key].allowed_copy_scope
3435
sftp_enabled = local.storage_account[each.key].sftp_enabled
36+
dns_endpoint_type = local.storage_account[each.key].dns_endpoint_type
3537

3638
dynamic "custom_domain" {
3739
for_each = length(compact(values(local.storage_account[each.key].custom_domain))) > 0 ? [0] : []
@@ -43,10 +45,11 @@ resource "azurerm_storage_account" "storage_account" {
4345
}
4446

4547
dynamic "customer_managed_key" {
46-
for_each = local.storage_account[each.key].customer_managed_key == {} ? [] : [0]
48+
for_each = length(compact(values(local.storage_account[each.key].customer_managed_key))) > 0 ? [0] : []
4749

4850
content {
4951
key_vault_key_id = local.storage_account[each.key].customer_managed_key.key_vault_key_id
52+
managed_hsm_key_id = local.storage_account[each.key].customer_managed_key.managed_hsm_key_id
5053
user_assigned_identity_id = local.storage_account[each.key].customer_managed_key.user_assigned_identity_id
5154
}
5255
}
@@ -86,7 +89,8 @@ resource "azurerm_storage_account" "storage_account" {
8689
for_each = local.storage_account[each.key].blob_properties.delete_retention_policy == {} ? [] : [0]
8790

8891
content {
89-
days = local.storage_account[each.key].blob_properties.delete_retention_policy.days
92+
days = local.storage_account[each.key].blob_properties.delete_retention_policy.days
93+
permanent_delete_enabled = local.storage_account[each.key].blob_properties.delete_retention_policy.permanent_delete_enabled
9094
}
9195
}
9296

@@ -280,13 +284,92 @@ resource "azurerm_storage_account" "storage_account" {
280284
tags = local.storage_account[each.key].tags
281285
}
282286

287+
resource "azurerm_storage_management_policy" "storage_management_policy" {
288+
for_each = var.storage_management_policy
289+
290+
storage_account_id = local.storage_management_policy[each.key].storage_account_id
291+
292+
dynamic "rule" {
293+
for_each = local.storage_management_policy[each.key].rule
294+
295+
content {
296+
name = local.storage_management_policy[each.key].rule[rule.key].name == "" ? rule.key : local.storage_management_policy[each.key].rule[rule.key].name
297+
enabled = local.storage_management_policy[each.key].rule[rule.key].enabled
298+
299+
filters {
300+
blob_types = local.storage_management_policy[each.key].rule[rule.key].filters.blob_types
301+
prefix_match = local.storage_management_policy[each.key].rule[rule.key].filters.prefix_match
302+
303+
dynamic "match_blob_index_tag" {
304+
for_each = length(compact(values(local.storage_management_policy[each.key].rule[rule.key].filters.match_blob_index_tag))) > 0 ? [0] : []
305+
306+
content {
307+
name = local.storage_management_policy[each.key].rule[rule.key].filters.match_blob_index_tag.name
308+
value = local.storage_management_policy[each.key].rule[rule.key].filters.match_blob_index_tag.value
309+
operation = local.storage_management_policy[each.key].rule[rule.key].filters.match_blob_index_tag.operation
310+
}
311+
}
312+
}
313+
314+
actions {
315+
dynamic "base_blob" {
316+
for_each = length(compact(values(local.storage_management_policy[each.key].rule[rule.key].actions.base_blob))) > 0 ? [0] : []
317+
318+
content {
319+
tier_to_cool_after_days_since_modification_greater_than = local.storage_management_policy[each.key].rule[rule.key].actions.base_blob.tier_to_cool_after_days_since_modification_greater_than
320+
tier_to_cool_after_days_since_last_access_time_greater_than = local.storage_management_policy[each.key].rule[rule.key].actions.base_blob.tier_to_cool_after_days_since_last_access_time_greater_than
321+
tier_to_cool_after_days_since_creation_greater_than = local.storage_management_policy[each.key].rule[rule.key].actions.base_blob.tier_to_cool_after_days_since_creation_greater_than
322+
auto_tier_to_hot_from_cool_enabled = local.storage_management_policy[each.key].rule[rule.key].actions.base_blob.auto_tier_to_hot_from_cool_enabled
323+
tier_to_archive_after_days_since_modification_greater_than = local.storage_management_policy[each.key].rule[rule.key].actions.base_blob.tier_to_archive_after_days_since_modification_greater_than
324+
tier_to_archive_after_days_since_last_access_time_greater_than = local.storage_management_policy[each.key].rule[rule.key].actions.base_blob.tier_to_archive_after_days_since_last_access_time_greater_than
325+
tier_to_archive_after_days_since_creation_greater_than = local.storage_management_policy[each.key].rule[rule.key].actions.base_blob.tier_to_archive_after_days_since_creation_greater_than
326+
tier_to_archive_after_days_since_last_tier_change_greater_than = local.storage_management_policy[each.key].rule[rule.key].actions.base_blob.tier_to_archive_after_days_since_last_tier_change_greater_than
327+
tier_to_cold_after_days_since_modification_greater_than = local.storage_management_policy[each.key].rule[rule.key].actions.base_blob.tier_to_cold_after_days_since_modification_greater_than
328+
tier_to_cold_after_days_since_last_access_time_greater_than = local.storage_management_policy[each.key].rule[rule.key].actions.base_blob.tier_to_cold_after_days_since_last_access_time_greater_than
329+
tier_to_cold_after_days_since_creation_greater_than = local.storage_management_policy[each.key].rule[rule.key].actions.base_blob.tier_to_cold_after_days_since_creation_greater_than
330+
delete_after_days_since_modification_greater_than = local.storage_management_policy[each.key].rule[rule.key].actions.base_blob.delete_after_days_since_modification_greater_than
331+
delete_after_days_since_last_access_time_greater_than = local.storage_management_policy[each.key].rule[rule.key].actions.base_blob.delete_after_days_since_last_access_time_greater_than
332+
delete_after_days_since_creation_greater_than = local.storage_management_policy[each.key].rule[rule.key].actions.base_blob.delete_after_days_since_creation_greater_than
333+
}
334+
}
335+
336+
dynamic "snapshot" {
337+
for_each = length(compact(values(local.storage_management_policy[each.key].rule[rule.key].actions.snapshot))) > 0 ? [0] : []
338+
339+
content {
340+
change_tier_to_archive_after_days_since_creation = local.storage_management_policy[each.key].rule[rule.key].actions.snapshot.change_tier_to_archive_after_days_since_creation
341+
tier_to_archive_after_days_since_last_tier_change_greater_than = local.storage_management_policy[each.key].rule[rule.key].actions.snapshot.tier_to_archive_after_days_since_last_tier_change_greater_than
342+
change_tier_to_cool_after_days_since_creation = local.storage_management_policy[each.key].rule[rule.key].actions.snapshot.change_tier_to_cool_after_days_since_creation
343+
tier_to_cold_after_days_since_creation_greater_than = local.storage_management_policy[each.key].rule[rule.key].actions.snapshot.tier_to_cold_after_days_since_creation_greater_than
344+
delete_after_days_since_creation_greater_than = local.storage_management_policy[each.key].rule[rule.key].actions.snapshot.delete_after_days_since_creation_greater_than
345+
}
346+
}
347+
348+
dynamic "version" {
349+
for_each = length(compact(values(local.storage_management_policy[each.key].rule[rule.key].actions.version))) > 0 ? [0] : []
350+
351+
content {
352+
change_tier_to_archive_after_days_since_creation = local.storage_management_policy[each.key].rule[rule.key].actions.version.change_tier_to_archive_after_days_since_creation
353+
tier_to_archive_after_days_since_last_tier_change_greater_than = local.storage_management_policy[each.key].rule[rule.key].actions.version.tier_to_archive_after_days_since_last_tier_change_greater_than
354+
change_tier_to_cool_after_days_since_creation = local.storage_management_policy[each.key].rule[rule.key].actions.version.change_tier_to_cool_after_days_since_creation
355+
tier_to_cold_after_days_since_creation_greater_than = local.storage_management_policy[each.key].rule[rule.key].actions.version.tier_to_cold_after_days_since_creation_greater_than
356+
delete_after_days_since_creation = local.storage_management_policy[each.key].rule[rule.key].actions.version.delete_after_days_since_creation
357+
}
358+
}
359+
}
360+
}
361+
}
362+
}
363+
283364
resource "azurerm_storage_container" "storage_container" {
284365
for_each = var.storage_container
285366

286-
name = local.storage_container[each.key].name == "" ? each.key : local.storage_container[each.key].name
287-
storage_account_name = local.storage_container[each.key].storage_account_name
288-
container_access_type = local.storage_container[each.key].container_access_type
289-
metadata = local.storage_container[each.key].metadata
367+
name = local.storage_container[each.key].name == "" ? each.key : local.storage_container[each.key].name
368+
storage_account_name = local.storage_container[each.key].storage_account_name
369+
container_access_type = local.storage_container[each.key].container_access_type
370+
default_encryption_scope = local.storage_container[each.key].default_encryption_scope
371+
encryption_scope_override_enabled = local.storage_container[each.key].encryption_scope_override_enabled
372+
metadata = local.storage_container[each.key].metadata
290373
}
291374

292375
resource "azurerm_storage_share" "storage_share" {

outputs.tf

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,17 @@ output "storage_account" {
99
}
1010
}
1111

12+
output "storage_management_policy" {
13+
description = "Outputs all attributes of resource_type."
14+
value = {
15+
for storage_management_policy in keys(azurerm_storage_management_policy.storage_management_policy) :
16+
storage_management_policy => {
17+
for key, value in azurerm_storage_management_policy.storage_management_policy[storage_management_policy] :
18+
key => value
19+
}
20+
}
21+
}
22+
1223
output "storage_container" {
1324
description = "Outputs all attributes of resource_type."
1425
value = {
@@ -54,6 +65,10 @@ output "variables" {
5465
for key in keys(var.storage_account) :
5566
key => local.storage_account[key]
5667
}
68+
storage_management_policy = {
69+
for key in keys(var.storage_management_policy) :
70+
key => local.storage_management_policy[key]
71+
}
5772
storage_container = {
5873
for key in keys(var.storage_container) :
5974
key => local.storage_container[key]
@@ -67,11 +82,41 @@ output "variables" {
6782
key => local.storage_share_directory[key]
6883
}
6984
}
85+
values = {
86+
storage_account = {
87+
for key in keys(var.storage_account) :
88+
key => local.storage_account_values[key]
89+
}
90+
storage_management_policy = {
91+
for key in keys(var.storage_management_policy) :
92+
key => local.storage_management_policy_values[key]
93+
}
94+
storage_share = {
95+
for key in keys(var.storage_share) :
96+
key => local.storage_share_values[key]
97+
}
98+
}
7099
variable = {
71100
storage_account = {
72101
for key in keys(var.storage_account) :
73102
key => var.storage_account[key]
74103
}
104+
storage_management_policy = {
105+
for key in keys(var.storage_management_policy) :
106+
key => var.storage_management_policy[key]
107+
}
108+
storage_container = {
109+
for key in keys(var.storage_container) :
110+
key => var.storage_container[key]
111+
}
112+
storage_share = {
113+
for key in keys(var.storage_share) :
114+
key => var.storage_share[key]
115+
}
116+
storage_share_directory = {
117+
for key in keys(var.storage_share_directory) :
118+
key => var.storage_share_directory[key]
119+
}
75120
}
76121
}
77122
}

0 commit comments

Comments
 (0)