Skip to content

Commit badc1a2

Browse files
sagilaufer1992update generated docs action
andauthored
Feature terragrunt version for templates (#261)
* added TG version to wherever TF is declared and used, without enforcements * require the presence of TG version in TG blueprints and ONLY in TG blueprints * tested red paths in unit tests for tg version * added integration test for creating a tg-template + minor issues with setting tg-version * update readme * rebased on main Co-authored-by: update generated docs action <[email protected]>
1 parent dd8a54d commit badc1a2

File tree

10 files changed

+109
-3
lines changed

10 files changed

+109
-3
lines changed

client/model.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@ type TemplateCreatePayload struct {
218218
Revision string `json:"revision"`
219219
OrganizationId string `json:"organizationId"`
220220
TerraformVersion string `json:"terraformVersion"`
221+
TerragruntVersion string `json:"terragruntVersion,omitempty"`
221222
IsGitlabEnterprise bool `json:"isGitLabEnterprise"`
222223
BitbucketClientKey string `json:"bitbucketClientKey,omitempty"`
223224
}
@@ -269,6 +270,7 @@ type Template struct {
269270
GitlabProjectId int `json:"gitlabProjectId,omitempty"`
270271
UpdatedAt string `json:"updatedAt"`
271272
TerraformVersion string `json:"terraformVersion"`
273+
TerragruntVersion string `json:"terragruntVersion,omitempty"`
272274
IsDeleted bool `json:"isDeleted,omitempty"`
273275
BitbucketClientKey string `json:"bitbucketClientKey"`
274276
}

client/template.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@ func (self *ApiClient) TemplateCreate(payload TemplateCreatePayload) (Template,
1515
if payload.OrganizationId != "" {
1616
return Template{}, errors.New("Must not specify organizationId")
1717
}
18+
if payload.Type != "terragrunt" && payload.TerragruntVersion != "" {
19+
return Template{}, errors.New("Can't define terragrunt version for non-terragrunt blueprint")
20+
}
21+
if payload.Type == "terragrunt" && payload.TerragruntVersion == "" {
22+
return Template{}, errors.New("Must supply Terragrunt version")
23+
}
1824
organizationId, err := self.organizationId()
1925
if err != nil {
2026
return Template{}, nil
@@ -49,6 +55,12 @@ func (self *ApiClient) TemplateUpdate(id string, payload TemplateCreatePayload)
4955
if payload.OrganizationId != "" {
5056
return Template{}, errors.New("Must not specify organizationId")
5157
}
58+
if payload.Type != "terragrunt" && payload.TerragruntVersion != "" {
59+
return Template{}, errors.New("Can't define terragrunt version for non-terragrunt blueprint")
60+
}
61+
if payload.Type == "terragrunt" && payload.TerragruntVersion == "" {
62+
return Template{}, errors.New("Must supply Terragrunt version")
63+
}
5264
organizationId, err := self.organizationId()
5365
if err != nil {
5466
return Template{}, err

client/template_test.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,4 +199,57 @@ var _ = Describe("Templates Client", func() {
199199
httpCall.Times(1)
200200
})
201201
})
202+
203+
Describe("Terragrunt version errors", func() {
204+
var err error
205+
206+
Describe("type is tg and no tg version supplied", func() {
207+
It("Should fail on create", func() {
208+
createTemplatePayload := TemplateCreatePayload{}
209+
copier.Copy(&createTemplatePayload, &mockTemplate)
210+
211+
createTemplatePayload.Type = "terragrunt"
212+
213+
_, err = apiClient.TemplateCreate(createTemplatePayload)
214+
215+
Expect(err).To(Not(BeNil()))
216+
})
217+
218+
It("Should fail on update", func() {
219+
createTemplatePayload := TemplateCreatePayload{}
220+
copier.Copy(&createTemplatePayload, &mockTemplate)
221+
222+
createTemplatePayload.Type = "terragrunt"
223+
224+
_, err = apiClient.TemplateUpdate(mockTemplate.Id, createTemplatePayload)
225+
226+
Expect(err).To(Not(BeNil()))
227+
})
228+
})
229+
230+
Describe("type is NOT tg and tg version IS supplied", func() {
231+
It("Should fail on create", func() {
232+
createTemplatePayload := TemplateCreatePayload{}
233+
copier.Copy(&createTemplatePayload, &mockTemplate)
234+
235+
createTemplatePayload.Type = "terraform"
236+
createTemplatePayload.TerragruntVersion = "0.29.0"
237+
238+
_, err = apiClient.TemplateCreate(createTemplatePayload)
239+
240+
Expect(err).To(Not(BeNil()))
241+
})
242+
243+
It("Should fail on update", func() {
244+
createTemplatePayload := TemplateCreatePayload{}
245+
copier.Copy(&createTemplatePayload, &mockTemplate)
246+
247+
createTemplatePayload.Type = "terragrunt"
248+
249+
_, err = apiClient.TemplateUpdate(mockTemplate.Id, createTemplatePayload)
250+
251+
Expect(err).To(Not(BeNil()))
252+
})
253+
})
254+
})
202255
})

