Skip to content

Commit 2b32db8

Browse files
authored
Merge pull request #217 from yossig-aquasec/aqua_labels
feat: adding support for Aqua labels API
2 parents 80956dc + ab2bc0c commit 2b32db8

File tree

10 files changed

+593
-1
lines changed

10 files changed

+593
-1
lines changed

aquasec/data_aqua_labels.go

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package aquasec
2+
3+
import (
4+
"context"
5+
"log"
6+
7+
"github.com/aquasecurity/terraform-provider-aquasec/client"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
10+
)
11+
12+
func dataSourceAquaLabels() *schema.Resource {
13+
return &schema.Resource{
14+
Description: "The data source `aquasec_aqua_labels` provides a method to query all aqua labels within the Aqua account management." +
15+
"The fields returned from this query are detailed in the Schema section below.",
16+
ReadContext: aquaLabelRead,
17+
Schema: map[string]*schema.Schema{
18+
"aqua_labels": {
19+
Type: schema.TypeList,
20+
Computed: true,
21+
Elem: &schema.Resource{
22+
Schema: map[string]*schema.Schema{
23+
"name": {
24+
Type: schema.TypeString,
25+
Description: "Aqua label name.",
26+
Computed: true,
27+
},
28+
"description": {
29+
Type: schema.TypeString,
30+
Description: "Aqua label description.",
31+
Computed: true,
32+
},
33+
"created": {
34+
Type: schema.TypeString,
35+
Description: "The creation date of the Aqua label.",
36+
Computed: true,
37+
},
38+
"author": {
39+
Type: schema.TypeString,
40+
Description: "The name of the user who created the Aqua label.",
41+
Computed: true,
42+
},
43+
},
44+
},
45+
},
46+
},
47+
}
48+
}
49+
50+
func aquaLabelRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
51+
log.Println("[DEBUG] inside resourceAquaLabelRead")
52+
c := m.(*client.Client)
53+
result, err := c.GetAquaLabels()
54+
55+
if err != nil {
56+
return diag.FromErr(err)
57+
}
58+
59+
id := ""
60+
aquaLabels := make([]interface{}, len(result.AquaLabels), len(result.AquaLabels))
61+
62+
for i, aquaLabel := range result.AquaLabels {
63+
id = id + aquaLabel.Name
64+
al := make(map[string]interface{})
65+
al["name"] = aquaLabel.Name
66+
al["description"] = aquaLabel.Description
67+
al["created"] = aquaLabel.Created
68+
al["author"] = aquaLabel.Author
69+
aquaLabels[i] = al
70+
}
71+
72+
d.SetId(id)
73+
if err := d.Set("aqua_labels", aquaLabels); err != nil {
74+
return diag.FromErr(err)
75+
}
76+
return nil
77+
}

aquasec/data_aqua_labels_test.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package aquasec
2+
3+
import (
4+
"fmt"
5+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
6+
"testing"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
10+
)
11+
12+
func TestAquasecAquaLabelsDatasource(t *testing.T) {
13+
t.Parallel()
14+
name := acctest.RandomWithPrefix("terraform-test")
15+
description := "terraform-test"
16+
resource.Test(t, resource.TestCase{
17+
PreCheck: func() { testAccPreCheck(t) },
18+
Providers: testAccProviders,
19+
Steps: []resource.TestStep{
20+
{
21+
Config: testAccCheckAquasecAquaLabelsDataSource(name, description),
22+
Check: testAccCheckAquasecAquaLabelsDataSourceExists("data.aquasec_aqua_labels.test_aqua_labels"),
23+
},
24+
},
25+
})
26+
}
27+
28+
func testAccCheckAquasecAquaLabelsDataSource(name, description string) string {
29+
return fmt.Sprintf(`
30+
resource "aquasec_aqua_label" "new" {
31+
name = "%s"
32+
description = "%s"
33+
}
34+
35+
data "aquasec_aqua_labels" "test_aqua_labels" {
36+
}
37+
`, name, description)
38+
39+
}
40+
41+
func testAccCheckAquasecAquaLabelsDataSourceExists(n string) resource.TestCheckFunc {
42+
return func(s *terraform.State) error {
43+
rs, ok := s.RootModule().Resources[n]
44+
45+
if !ok {
46+
return NewNotFoundErrorf("%s in state", n)
47+
}
48+
49+
if rs.Primary.ID == "" {
50+
return NewNotFoundErrorf("Id for %s in state", n)
51+
}
52+
53+
return nil
54+
}
55+
}

