Skip to content

Commit 070c137

Browse files
committed
update
1 parent 19e5d66 commit 070c137

File tree

4 files changed

+76
-45
lines changed

4 files changed

+76
-45
lines changed

.azuredevops/templates/steps/terraform-init-plan.yaml

Lines changed: 39 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ parameters:
4444
default: "false"
4545
displayName: 'Run Terraform Destroy'
4646

47+
- name: TerraformInitCreateBackendStateFileName
48+
type: string
49+
values: [ "true", "false" ]
50+
default: "false"
51+
displayName: 'Whether the script should attempt to make a state file based on stack name'
52+
4753
- name: TerraformInitExtraArgsJson
4854
type: string
4955
default: '[ ]'
@@ -246,38 +252,39 @@ steps:
246252

247253
- pwsh: |
248254
pwsh -File "$(Build.SourcesDirectory)\Run-AzTerraform.ps1" `
249-
-TerraformCodeLocation '${{ parameters.TerraformCodeLocation }}' `
250-
-TerraformStackToRunJson '${{ parameters.TerraformStackToRunJson }}' `
251-
-TerraformWorkspace '${{ parameters.TerraformWorkspace }}' `
252-
-RunTerraformInit '${{ parameters.RunTerraformInit }}' `
253-
-RunTerraformPlan '${{ parameters.RunTerraformPlan }}' `
254-
-RunTerraformPlanDestroy '${{ parameters.RunTerraformPlanDestroy }}' `
255-
-RunTerraformApply '${{ parameters.RunTerraformApply }}' `
256-
-RunTerraformDestroy '${{ parameters.RunTerraformDestroy }}' `
257-
-TerraformInitExtraArgsJson '${{ parameters.TerraformInitExtraArgsJson }}' `
258-
-TerraformPlanExtraArgsJson '${{ parameters.TerraformPlanExtraArgsJson }}' `
259-
-TerraformPlanDestroyExtraArgsJson '${{ parameters.TerraformPlanDestroyExtraArgsJson }}' `
260-
-TerraformApplyExtraArgsJson '${{ parameters.TerraformApplyExtraArgsJson }}' `
261-
-TerraformDestroyExtraArgsJson '${{ parameters.TerraformDestroyExtraArgsJson }}' `
262-
-DebugMode '${{ parameters.DebugMode }}' `
263-
-DeletePlanFiles '${{ parameters.DeletePlanFiles }}' `
264-
-TerraformVersion '${{ parameters.TerraformVersion }}' `
265-
-RunCheckov '${{ parameters.RunCheckov }}' `
266-
-CheckovSkipCheck '${{ parameters.CheckovSkipCheck }}' `
267-
-CheckovSoftfail '${{ parameters.CheckovSoftfail }}' `
268-
-CheckovExtraArgsJson '${{ parameters.CheckovExtraArgsJson }}' `
269-
-TerraformPlanFileName '${{ parameters.TerraformPlanFileName }}' `
270-
-TerraformDestroyPlanFileName '${{ parameters.TerraformDestroyPlanFileName }}' `
271-
-CreateTerraformWorkspace '${{ parameters.CreateTerraformWorkspace }}' `
272-
-UseAzureClientSecretLogin '${{ parameters.UseAzureClientSecretLogin }}' `
273-
-UseAzureOidcLogin '${{ parameters.UseAzureOidcLogin }}' `
274-
-UseAzureUserLogin '${{ parameters.UseAzureUserLogin }}' `
275-
-UseAzureManagedIdentityLogin '${{ parameters.UseAzureManagedIdentityLogin }}' `
276-
-UseAzureServiceConnection '${{ parameters.UseAzureServiceConnection }}' `
277-
-InstallTenvTerraform '${{ parameters.InstallTenvTerraform }}' `
278-
-InstallAzureCli '${{ parameters.InstallAzureCli }}' `
279-
-AttemptAzureLogin '${{ parameters.AttemptAzureLogin }}' `
280-
-InstallCheckov '${{ parameters.InstallCheckov }}'
255+
-TerraformCodeLocation '${{ parameters.TerraformCodeLocation }}' `
256+
-TerraformStackToRunJson '${{ parameters.TerraformStackToRunJson }}' `
257+
-TerraformWorkspace '${{ parameters.TerraformWorkspace }}' `
258+
-RunTerraformInit '${{ parameters.RunTerraformInit }}' `
259+
-RunTerraformPlan '${{ parameters.RunTerraformPlan }}' `
260+
-RunTerraformPlanDestroy '${{ parameters.RunTerraformPlanDestroy }}' `
261+
-RunTerraformApply '${{ parameters.RunTerraformApply }}' `
262+
-RunTerraformDestroy '${{ parameters.RunTerraformDestroy }}' `
263+
-TerraformInitCreateBackendStateFileName '${{ parameters.TerraformInitCreateBackendStateFileName }}' `
264+
-TerraformInitExtraArgsJson '${{ parameters.TerraformInitExtraArgsJson }}' `
265+
-TerraformPlanExtraArgsJson '${{ parameters.TerraformPlanExtraArgsJson }}' `
266+
-TerraformPlanDestroyExtraArgsJson '${{ parameters.TerraformPlanDestroyExtraArgsJson }}' `
267+
-TerraformApplyExtraArgsJson '${{ parameters.TerraformApplyExtraArgsJson }}' `
268+
-TerraformDestroyExtraArgsJson '${{ parameters.TerraformDestroyExtraArgsJson }}' `
269+
-DebugMode '${{ parameters.DebugMode }}' `
270+
-DeletePlanFiles '${{ parameters.DeletePlanFiles }}' `
271+
-TerraformVersion '${{ parameters.TerraformVersion }}' `
272+
-RunCheckov '${{ parameters.RunCheckov }}' `
273+
-CheckovSkipCheck '${{ parameters.CheckovSkipCheck }}' `
274+
-CheckovSoftfail '${{ parameters.CheckovSoftfail }}' `
275+
-CheckovExtraArgsJson '${{ parameters.CheckovExtraArgsJson }}' `
276+
-TerraformPlanFileName '${{ parameters.TerraformPlanFileName }}' `
277+
-TerraformDestroyPlanFileName '${{ parameters.TerraformDestroyPlanFileName }}' `
278+
-CreateTerraformWorkspace '${{ parameters.CreateTerraformWorkspace }}' `
279+
-UseAzureClientSecretLogin '${{ parameters.UseAzureClientSecretLogin }}' `
280+
-UseAzureOidcLogin '${{ parameters.UseAzureOidcLogin }}' `
281+
-UseAzureUserLogin '${{ parameters.UseAzureUserLogin }}' `
282+
-UseAzureManagedIdentityLogin '${{ parameters.UseAzureManagedIdentityLogin }}' `
283+
-UseAzureServiceConnection '${{ parameters.UseAzureServiceConnection }}' `
284+
-InstallTenvTerraform '${{ parameters.InstallTenvTerraform }}' `
285+
-InstallAzureCli '${{ parameters.InstallAzureCli }}' `
286+
-AttemptAzureLogin '${{ parameters.AttemptAzureLogin }}' `
287+
-InstallCheckov '${{ parameters.InstallCheckov }}'
281288
name: RunAzTerraform
282289
displayName: 'Run Terraform init & Terraform plan'
283290
env:

