Skip to content

Commit 5e326b5

Browse files
committed
feat(tf): overriding backend settings
1 parent 510e818 commit 5e326b5

File tree

5 files changed

+58
-7
lines changed

5 files changed

+58
-7
lines changed

db/Template.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,11 @@ type AnsibleTemplateParams struct {
7676
}
7777

7878
type TerraformTemplateParams struct {
79-
AllowDestroy bool `json:"allow_destroy"`
80-
AllowAutoApprove bool `json:"allow_auto_approve"`
81-
AutoApprove bool `json:"auto_approve"`
82-
OverrideBackend bool `json:"override_backend"` // override backend if internal backend is used
79+
AllowDestroy bool `json:"allow_destroy,omitempty"`
80+
AllowAutoApprove bool `json:"allow_auto_approve,omitempty"`
81+
AutoApprove bool `json:"auto_approve,omitempty"`
82+
OverrideBackend bool `json:"override_backend,omitempty"` // override backend if internal backend is used
83+
BackendFilename string `json:"backend_filename,omitempty"`
8384
}
8485

8586
type SurveyVarEnumValue struct {

db_lib/TerraformApp.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,8 +199,15 @@ func (t *TerraformApp) InstallRequirements(environmentVars []string, tplParams a
199199
tpl := tplParams.(*db.TerraformTemplateParams)
200200
p := params.(*db.TerraformTaskParams)
201201

202+
backendFilename := "backend.tf"
203+
if tpl.BackendFilename != "" {
204+
backendFilename = tpl.BackendFilename
205+
}
206+
207+
backendFile := path.Join(t.GetFullPath(), backendFilename)
208+
202209
if tpl.OverrideBackend {
203-
err = os.WriteFile(path.Join(t.GetFullPath(), "backend.tf"), []byte("terraform { backend \"http\" {} }"), 0644)
210+
err = os.WriteFile(backendFile, []byte("terraform { backend \"http\" {} }"), 0644)
204211
if err != nil {
205212
return
206213
}
@@ -211,7 +218,10 @@ func (t *TerraformApp) InstallRequirements(environmentVars []string, tplParams a
211218
}
212219

213220
if tpl.OverrideBackend {
214-
err = os.Remove(path.Join(t.GetFullPath(), "backend.tf"))
221+
err = os.Remove(backendFile)
222+
if os.IsNotExist(err) {
223+
err = nil
224+
}
215225
if err != nil {
216226
return
217227
}

web/src/components/TemplateForm.vue

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,25 @@
378378
v-if="needField('auto_approve')"
379379
/>
380380

381+
<v-checkbox
382+
class="mt-0"
383+
:label="$t('terraform_override_backend')"
384+
v-model="item.task_params.override_backend"
385+
:true-value="true"
386+
:false-value="false"
387+
v-if="needField('override_backend')"
388+
/>
389+
390+
<v-text-field
391+
v-model="item.task_params.backend_filename"
392+
:label="fieldLabel('terraform_backend_filename')"
393+
outlined
394+
dense
395+
:disabled="formSaving || !item.task_params.override_backend"
396+
placeholder="backend.tf"
397+
:rules="[v => validateBackendFilename(v) || $t('terraform_invalid_backend_filename')]"
398+
></v-text-field>
399+
381400
</div>
382401

383402
<h2 class="mb-4">
@@ -572,7 +591,7 @@ export default {
572591
},
573592
574593
needAppBlock() {
575-
return ['', 'ansible', 'ansible', 'tofu'].includes(this.app);
594+
return ['', 'ansible', 'ansible', 'tofu', 'terraform'].includes(this.app);
576595
},
577596
578597
surveyVars() {
@@ -605,6 +624,18 @@ export default {
605624
},
606625
607626
methods: {
627+
validateBackendFilename(v) {
628+
if (!v) {
629+
return true;
630+
}
631+
632+
if (!v.endsWith('.tf')) {
633+
return 'File must have extension .tf';
634+
}
635+
636+
return /^[a-zA-Z0-9_\-.]+\.tf$/.test(v);
637+
},
638+
608639
setSkipTags(tags) {
609640
this.item.task_params.skip_tags = tags;
610641
},

web/src/lang/en.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,9 @@ export default {
323323
// Terraform/OpenTofu/Terragrunt
324324
auto_approve: 'Auto approve',
325325
auto_destroy: 'Allow destroy',
326+
terraform_override_backend: 'Override backend settings',
327+
terraform_backend_filename: 'Backend filename (default: backend.tf)',
328+
terraform_invalid_backend_filename: 'Invalid backend filename',
326329

327330
// Ansible
328331
tag: 'Tag',

web/src/lib/constants.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,12 @@ export const TERRAFORM_FIELDS = {
225225
allow_override_inventory: {
226226
label: 'allowInventoryInTask',
227227
},
228+
override_backend: {
229+
label: 'terraform_override_backend',
230+
},
231+
backend_filename: {
232+
label: 'terraform_backend_filename',
233+
},
228234
};
229235

230236
export const UNKNOWN_APP_FIELDS = {

0 commit comments

Comments
 (0)