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

Commit d6938cf

Browse files
author
Kinnaird McQuade
committed
Adds Terraform validation tests and Terraform resource names match enforcement status
1 parent 72d78a9 commit d6938cf

File tree

19 files changed

+2934
-1361
lines changed

19 files changed

+2934
-1361
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/terraform/terraform.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ def _initiative_name(self, subscription_name: str, management_group: str) -> str
3838
parameter_requirement_str = "NP"
3939
if self.enforce:
4040
parameter_requirement_str = "NP-Enforce"
41+
else:
42+
parameter_requirement_str = f"{parameter_requirement_str}-Audit"
4143
if subscription_name:
4244
initiative_name = utils.format_policy_name(subscription_name, parameter_requirement_str)
4345
else:
@@ -187,6 +189,8 @@ def _initiative_name(self, subscription_name: str, management_group: str, parame
187189
)
188190
if self.enforce:
189191
parameter_requirement_str = f"{parameter_requirement_str}-Enforce"
192+
else:
193+
parameter_requirement_str = f"{parameter_requirement_str}-Audit"
190194
if subscription_name:
191195
initiative_name = utils.format_policy_name(subscription_name, parameter_requirement_str)
192196
else:

examples/terraform-demo/main.tf renamed to examples/terraform-demo-no-params/main.tf

Lines changed: 345 additions & 345 deletions
Large diffs are not rendered by default.

examples/terraform-demo-params-optional/main.tf

Lines changed: 2129 additions & 0 deletions
Large diffs are not rendered by default.

examples/terraform-demo-with-parameters-empty-defaults/main.tf renamed to examples/terraform-demo-params-required/main.tf

Lines changed: 343 additions & 344 deletions
Large diffs are not rendered by default.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
provider "azurerm" {
2+
features {}
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
terraform {
2+
required_version = ">= 0.12.0"
3+
}

examples/terraform-demo-with-parameters-empty-defaults/README.md

Lines changed: 0 additions & 5 deletions
This file was deleted.

examples/terraform-demo-with-parameters/README.md

Lines changed: 0 additions & 5 deletions
This file was deleted.

examples/terraform-demo-with-parameters/main.tf

Lines changed: 0 additions & 651 deletions
This file was deleted.

examples/terraform-demo/README.md

Lines changed: 0 additions & 5 deletions
This file was deleted.

test/terraform/test_terraform_no_params.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def setUp(self) -> None:
4141
)
4242

4343
def test_terraform_key_vault(self):
44-
self.assertEqual("example_NP", self.kv_terraform_template.initiative_name)
44+
self.assertEqual("example_NP_Audit", self.kv_terraform_template.initiative_name)
4545
print(self.terraform_template.initiative_name)
4646
self.assertEqual("no_params", self.kv_terraform_template.label)
4747
print(self.terraform_template.label)
@@ -67,7 +67,7 @@ def test_terraform_name_length(self):
6767
)
6868
print(tmp_terraform_template.initiative_name)
6969
print(len(tmp_terraform_template.initiative_name))
70-
self.assertTrue(tmp_terraform_template.initiative_name == "ThisSubscriptionNameI_NP")
70+
self.assertTrue(tmp_terraform_template.initiative_name == "ThisSubscriptio_NP_Audit")
7171
self.assertTrue(len(tmp_terraform_template.initiative_name) <= 24)
7272

7373
def test_terraform_name_enforcement_enforce(self):

utils/terraform-demo.sh

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
#!/usr/bin/env bash
2+
set -x
3+
4+
5+
# Validate that azure-guardrails tool is installed
6+
if ! command -v azure-guardrails &> /dev/null
7+
then
8+
echo "azure-guardrails could not be found. Please download and install the tool from https://github.com/salesforce/azure-guardrails/"
9+
exit
10+
fi
11+
12+
13+
# Validate that Terraform 0.12 is installed and in use
14+
is_tf_version_12=$(terraform version | grep -m1 "" | grep -m1 "0\.12\.");
15+
16+
if [[ -z $is_tf_version_12 ]]; then
17+
echo "Terraform 0.12.x is NOT used. Let's try to install it with tfenv";
18+
# If tfenv is not installed
19+
if ! command -v tfenv &> /dev/null
20+
then
21+
echo "tfenv could not be found. Please download and install the tool from https://github.com/tfutils/tfenv"
22+
exit
23+
fi
24+
# If tfenv exists, install Terraform 0.12.x
25+
tfenv install 0.12.28
26+
tfenv use 0.12.28
27+
else
28+
echo "Terraform 0.12.x is used. We can leverage that for running terraform validate";
29+
fi
30+
31+
if ! command -v azure-guardrails &> /dev/null
32+
then
33+
echo "azure-guardrails could not be found. Please download and install the tool from https://github.com/salesforce/azure-guardrails/"
34+
exit
35+
fi
36+
37+
#### Generate the example Terraform files
38+
# No Parameters
39+
export no_params_folder="examples/terraform-demo-no-params"
40+
azure-guardrails generate-terraform --no-params \
41+
--service all \
42+
--subscription example \
43+
--no-summary > ${no_params_folder}/main.tf
44+
45+
# Optional Parameters
46+
export params_optional_folder="examples/terraform-demo-params-optional"
47+
azure-guardrails generate-terraform --params-optional \
48+
--service all \
49+
--subscription example \
50+
--no-summary > ${params_optional_folder}/main.tf
51+
52+
# Required Parameters
53+
export params_required_folder="examples/terraform-demo-params-required"
54+
azure-guardrails generate-terraform --params-required \
55+
--service all \
56+
--subscription example \
57+
--no-summary > ${params_required_folder}/main.tf
58+
59+
# Run Terraform validate inside there
60+
echo "Running Terraform validate"
61+
pwd
62+
declare -a dirs=( ${no_params_folder} ${params_optional_folder} ${params_required_folder} )
63+
64+
for dir in ${dirs[@]}; do
65+
cd ./$dir/
66+
echo "Running terraform validate in $${dir}...";
67+
terraform init -backend=false
68+
terraform validate
69+
echo $!
70+
cd ../../
71+
done
72+
#
73+
#cd ${no_params_folder}
74+
#terraform init -backend=false
75+
#terraform validate
76+
#cd ../../
77+
#
78+
#cd ${params_optional_folder}
79+
#terraform init -backend=false
80+
#terraform validate
81+
#cd ../../
82+
#
83+
#cd ${params_required_folder}
84+
#terraform init -backend=false
85+
#terraform validate
86+
#cd ../../

0 commit comments

Comments
 (0)