.azuredevops/workflows/steps/terraform-init-plan.yaml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ parameters:
2626
- '["all"]'
2727
displayName: 'Terraform Stacks to Run'
2828

29-
3029
- name: CreateTerraformWorkspace
3130
type: string
3231
values: [ "true", "false" ]
@@ -73,6 +72,12 @@ parameters:
7372
default: "false"
7473
displayName: "Debug mode enabled"
7574

75+
- name: TerraformInitCreateBackendStateFileName
76+
type: string
77+
values: [ "true", "false" ]
78+
default: "true"
79+
displayName: 'Whether the script should attempt to make a state file based on stack name'
80+
7681
- name: TerraformInitExtraArgsJson
7782
type: string
7883
default: >
@@ -84,7 +89,6 @@ parameters:
8489
]
8590
displayName: 'Extra Args for terraform init'
8691

87-
8892
- name: TerraformPlanExtraArgsJson
8993
type: string
9094
default: '[ ]'
@@ -107,6 +111,7 @@ steps:
107111
- template: .azuredevops/templates/steps/terraform-init-plan.yaml@githubTemplates # path in the external repo
108112
parameters:
109113
TerraformCodeLocation: ${{ parameters.TerraformCodeLocation }}
114+
TerraformInitCreateBackendStateFileName: ${{ parameters.TerraformInitCreateBackendStateFileName }}
110115
TerraformInitExtraArgsJson: ${{ parameters.TerraformInitExtraArgsJson }}
111116
TerraformPlanExtraArgsJson: ${{ parameters.TerraformPlanExtraArgsJson }}
112117
TerraformStackToRunJson: ${{ parameters.TerraformStackToRunJson }}

PowerShellModules/Terraform.psm1

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,10 @@ function Invoke-TerraformInit
137137
[Parameter(Mandatory)][string]$CodePath,
138138

