Skip to content

Commit 2dda93b

Browse files
authored
feat: add new attributes to git resource and datasource (#890)
* feat: add new attributes to git resource and datasource Signed-off-by: Mauritz Uphoff <mauritz.uphoff@stackit.cloud> * review changes Signed-off-by: Mauritz Uphoff <mauritz.uphoff@stackit.cloud> * review changes 2 Signed-off-by: Mauritz Uphoff <mauritz.uphoff@stackit.cloud> --------- Signed-off-by: Mauritz Uphoff <mauritz.uphoff@stackit.cloud>
1 parent 3c5c8e0 commit 2dda93b

9 files changed

Lines changed: 566 additions & 91 deletions

File tree

docs/data-sources/git.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ data "stackit_git" "git" {
3232

3333
### Read-Only
3434

35+
- `acl` (List of String) Restricted ACL for instance access.
36+
- `consumed_disk` (String) How many bytes of disk space is consumed.
37+
- `consumed_object_storage` (String) How many bytes of Object Storage is consumed.
38+
- `created` (String) Instance creation timestamp in RFC3339 format.
39+
- `flavor` (String) Instance flavor. If not provided, defaults to git-100. For a list of available flavors, refer to our API documentation: `https://docs.api.stackit.cloud/documentation/git/version/v1beta`
3540
- `id` (String) Terraform's internal resource ID, structured as "`project_id`,`instance_id`".
3641
- `name` (String) Unique name linked to the git instance.
3742
- `url` (String) Url linked to the git instance.

docs/resources/git.md

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ page_title: "stackit_git Resource - stackit"
44
subcategory: ""
55
description: |-
66
Git Instance resource schema.
7-
~> This resource is in beta and may be subject to breaking changes in the future. Use with caution. See our guide https://registry.terraform.io/providers/stackitcloud/stackit/latest/docs/guides/opting_into_beta_resources for how to opt-in to use beta resources.
7+
~> This resource is in beta and may be subject to breaking changes in the future. Use with caution. See our guide https://registry.terraform.io/providers/stackitcloud/stackit/latest/docs/guides/opting_into_beta_resources for how to opt-in to use beta resources. This resource currently does not support updates. Changing the ACLs, flavor, or name will trigger resource recreation. Update functionality will be added soon. In the meantime, please proceed with caution. To update these attributes, please open a support ticket.
88
---
99

1010
# stackit_git (Resource)
1111

1212
Git Instance resource schema.
1313

14-
~> This resource is in beta and may be subject to breaking changes in the future. Use with caution. See our [guide](https://registry.terraform.io/providers/stackitcloud/stackit/latest/docs/guides/opting_into_beta_resources) for how to opt-in to use beta resources.
14+
~> This resource is in beta and may be subject to breaking changes in the future. Use with caution. See our [guide](https://registry.terraform.io/providers/stackitcloud/stackit/latest/docs/guides/opting_into_beta_resources) for how to opt-in to use beta resources. This resource currently does not support updates. Changing the ACLs, flavor, or name will trigger resource recreation. Update functionality will be added soon. In the meantime, please proceed with caution. To update these attributes, please open a support ticket.
1515

1616
## Example Usage
1717

@@ -20,6 +20,15 @@ resource "stackit_git" "git" {
2020
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
2121
name = "git-example-instance"
2222
}
23+
24+
resource "stackit_git" "git" {
25+
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
26+
name = "git-example-instance"
27+
acl = [
28+
"0.0.0.0/0"
29+
]
30+
flavor = "git-100"
31+
}
2332
```
2433

2534
<!-- schema generated by tfplugindocs -->
@@ -30,8 +39,16 @@ resource "stackit_git" "git" {
3039
- `name` (String) Unique name linked to the git instance.
3140
- `project_id` (String) STACKIT project ID to which the git instance is associated.
3241

42+
### Optional
43+
44+
- `acl` (List of String) Restricted ACL for instance access.
45+
- `flavor` (String) Instance flavor. If not provided, defaults to git-100. For a list of available flavors, refer to our API documentation: `https://docs.api.stackit.cloud/documentation/git/version/v1beta`
46+
3347
### Read-Only
3448

49+
- `consumed_disk` (String) How many bytes of disk space is consumed.
50+
- `consumed_object_storage` (String) How many bytes of Object Storage is consumed.
51+
- `created` (String) Instance creation timestamp in RFC3339 format.
3552
- `id` (String) Terraform's internal resource ID, structured as "`project_id`,`instance_id`".
3653
- `instance_id` (String) ID linked to the git instance.
3754
- `url` (String) Url linked to the git instance.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
11
resource "stackit_git" "git" {
22
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
33
name = "git-example-instance"
4+
}
5+
6+
resource "stackit_git" "git" {
7+
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
8+
name = "git-example-instance"
9+
acl = [
10+
"0.0.0.0/0"
11+
]
12+
flavor = "git-100"
413
}

stackit/internal/services/git/git_acc_test.go

Lines changed: 190 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -19,58 +19,200 @@ import (
1919
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/testutil"
2020
)
2121

22-
//go:embed testdata/resource.tf
23-
var resourceConfig string
22+
//go:embed testdata/resource-min.tf
23+
var resourceMin string
2424

25-
var name = fmt.Sprintf("git-%s-instance", acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum))
26-
var nameUpdated = fmt.Sprintf("git-%s-instance", acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum))
25+
//go:embed testdata/resource-max.tf
26+
var resourceMax string
2727

28-
var testConfigVars = config.Variables{
28+
var nameMin = fmt.Sprintf("git-min-%s-instance", acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum))
29+
var nameMinUpdated = fmt.Sprintf("git-min-%s-instance", acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum))
30+
var nameMax = fmt.Sprintf("git-max-%s-instance", acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum))
31+
var nameMaxUpdated = fmt.Sprintf("git-max-%s-instance", acctest.RandStringFromCharSet(5, acctest.CharSetAlphaNum))
32+
var aclUpdated = "192.168.1.0/32"
33+
34+
var testConfigVarsMin = config.Variables{
35+
"project_id": config.StringVariable(testutil.ProjectId),
36+
"name": config.StringVariable(nameMin),
37+
}
38+
39+
var testConfigVarsMax = config.Variables{
2940
"project_id": config.StringVariable(testutil.ProjectId),
30-
"name": config.StringVariable(name),
41+
"name": config.StringVariable(nameMax),
42+
"acl": config.StringVariable("192.168.0.0/16"),
43+
"flavor": config.StringVariable("git-100"),
3144
}
3245