docs/data-sources/template.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ data "env0_template" "example" {
2828
- **id** (String) id of the template
2929
- **is_gitlab_enterprise** (Boolean) Does this template use gitlab enterprise repository?
3030
- **name** (String) the name of the template
31+
- **terragrunt_version** (String) terragrunt version to use
3132
- **token_id** (String) The token id used for private git repos or for integration with GitLab
3233

3334
### Read-Only

docs/resources/template.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ resource "env0_template_project_assignment" "assignment" {
5959
- **revision** (String) source code revision (branch / tag) to use
6060
- **ssh_keys** (List of Map of String) an array of references to 'data_ssh_key' to use when accessing git over ssh
6161
- **terraform_version** (String) Terraform version to use
62+
- **terragrunt_version** (String) Terragrunt version to use
6263
- **token_id** (String) The token id used for private git repos or for integration with GitLab, you can get this value by using a data resource of an existing Gitlab template or contact our support team
6364
- **type** (String) 'terraform' or 'terragrunt'
6465

env0/data_template.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,12 @@ func dataTemplate() *schema.Resource {
9494
Description: "terraform version to use",
9595
Computed: true,
9696
},
97+
"terragrunt_version": {
98+
Type: schema.TypeString,
99+
Description: "terragrunt version to use",
100+
Computed: true,
101+
Optional: true,
102+
},
97103
"is_gitlab_enterprise": {
98104
Type: schema.TypeBool,
99105
Description: "Does this template use gitlab enterprise repository?",
@@ -128,6 +134,9 @@ func dataTemplateRead(ctx context.Context, d *schema.ResourceData, meta interfac
128134
d.Set("type", template.Type)
129135
d.Set("project_ids", template.ProjectIds)
130136
d.Set("terraform_version", template.TerraformVersion)
137+
if template.TerragruntVersion != "" {
138+
d.Set("terragrunt_version", template.TerragruntVersion)
139+
}
131140
if template.Retry.OnDeploy != nil {
132141
d.Set("retries_on_deploy", template.Retry.OnDeploy.Times)
133142
d.Set("retry_on_deploy_only_when_matches_regex", template.Retry.OnDeploy.ErrorRegex)

env0/resource_template.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,11 @@ func resourceTemplate() *schema.Resource {
119119
Optional: true,
120120
Default: "0.15.1",
121121
},
122+
"terragrunt_version": {
123+
Type: schema.TypeString,
124+
Description: "Terragrunt version to use",
125+
Optional: true,
126+
},
122127
"is_gitlab_enterprise": {
123128
Type: schema.TypeBool,
124129
Description: "Does this template use gitlab enterprise repository?",
@@ -220,11 +225,16 @@ func templateCreatePayloadFromParameters(d *schema.ResourceData) (client.Templat
220225
if terraformVersion, ok := d.GetOk("terraform_version"); ok {
221226
result.TerraformVersion = terraformVersion.(string)
222227
}
223-
228+
if terragruntVersion, ok := d.GetOk("terragrunt_version"); ok {
229+
result.TerragruntVersion = terragruntVersion.(string)
230+
}
224231
if bitbucketClientKey, ok := d.GetOk("bitbucket_client_key"); ok {
225232
result.BitbucketClientKey = bitbucketClientKey.(string)
226233
}
227234

235+
if terragruntVersion, ok := d.GetOk("terragrunt_version"); ok {
236+
result.TerragruntVersion = terragruntVersion.(string)
237+
}
228238
return result, nil
229239
}
230240

tests/integration/004_template/expected_outputs.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
"tested2_template_name": "tested1-",
44
"tested2_template_repository": "https://github.com/env0/templates",
55
"tested1_template_repository": "https://gitlab.com/env0/gitlab-vcs-integration-tests.git",
6-
"tested2_template_path": "second"
6+
"tested2_template_path": "second",
7+
"tg_tg_version" : "0.35.0"
78
}

tests/integration/004_template/main.tf

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,15 @@ resource "env0_template" "tested2" {
4545
terraform_version = "0.15.1"
4646
}
4747

48+
resource "env0_template" "template_tg" {
49+
name = "Template for environment resource - tg"
50+
type = "terragrunt"
51+
repository = "https://github.com/env0/templates"
52+
path = "terragrunt/misc/null-resource"
53+
terraform_version = "0.15.1"
54+
terragrunt_version = "0.35.0"
55+
}
56+
4857
resource "env0_configuration_variable" "in_a_template" {
4958
name = "fake_key"
5059
value = "fake value"
@@ -68,6 +77,12 @@ data "env0_template" "tested1" {
6877
env0_template.tested2]
6978
name = "GitLab Test-${random_string.random.result}"
7079
}
80+
data "env0_template" "template_tg" {
81+
depends_on = [
82+
env0_template.template_tg]
83+
name = "Template for environment resource - tg"
84+
}
85+
7186
output "tested2_template_id" {
7287
value = data.env0_template.tested2.id
7388
}
@@ -86,6 +101,9 @@ output "tested1_template_repository" {
86101
output "tested2_template_path" {
87102
value = data.env0_template.tested2.path
88103
}
104+
output "tg_tg_version" {
105+
value = data.env0_template.template_tg.terragrunt_version
106+
}
89107

90108
data "env0_template" "tested3" {
91109
id = env0_template.tested1.id

tests/integration/012_environment/main.tf

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,3 @@ output "revision" {
3131
value = data.env0_environment.test.revision
3232
}
3333

34-

0 commit comments

Comments
 (0)