139139
# Optional additional arguments, e.g. "-backend-config=xyz.tfbackend"
140-
[string[]]$InitArgs = @()
140+
[string[]]$InitArgs = @(),
141+
[bool]$CreateBackendKey = $false,
142+
[string]$StackFolderName = $null
143+
141144
)
142145

143146
$inv = $MyInvocation.MyCommand.Name
@@ -154,6 +157,14 @@ function Invoke-TerraformInit
154157
_LogMessage -Level 'INFO' -Message "Running *terraform init ${InitArgs} * in: $CodePath" -InvocationName $inv
155158
Set-Location $CodePath
156159

160+
if ($CreateBackendKey -and $StackFolderName)
161+
{
162+
$normalized = $StackFolderName -replace '_', '-'
163+
$backendArg = "-backend-config=key=${normalized}.terraform.tfstate"
164+
_LogMessage -Level 'DEBUG' -Message "Appending backend key arg: $backendArg" -InvocationName $inv
165+
$InitArgs += $backendArg
166+
}
167+
157168
& terraform init @InitArgs
158169
$code = $LASTEXITCODE
159170
_LogMessage -Level 'DEBUG' -Message "terraform init exit-code: $code" -InvocationName $inv
@@ -450,13 +461,13 @@ function Convert-TerraformPlanToJson
450461
###############################################################################
451462
Export-ModuleMember -Function `
452463
Invoke-TerraformValidate, `
453-
Invoke-TerraformFmtCheck, `
454-
Get-TerraformStackFolders, `
455-
Invoke-TerraformInit, `
456-
Invoke-TerraformWorkspaceSelect, `
457-
Invoke-TerraformPlan, `
458-
Invoke-TerraformPlanDestroy, `
459-
Invoke-TerraformApply, `
460-
Invoke-TerraformDestroy, `
461-
Convert-TerraformPlanToJson
464+
Invoke-TerraformFmtCheck, `
465+
Get-TerraformStackFolders, `
466+
Invoke-TerraformInit, `
467+
Invoke-TerraformWorkspaceSelect, `
468+
Invoke-TerraformPlan, `
469+
Invoke-TerraformPlanDestroy, `
470+
Invoke-TerraformApply, `
471+
Invoke-TerraformDestroy, `
472+
Convert-TerraformPlanToJson
462473

Run-AzTerraform.ps1

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ param (
55
[string]$RunTerraformApply = "false",
66
[string]$RunTerraformDestroy = "false",
77
[string]$TerraformInitExtraArgsJson = '[]',
8+
[string]$TerraformInitCreateBackendStateFileName = "false",
89
[string]$TerraformPlanExtraArgsJson = '[]',
910
[string]$TerraformPlanDestroyExtraArgsJson = '[]',
1011
[string]$TerraformApplyExtraArgsJson = '[]',
@@ -125,6 +126,9 @@ try
125126
$convertedRunTerraformInit = ConvertTo-Boolean $RunTerraformInit
126127
_LogMessage -Level 'DEBUG' -Message "RunTerraformInit: `"$RunTerraformInit`"$convertedRunTerraformInit" -InvocationName "$( $MyInvocation.MyCommand.Name )"
127128

129+
$convertedTerraformInitCreateBackendStateFileName = ConvertTo-Boolean $TerraformInitCreateBackendStateFileName
130+
_LogMessage -Level 'DEBUG' -Message "TerraformInitCreateBackendStateFileName: `"$TerraformInitCreateBackendStateFileName`"$convertedTerraformInitCreateBackendStateFileName" -InvocationName "$( $MyInvocation.MyCommand.Name )"
131+
128132
$convertedRunTerraformPlan = ConvertTo-Boolean $RunTerraformPlan
129133
_LogMessage -Level 'DEBUG' -Message "RunTerraformPlan: `"$RunTerraformPlan`"$convertedRunTerraformPlan" -InvocationName "$( $MyInvocation.MyCommand.Name )"
130134

@@ -259,7 +263,11 @@ try
259263
Invoke-TerraformFmtCheck -CodePath $folder
260264

261265
# ── INIT ──────────────────────────────────────────────────────────────
262-
if ($convertedRunTerraformInit)
266+
if ($convertedRunTerraformInit -and $convertedTerraformInitCreateBackendStateFileName)
267+
{
268+
Invoke-TerraformInit -CodePath $folder -InitArgs $TerraformInitExtraArgs -CreateBackendKey $convertedTerraformInitCreateBackendStateFileName -StackFolderName $folder
269+
}
270+
else
263271
{
264272
Invoke-TerraformInit -CodePath $folder -InitArgs $TerraformInitExtraArgs
265273
}

0 commit comments

Comments
 (0)