aquasec/provider.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ func Provider(v string) *schema.Provider {
8484
"aquasec_permissions_sets": resourcePermissionSet(),
8585
//"aquasec_sso": resourceSSO(),
8686
"aquasec_role_mapping": resourceRoleMapping(),
87+
"aquasec_aqua_label": resourceAquaLabels(),
8788
//saas
8889
"aquasec_group": resourceGroup(),
8990
"aquasec_user_saas": resourceUserSaas(),
@@ -107,9 +108,10 @@ func Provider(v string) *schema.Provider {
107108
"aquasec_gateways": dataSourceGateways(),
108109
"aquasec_application_scope": dataApplicationScope(),
109110
"aquasec_permissions_sets": dataSourcePermissionsSets(),
110-
"aquasec_integration_state": dataIntegrationState(),
111+
"aquasec_integration_state": dataIntegrationState(),
111112
//"aquasec_sso": dataSourceSSO(),
112113
"aquasec_roles_mapping": dataSourceRolesMapping(),
114+
"aquasec_aqua_labels": dataSourceAquaLabels(),
113115
//saas:
114116
"aquasec_groups": dataSourceGroups(),
115117
"aquasec_users_saas": dataSourceUsersSaas(),
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package aquasec
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
10+
)
11+
12+
func TestAquasecresourceAquaLabel(t *testing.T) {
13+
t.Parallel()
14+
name := acctest.RandomWithPrefix("terraform-test")
15+
description := "terraform-test"
16+
resource.Test(t, resource.TestCase{
17+
PreCheck: func() { testAccPreCheck(t) },
18+
Providers: testAccProviders,
19+
CheckDestroy: CheckDestroy("aquasec_aqua_label.new"),
20+
Steps: []resource.TestStep{
21+
{
22+
Config: testAccCheckAquasecAquaLabel(name, description),
23+
Check: resource.ComposeTestCheckFunc(
24+
testAccCheckAquasecAquaLabelExists("aquasec_aqua_label.new"),
25+
),
26+
},
27+
{
28+
ResourceName: "aquasec_aqua_label.new",
29+
ImportState: true,
30+
ImportStateVerify: true,
31+
},
32+
},
33+
})
34+
}
35+
36+
func testAccCheckAquasecAquaLabel(name, description string) string {
37+
return fmt.Sprintf(`
38+
resource "aquasec_aqua_label" "new" {
39+
name = "%s"
40+
description = "%s"
41+
}`, name, description)
42+
43+
}
44+
45+
func testAccCheckAquasecAquaLabelExists(n string) resource.TestCheckFunc {
46+
return func(s *terraform.State) error {
47+
rs, ok := s.RootModule().Resources[n]
48+
49+
if !ok {
50+
return NewNotFoundErrorf("%s in state", n)
51+
}
52+
53+
if rs.Primary.ID == "" {
54+
return NewNotFoundErrorf("ID for %s in state", n)
55+
}
56+
57+
return nil
58+
}
59+
}

aquasec/resource_aqua_labels.go

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
package aquasec
2+
3+
import (
4+
"log"
5+
6+
"github.com/aquasecurity/terraform-provider-aquasec/client"
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
8+
)
9+
10+
func resourceAquaLabels() *schema.Resource {
11+
return &schema.Resource{
12+
Description: "The data source `aquasec_aqua_labels` provides a method to query all aqua labels within the Aqua account management." +
13+
"The fields returned from this query are detailed in the Schema section below.",
14+
Read: resourceAquaLabelRead,
15+
Create: resourceAquaLabelCreate,
16+
Update: resourceAquaLabelUpdate,
17+
Delete: resourceAquaLabelDelete,
18+
Importer: &schema.ResourceImporter{
19+
StateContext: schema.ImportStatePassthroughContext,
20+
},
21+
Schema: map[string]*schema.Schema{
22+
"name": {
23+
Type: schema.TypeString,
24+
Description: "Aqua label name.",
25+
Required: true,
26+
},
27+
"description": {
28+
Type: schema.TypeString,
29+
Description: "Aqua label description.",
30+
Optional: true,
31+
},
32+
"created": {
33+
Type: schema.TypeString,
34+
Description: "The creation date of the Aqua label.",
35+
Computed: true,
36+
},
37+
"author": {
38+
Type: schema.TypeString,
39+
Description: "The name of the user who created the Aqua label.",
40+
Computed: true,
41+
},
42+
},
43+
}
44+
}
45+
46+
func resourceAquaLabelCreate(d *schema.ResourceData, m interface{}) error {
47+
ac := m.(*client.Client)
48+
aquaLabel := client.AquaLabel{
49+
Name: d.Get("name").(string),
50+
}
51+
52+
description, ok := d.GetOk("description")
53+
if ok {
54+
aquaLabel.Description = description.(string)
55+
}
56+
57+
err := ac.CreateAquaLabel(&aquaLabel)
58+
59+
if err != nil {
60+
return err
61+
}
62+
d.SetId(aquaLabel.Name)
63+
return resourceAquaLabelRead(d, m)
64+
}
65+
66+
func resourceAquaLabelRead(d *schema.ResourceData, m interface{}) error {
67+
log.Println("[DEBUG] inside resourceAquaLabelRead")
68+
c := m.(*client.Client)
69+
r, err := c.GetAquaLabel(d.Id())
70+
71+
if err != nil {
72+
return err
73+
}
74+
d.Set("name", r.Name)
75+
d.Set("description", r.Description)
76+
d.Set("created", r.Created)
77+
d.Set("author", r.Author)
78+
79+
return nil
80+
}
81+
82+
func resourceAquaLabelUpdate(d *schema.ResourceData, m interface{}) error {
83+
c := m.(*client.Client)
84+
85+
if d.HasChanges("description") {
86+
aqua_lable := client.AquaLabel{
87+
Name: d.Get("name").(string),
88+
}
89+
90+
description, ok := d.GetOk("description")
91+
if ok {
92+
aqua_lable.Description = description.(string)
93+
}
94+
95+
err := c.UpdateAquaLabel(&aqua_lable)
96+
97+
if err != nil {
98+
return err
99+
}
100+
d.SetId(d.Get("name").(string))
101+
return nil
102+
}
103+
return resourceAquaLabelRead(d, m)
104+
}
105+
106+
func resourceAquaLabelDelete(d *schema.ResourceData, m interface{}) error {
107+
c := m.(*client.Client)
108+
id := d.Id()
109+
err := c.DeleteAquaLabel(id)
110+
if err == nil {
111+
d.SetId("")
112+
} else {
113+
return err
114+
}
115+
return nil
116+
}

0 commit comments

Comments
 (0)