33-
func testConfigVarsUpdated() config.Variables {
34-
tempConfig := make(config.Variables, len(testConfigVars))
35-
maps.Copy(tempConfig, testConfigVars)
46+
func testConfigVarsMinUpdated() config.Variables {
47+
tempConfig := make(config.Variables, len(testConfigVarsMin))
48+
maps.Copy(tempConfig, testConfigVarsMin)
3649
// update git instance to a new name
3750
// should trigger creating a new instance
38-
tempConfig["name"] = config.StringVariable(nameUpdated)
51+
tempConfig["name"] = config.StringVariable(nameMinUpdated)
3952
return tempConfig
4053
}
4154

42-
func TestGitInstance(t *testing.T) {
55+
func testConfigVarsMaxUpdated() config.Variables {
56+
tempConfig := make(config.Variables, len(testConfigVarsMax))
57+
maps.Copy(tempConfig, testConfigVarsMax)
58+
// update git instance to a new name
59+
// should trigger creating a new instance
60+
tempConfig["name"] = config.StringVariable(nameMaxUpdated)
61+
tempConfig["acl"] = config.StringVariable(aclUpdated)
62+
63+
return tempConfig
64+
}
65+
66+
func TestAccGitMin(t *testing.T) {
67+
resource.Test(t, resource.TestCase{
68+
ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories,
69+
CheckDestroy: testAccCheckGitInstanceDestroy,
70+
Steps: []resource.TestStep{
71+
// Creation
72+
{
73+
ConfigVariables: testConfigVarsMin,
74+
Config: testutil.GitProviderConfig() + resourceMin,
75+
Check: resource.ComposeAggregateTestCheckFunc(
76+
resource.TestCheckResourceAttr("stackit_git.git", "project_id", testutil.ConvertConfigVariable(testConfigVarsMin["project_id"])),
77+
resource.TestCheckResourceAttr("stackit_git.git", "name", testutil.ConvertConfigVariable(testConfigVarsMin["name"])),
78+
resource.TestCheckResourceAttrSet("stackit_git.git", "url"),
79+
resource.TestCheckResourceAttrSet("stackit_git.git", "version"),
80+
resource.TestCheckResourceAttrSet("stackit_git.git", "instance_id"),
81+
resource.TestCheckResourceAttrSet("stackit_git.git", "created"),
82+
resource.TestCheckResourceAttrSet("stackit_git.git", "consumed_object_storage"),
83+
resource.TestCheckResourceAttrSet("stackit_git.git", "consumed_disk"),
84+
resource.TestCheckResourceAttrSet("stackit_git.git", "flavor"),
85+
),
86+
},
87+
// Data source
88+
{
89+
ConfigVariables: testConfigVarsMin,
90+
Config: fmt.Sprintf(`
91+
%s
92+
93+
data "stackit_git" "git" {
94+
project_id = stackit_git.git.project_id
95+
instance_id = stackit_git.git.instance_id
96+
}
97+
`, testutil.GitProviderConfig()+resourceMin,
98+
),
99+
Check: resource.ComposeAggregateTestCheckFunc(
100+
// Instance
101+
resource.TestCheckResourceAttr("data.stackit_git.git", "project_id", testutil.ConvertConfigVariable(testConfigVarsMin["project_id"])),
102+
resource.TestCheckResourceAttrPair(
103+
"stackit_git.git", "project_id",
104+
"data.stackit_git.git", "project_id",
105+
),
106+
resource.TestCheckResourceAttrPair(
107+
"stackit_git.git", "instance_id",
108+
"data.stackit_git.git", "instance_id",
109+
),
110+
resource.TestCheckResourceAttrPair(
111+
"stackit_git.git", "name",
112+
"data.stackit_git.git", "name",
113+
),
114+
resource.TestCheckResourceAttrPair(
115+
"stackit_git.git", "url",
116+
"data.stackit_git.git", "url",
117+
),
118+
resource.TestCheckResourceAttrPair(
119+
"stackit_git.git", "version",
120+
"data.stackit_git.git", "version",
121+
),
122+
resource.TestCheckResourceAttrPair(
123+
"stackit_git.git", "created",
124+
"data.stackit_git.git", "created",
125+
),
126+
resource.TestCheckResourceAttrPair(
127+
"stackit_git.git", "consumed_object_storage",
128+
"data.stackit_git.git", "consumed_object_storage",
129+
),
130+
resource.TestCheckResourceAttrPair(
131+
"stackit_git.git", "consumed_disk",
132+
"data.stackit_git.git", "consumed_disk",
133+
),
134+
resource.TestCheckResourceAttrPair(
135+
"stackit_git.git", "flavor",
136+
"data.stackit_git.git", "flavor",
137+
),
138+
),
139+
},
140+
// Import
141+
{
142+
ConfigVariables: testConfigVarsMin,
143+
ResourceName: "stackit_git.git",
144+
ImportStateIdFunc: func(s *terraform.State) (string, error) {
145+
r, ok := s.RootModule().Resources["stackit_git.git"]
146+
if !ok {
147+
return "", fmt.Errorf("couldn't find resource stackit_git.git")
148+
}
149+
instanceId, ok := r.Primary.Attributes["instance_id"]
150+
if !ok {
151+
return "", fmt.Errorf("couldn't find attribute instance_id")
152+
}
153+
return fmt.Sprintf("%s,%s", testutil.ProjectId, instanceId), nil
154+
},
155+
ImportState: true,
156+
ImportStateVerify: true,
157+
},
158+
// Update
159+
{
160+
ConfigVariables: testConfigVarsMinUpdated(),
161+
Config: testutil.GitProviderConfig() + resourceMin,
162+
Check: resource.ComposeAggregateTestCheckFunc(
163+
resource.TestCheckResourceAttr("stackit_git.git", "project_id", testutil.ConvertConfigVariable(testConfigVarsMinUpdated()["project_id"])),
164+
resource.TestCheckResourceAttr("stackit_git.git", "name", testutil.ConvertConfigVariable(testConfigVarsMinUpdated()["name"])),
165+
resource.TestCheckResourceAttrSet("stackit_git.git", "url"),
166+
resource.TestCheckResourceAttrSet("stackit_git.git", "version"),
167+
resource.TestCheckResourceAttrSet("stackit_git.git", "instance_id"),
168+
resource.TestCheckResourceAttrSet("stackit_git.git", "created"),
169+
resource.TestCheckResourceAttrSet("stackit_git.git", "consumed_object_storage"),
170+
resource.TestCheckResourceAttrSet("stackit_git.git", "consumed_disk"),
171+
resource.TestCheckResourceAttrSet("stackit_git.git", "flavor"),
172+
),
173+
},
174+
// Deletion is done by the framework implicitly
175+
},
176+
})
177+
}
178+
179+
func TestAccGitMax(t *testing.T) {
43180
resource.Test(t, resource.TestCase{
44181
ProtoV6ProviderFactories: testutil.TestAccProtoV6ProviderFactories,
45182
CheckDestroy: testAccCheckGitInstanceDestroy,
46183
Steps: []resource.TestStep{
47184
// Creation
48185
{
49-
ConfigVariables: testConfigVars,
50-
Config: testutil.GitProviderConfig() + resourceConfig,
186+
ConfigVariables: testConfigVarsMax,
187+
Config: testutil.GitProviderConfig() + resourceMax,
51188
Check: resource.ComposeAggregateTestCheckFunc(
52-
resource.TestCheckResourceAttr("stackit_git.git", "project_id", testutil.ConvertConfigVariable(testConfigVars["project_id"])),
53-
resource.TestCheckResourceAttr("stackit_git.git", "name", testutil.ConvertConfigVariable(testConfigVars["name"])),
189+
resource.TestCheckResourceAttr("stackit_git.git", "project_id", testutil.ConvertConfigVariable(testConfigVarsMax["project_id"])),
190+
resource.TestCheckResourceAttr("stackit_git.git", "name", testutil.ConvertConfigVariable(testConfigVarsMax["name"])),
191+
resource.TestCheckResourceAttr("stackit_git.git", "flavor", testutil.ConvertConfigVariable(testConfigVarsMax["flavor"])),
192+
resource.TestCheckResourceAttr("stackit_git.git", "acl.0", testutil.ConvertConfigVariable(testConfigVarsMax["acl"])),
54193
resource.TestCheckResourceAttrSet("stackit_git.git", "url"),
55194
resource.TestCheckResourceAttrSet("stackit_git.git", "version"),
56195
resource.TestCheckResourceAttrSet("stackit_git.git", "instance_id"),
196+
resource.TestCheckResourceAttrSet("stackit_git.git", "created"),
197+
resource.TestCheckResourceAttrSet("stackit_git.git", "consumed_object_storage"),
198+
resource.TestCheckResourceAttrSet("stackit_git.git", "consumed_disk"),
57199
),
58200
},
59201
// Data source
60202
{
61-
ConfigVariables: testConfigVars,
203+
ConfigVariables: testConfigVarsMax,
62204
Config: fmt.Sprintf(`
63205
%s
64206
65207
data "stackit_git" "git" {
66208
project_id = stackit_git.git.project_id
67209
instance_id = stackit_git.git.instance_id
68210
}
69-
`, testutil.GitProviderConfig()+resourceConfig,
211+
`, testutil.GitProviderConfig()+resourceMax,
70212
),
71213
Check: resource.ComposeAggregateTestCheckFunc(
72214
// Instance
73-
resource.TestCheckResourceAttr("data.stackit_git.git", "project_id", testutil.ConvertConfigVariable(testConfigVars["project_id"])),
215+
resource.TestCheckResourceAttr("data.stackit_git.git", "project_id", testutil.ConvertConfigVariable(testConfigVarsMax["project_id"])),
74216
resource.TestCheckResourceAttrPair(
75217
"stackit_git.git", "project_id",
76218
"data.stackit_git.git", "project_id",
@@ -91,11 +233,31 @@ func TestGitInstance(t *testing.T) {
91233
"stackit_git.git", "version",
92234
"data.stackit_git.git", "version",
93235
),
236+
resource.TestCheckResourceAttrPair(
237+
"stackit_git.git", "created",
238+
"data.stackit_git.git", "created",
239+
),
240+
resource.TestCheckResourceAttrPair(
241+
"stackit_git.git", "consumed_object_storage",
242+
"data.stackit_git.git", "consumed_object_storage",
243+
),
244+
resource.TestCheckResourceAttrPair(
245+
"stackit_git.git", "consumed_disk",
246+
"data.stackit_git.git", "consumed_disk",
247+
),
248+
resource.TestCheckResourceAttrPair(
249+
"stackit_git.git", "flavor",
250+
"data.stackit_git.git", "flavor",
251+
),
252+
resource.TestCheckResourceAttrPair(
253+
"stackit_git.git", "acl",
254+
"data.stackit_git.git", "acl",
255+
),
94256
),
95257
},
96258
// Import
97259
{
98-
ConfigVariables: testConfigVars,
260+
ConfigVariables: testConfigVarsMax,
99261
ResourceName: "stackit_git.git",
100262
ImportStateIdFunc: func(s *terraform.State) (string, error) {
101263
r, ok := s.RootModule().Resources["stackit_git.git"]
@@ -113,14 +275,19 @@ func TestGitInstance(t *testing.T) {
113275
},
114276
// Update
115277
{
116-
ConfigVariables: testConfigVarsUpdated(),
117-
Config: testutil.GitProviderConfig() + resourceConfig,
278+
ConfigVariables: testConfigVarsMaxUpdated(),
279+
Config: testutil.GitProviderConfig() + resourceMax,
118280
Check: resource.ComposeAggregateTestCheckFunc(
119-
resource.TestCheckResourceAttr("stackit_git.git", "project_id", testutil.ConvertConfigVariable(testConfigVars["project_id"])),
120-
resource.TestCheckResourceAttr("stackit_git.git", "name", testutil.ConvertConfigVariable(testConfigVarsUpdated()["name"])),
281+
resource.TestCheckResourceAttr("stackit_git.git", "project_id", testutil.ConvertConfigVariable(testConfigVarsMaxUpdated()["project_id"])),
282+
resource.TestCheckResourceAttr("stackit_git.git", "name", testutil.ConvertConfigVariable(testConfigVarsMaxUpdated()["name"])),
283+
resource.TestCheckResourceAttr("stackit_git.git", "flavor", testutil.ConvertConfigVariable(testConfigVarsMaxUpdated()["flavor"])),
284+
resource.TestCheckResourceAttr("stackit_git.git", "acl.0", testutil.ConvertConfigVariable(testConfigVarsMaxUpdated()["acl"])),
121285
resource.TestCheckResourceAttrSet("stackit_git.git", "url"),
122286
resource.TestCheckResourceAttrSet("stackit_git.git", "version"),
123287
resource.TestCheckResourceAttrSet("stackit_git.git", "instance_id"),
288+
resource.TestCheckResourceAttrSet("stackit_git.git", "created"),
289+
resource.TestCheckResourceAttrSet("stackit_git.git", "consumed_object_storage"),
290+
resource.TestCheckResourceAttrSet("stackit_git.git", "consumed_disk"),
124291
),
125292
},
126293
// Deletion is done by the framework implicitly

stackit/internal/services/git/instance/datasource.go

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/hashicorp/terraform-plugin-framework/datasource"
1313
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
1414
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
15+
"github.com/hashicorp/terraform-plugin-framework/types"
1516
"github.com/hashicorp/terraform-plugin-log/tflog"
1617
"github.com/stackitcloud/stackit-sdk-go/core/oapierror"
1718
"github.com/stackitcloud/stackit-sdk-go/services/git"
@@ -86,6 +87,27 @@ func (g *gitDataSource) Schema(_ context.Context, _ datasource.SchemaRequest, re
8687
validate.NoSeparator(),
8788
},
8889
},
90+
"acl": schema.ListAttribute{
91+
Description: descriptions["acl"],
92+
Computed: true,
93+
ElementType: types.StringType,
94+
},
95+
"consumed_disk": schema.StringAttribute{
96+
Description: descriptions["consumed_disk"],
97+
Computed: true,
98+
},
99+
"consumed_object_storage": schema.StringAttribute{
100+
Description: descriptions["consumed_object_storage"],
101+
Computed: true,
102+
},
103+
"created": schema.StringAttribute{
104+
Description: descriptions["created"],
105+
Computed: true,
106+
},
107+
"flavor": schema.StringAttribute{
108+
Description: descriptions["flavor"],
109+
Computed: true,
110+
},
89111
"name": schema.StringAttribute{
90112
Description: descriptions["name"],
91113
Computed: true,
@@ -127,7 +149,7 @@ func (g *gitDataSource) Read(ctx context.Context, req datasource.ReadRequest, re
127149
return
128150
}
129151

130-
err = mapFields(gitInstanceResp, &model)
152+
err = mapFields(ctx, gitInstanceResp, &model)
131153
if err != nil {
132154
core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading git instance", fmt.Sprintf("Processing API response: %v", err))
133155
return

0 commit comments

Comments
 (0)