Skip to content

Commit c2ce27c

Browse files
committed
New data source gitlab_instance_variables
Refs: #386
1 parent baa9aa1 commit c2ce27c

File tree

4 files changed

+155
-0
lines changed

4 files changed

+155
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
---
2+
# generated by https://github.com/hashicorp/terraform-plugin-docs
3+
page_title: "gitlab_instance_variables Data Source - terraform-provider-gitlab"
4+
subcategory: ""
5+
description: |-
6+
The gitlab_instance_variables data source allows to retrieve all instance-level CI/CD variables.
7+
Upstream API: GitLab REST API docs https://docs.gitlab.com/ee/api/instance_level_ci_variables.html
8+
---
9+
10+
# gitlab_instance_variables (Data Source)
11+
12+
The `gitlab_instance_variables` data source allows to retrieve all instance-level CI/CD variables.
13+
14+
**Upstream API**: [GitLab REST API docs](https://docs.gitlab.com/ee/api/instance_level_ci_variables.html)
15+
16+
17+
18+
<!-- schema generated by tfplugindocs -->
19+
## Schema
20+
21+
### Optional
22+
23+
- `id` (String) The ID of this resource.
24+
25+
### Read-Only
26+
27+
- `variables` (List of Object) The list of variables returned by the search (see [below for nested schema](#nestedatt--variables))
28+
29+
<a id="nestedatt--variables"></a>
30+
### Nested Schema for `variables`
31+
32+
Read-Only:
33+
34+
- `key` (String)
35+
- `masked` (Boolean)
36+
- `protected` (Boolean)
37+
- `value` (String)
38+
- `variable_type` (String)
39+
40+
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package provider
2+
3+
import (
4+
"context"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
8+
"github.com/xanzy/go-gitlab"
9+
)
10+
11+
var _ = registerDataSource("gitlab_instance_variables", func() *schema.Resource {
12+
return &schema.Resource{
13+
Description: `The ` + "`gitlab_instance_variables`" + ` data source allows to retrieve all instance-level CI/CD variables.
14+
15+
**Upstream API**: [GitLab REST API docs](https://docs.gitlab.com/ee/api/instance_level_ci_variables.html)`,
16+
17+
ReadContext: dataSourceGitlabInstanceVariablesRead,
18+
Schema: map[string]*schema.Schema{
19+
"variables": {
20+
Description: "The list of variables returned by the search",
21+
Type: schema.TypeList,
22+
Computed: true,
23+
Elem: &schema.Resource{
24+
Schema: datasourceSchemaFromResourceSchema(gitlabInstanceVariableGetSchema(), nil, nil),
25+
},
26+
},
27+
},
28+
}
29+
})
30+
31+
func dataSourceGitlabInstanceVariablesRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
32+
client := meta.(*gitlab.Client)
33+
34+
options := &gitlab.ListInstanceVariablesOptions{
35+
Page: 1,
36+
PerPage: 20,
37+
}
38+
39+
var variables []*gitlab.InstanceVariable
40+
for options.Page != 0 {
41+
paginatedVariables, resp, err := client.InstanceVariables.ListVariables(options, gitlab.WithContext(ctx))
42+
if err != nil {
43+
return diag.FromErr(err)
44+
}
45+
46+
variables = append(variables, paginatedVariables...)
47+
options.Page = resp.NextPage
48+
}
49+
50+
d.SetId("instance_variables")
51+
if err := d.Set("variables", flattenGitlabInstanceVariables(variables)); err != nil {
52+
return diag.Errorf("failed to set variables to state: %v", err)
53+
}
54+
return nil
55+
}
56+
57+
func flattenGitlabInstanceVariables(variables []*gitlab.InstanceVariable) (values []map[string]interface{}) {
58+
for _, variable := range variables {
59+
values = append(values, gitlabInstanceVariableToStateMap(variable))
60+
}
61+
return values
62+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package provider
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
8+
"github.com/xanzy/go-gitlab"
9+
)
10+
11+
func TestAccDataSourceGitlabInstanceVariables_basic(t *testing.T) {
12+
testAccCheck(t)
13+
14+
testVariables := make([]*gitlab.InstanceVariable, 0)
15+
for i := 0; i < 25; i++ {
16+
testVariables = append(testVariables, testAccCreateInstanceVariable(t))
17+
}
18+
19+
resource.Test(t, resource.TestCase{
20+
PreCheck: func() { testAccPreCheck(t) },
21+
ProviderFactories: providerFactories,
22+
Steps: []resource.TestStep{
23+
{
24+
Config: `data "gitlab_instance_variables" "this" {}`,
25+
Check: resource.ComposeTestCheckFunc(
26+
resource.TestCheckResourceAttr("data.gitlab_instance_variables.this", "variables.#", fmt.Sprintf("%d", len(testVariables))),
27+
resource.TestCheckResourceAttr("data.gitlab_instance_variables.this", "variables.0.key", testVariables[0].Key),
28+
resource.TestCheckResourceAttr("data.gitlab_instance_variables.this", "variables.0.value", testVariables[0].Value),
29+
resource.TestCheckResourceAttr("data.gitlab_instance_variables.this", "variables.24.key", testVariables[24].Key),
30+
resource.TestCheckResourceAttr("data.gitlab_instance_variables.this", "variables.24.value", testVariables[24].Value),
31+
),
32+
},
33+
},
34+
})
35+
}

internal/provider/helper_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,24 @@ func testAccCreateGroupVariable(t *testing.T, groupID int) *gitlab.GroupVariable
387387
return variable
388388
}
389389

390+
func testAccCreateInstanceVariable(t *testing.T) *gitlab.InstanceVariable {
391+
variable, _, err := testGitlabClient.InstanceVariables.CreateVariable(&gitlab.CreateInstanceVariableOptions{
392+
Key: gitlab.String(fmt.Sprintf("test_key_%d", acctest.RandInt())),
393+
Value: gitlab.String("test_value"),
394+
})
395+
if err != nil {
396+
t.Fatal(err)
397+
}
398+
399+
t.Cleanup(func() {
400+
if _, err := testGitlabClient.InstanceVariables.RemoveVariable(variable.Key, nil); err != nil {
401+
t.Fatal(err)
402+
}
403+
})
404+
405+
return variable
406+
}
407+
390408
// testAccGitlabProjectContext encapsulates a GitLab client and test project to be used during an
391409
// acceptance test.
392410
type testAccGitlabProjectContext struct {

0 commit comments

Comments
 (0)