Skip to content
This repository was archived by the owner on May 1, 2025. It is now read-only.

Commit a6f803c

Browse files
authored
Merge pull request #51 from salesforce/fix/GH-45-resource-name-enforcement-mode
Terraform Resource names have suffixes; added Tests to validate Terraform output
2 parents ea24a2e + 9ca8b9b commit a6f803c

File tree

20 files changed

+2945
-1375
lines changed

20 files changed

+2945
-1375
lines changed

.actrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
-P ubuntu-latest=nektos/act-environments-ubuntu:18.04

.github/workflows/ci.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ jobs:
1919
with:
2020
python-version: ${{ matrix.python-version }}
2121

22+
- name: Setup Terraform
23+
uses: hashicorp/setup-terraform@v1
24+
with:
25+
terraform_version: 0.12.28
26+
2227
- name: Install dependencies
2328
run: |
2429
make setup-dev
@@ -28,6 +33,10 @@ jobs:
2833
make security-test
2934
make test
3035
36+
- name: Validate Terraform output
37+
run: |
38+
make terraform-validate
39+
3140
- name: Install the package to make sure nothing is randomly broken
3241
run: |
3342
make install

Makefile

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,15 @@ count-loc:
8686
echo "Website: https://github.com/XAMPPRocky/tokei#installation'"
8787
tokei ./* --exclude --exclude '**/*.html' --exclude '**/*.json' --exclude azure_guardrails/shared/data/ --exclude azure_guardrails/shared/azure-policy --exclude examples --exclude docs --exclude tmp --exclude venv
8888

89-
.PHONY: terraform-demo
90-
terraform-demo: install
91-
azure-guardrails --help
92-
azure-guardrails generate-terraform --service all --subscription example --no-params > examples/terraform-demo/main.tf
89+
.PHONY: github-actions-test
90+
github-actions-test:
91+
act -l
92+
# Run the CI job
93+
act -j ci
94+
95+
.PHONY: terraform-validate
96+
terraform-validate: install
97+
sh utils/terraform-demo.sh
9398

9499
.PHONY: update-policy-table
95100
update-policy-table: install

azure_guardrails/shared/utils.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,15 +108,18 @@ def get_github_link(service_name: str, file_name: str) -> str:
108108

109109
# shorten the name if it is over a certain length to avoid hitting limits
110110

111-
def format_policy_name(name: str, parameter_requirement_str) -> str:
111+
def format_policy_name(name: str, parameter_requirement_str: str) -> str:
112112
"""
113113
Shortens a name to 24 characters minimum to avoid hitting Policy Assignment limit.
114114
115115
Azure Policy Assignment names require 24 characters or less
116116
"""
117-
# 21, because we want to append '-NP', '-OP', or '_RP'
118-
if len(name) > 21:
119-
name = name[0:21]
117+
suffix_length = len(parameter_requirement_str)
118+
# 24 is the policy assignment name limit
119+
# If the suffix is '-NP', '-OP', or '-RP'. the name_length_limit will be 21
120+
name_length_limit = 24 - suffix_length
121+
if len(name) > name_length_limit:
122+
name = name[0:name_length_limit-1]
120123
initiative_name = f"{name}-{parameter_requirement_str}"
121124
initiative_name = initiative_name.replace("-", "_")
122125
# initiative_name = initiative_name.lower()

azure_guardrails/terraform/terraform.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ def __init__(
1717
category: str = "Testing"
1818
):
1919
self.label = "no_params" # This is just used for naming Terraform resources and variables
20+
self.enforce = enforcement_mode
2021
self.initiative_name = self._initiative_name(
2122
subscription_name=subscription_name, management_group=management_group
2223
)
@@ -29,13 +30,16 @@ def __init__(
2930
self.enforcement_string = "false"
3031
self.category = category
3132

32-
@staticmethod
33-
def _initiative_name(subscription_name: str, management_group: str) -> str:
33+
def _initiative_name(self, subscription_name: str, management_group: str) -> str:
3434
if subscription_name == "" and management_group == "":
3535
raise Exception(
3636
"Please supply a value for the subscription name or the management group"
3737
)
3838
parameter_requirement_str = "NP"
39+
if self.enforce:
40+
parameter_requirement_str = "NP-Enforce"
41+
else:
42+
parameter_requirement_str = f"{parameter_requirement_str}-Audit"
3943
if subscription_name:
4044
initiative_name = utils.format_policy_name(subscription_name, parameter_requirement_str)
4145
else:
@@ -163,6 +167,7 @@ def __init__(
163167
enforcement_mode: bool = False,
164168
category: str = "Testing"
165169
):
170+
self.enforce = enforcement_mode
166171
self.name = self._initiative_name(
167172
subscription_name=subscription_name, management_group=management_group,
168173
parameter_requirement_str=parameter_requirement_str
@@ -177,13 +182,15 @@ def __init__(
177182
else:
178183
self.enforcement_string = "false"
179184

180-
@staticmethod
181-
def _initiative_name(subscription_name: str, management_group: str, parameter_requirement_str: str) -> str:
185+
def _initiative_name(self, subscription_name: str, management_group: str, parameter_requirement_str: str) -> str:
182186
if subscription_name == "" and management_group == "":
183187
raise Exception(
184188
"Please supply a value for the subscription name or the management group"
185189
)
186-
190+
if self.enforce:
191+
parameter_requirement_str = f"{parameter_requirement_str}-Enforce"
192+
else:
193+
parameter_requirement_str = f"{parameter_requirement_str}-Audit"
187194
if subscription_name:
188195
initiative_name = utils.format_policy_name(subscription_name, parameter_requirement_str)
189196
else:

0 commit comments

Comments
 (0)