Skip to content

Commit a775f6d

Browse files
authored
support sub account on incapsula_mtls_imperva_to_origin_certificate_site_association resource (#540)
* add resource_test_utils.go class with method to print the state * support sub account on incapsula_mtls_imperva_to_origin_certificate_site_association resource * support sub account on incapsula_mtls_imperva_to_origin_certificate_site_association resource
1 parent fcc9ad6 commit a775f6d

10 files changed

+72
-25
lines changed

incapsula/client_mtls_imperva_to_origin_certificate_site_association.go

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ import (
88
"net/http"
99
)
1010

11-
func (c *Client) GetSiteMtlsCertificateAssociation(certificateID, siteID int) (bool, error) {
11+
func (c *Client) GetSiteMtlsCertificateAssociation(certificateID, siteID int, accountId string) (bool, error) {
1212
log.Printf("[INFO] Getting Site to mutual TLS Imperva to Origin Certificate association for Site ID %d", siteID)
1313
reqURL := fmt.Sprintf("%s%s/%d/associated-sites/%d", c.config.BaseURLAPI, endpointMTLSCertificate, certificateID, siteID)
14-
14+
if accountId != "" {
15+
reqURL = fmt.Sprintf("%s?caid=%s", reqURL, accountId)
16+
}
1517
resp, err := c.DoJsonRequestWithHeaders(http.MethodGet, reqURL, nil, "ReadSiteMtlsImpervaToOriginCertifiateAssociation")
1618
if err != nil {
1719
return false, fmt.Errorf("[ERROR] Error getting Site to mutual TLS Imperva to Origin Certificate association for Site ID %d: %s", siteID, err)
@@ -31,10 +33,12 @@ func (c *Client) GetSiteMtlsCertificateAssociation(certificateID, siteID int) (b
3133
}
3234
}
3335

34-
func (c *Client) CreateSiteMtlsCertificateAssociation(certificateID, siteID int) error {
36+
func (c *Client) CreateSiteMtlsCertificateAssociation(certificateID, siteID int, accountId string) error {
3537
log.Printf("[INFO] Updating Site to mutual TLS Imperva to Origin Certificate association for certificate ID %d, Site ID %d", certificateID, siteID)
3638
reqURL := fmt.Sprintf("%s%s/%d/associated-sites/%d", c.config.BaseURLAPI, endpointMTLSCertificate, certificateID, siteID)
37-
39+
if accountId != "" {
40+
reqURL = fmt.Sprintf("%s?caid=%s", reqURL, accountId)
41+
}
3842
resp, err := c.DoJsonRequestWithHeaders(http.MethodPut, reqURL, nil, CreateSiteMtlsImpervaToOriginCertifiateAssociation)
3943
if err != nil {
4044
return fmt.Errorf("[ERROR] Error creating Incapsula Site to Imperva to Origin mutual TLS Certificate Association for certificate ID %d, Site ID %d\n%s", certificateID, siteID, err)
@@ -51,10 +55,12 @@ func (c *Client) CreateSiteMtlsCertificateAssociation(certificateID, siteID int)
5155
return nil
5256
}
5357

54-
func (c *Client) DeleteSiteMtlsCertificateAssociation(certificateID, siteID int) error {
58+
func (c *Client) DeleteSiteMtlsCertificateAssociation(certificateID, siteID int, accountId string) error {
5559
log.Printf("[INFO] Unassigning Site to mutual TLS Imperva to Origin Certificate association for certificate ID %d, Site ID %d", certificateID, siteID)
5660
reqURL := fmt.Sprintf("%s%s/%d/associated-sites/%d", c.config.BaseURLAPI, endpointMTLSCertificate, certificateID, siteID)
57-
61+
if accountId != "" {
62+
reqURL = fmt.Sprintf("%s?caid=%s", reqURL, accountId)
63+
}
5864
resp, err := c.DoJsonRequestWithHeaders(http.MethodDelete, reqURL, nil, DeleteSiteMtlsImpervaToOriginCertifiateAssociation)
5965
if err != nil {
6066
return fmt.Errorf("[ERROR] Error deleting Incapsula Site to Imperva to Origin mutual TLS Certificate Association for certificate ID %d for Site ID %d\n%s", certificateID, siteID, err)

incapsula/client_mtls_imperva_to_origin_certificate_site_association_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ func TestClientGetSiteMtlsCertificateAssociationBadConnection(t *testing.T) {
1919
siteID := 42
2020
certId := 100
2121

22-
_, err := client.GetSiteMtlsCertificateAssociation(certId, siteID)
22+
_, err := client.GetSiteMtlsCertificateAssociation(certId, siteID, "")
2323
if err == nil {
2424
t.Errorf("Should have received an error")
2525
}
@@ -49,7 +49,7 @@ func TestClientGetSiteMtlsCertificateAssociationBadJSON(t *testing.T) {
4949
config := &Config{APIID: apiID, APIKey: apiKey, BaseURL: server.URL, BaseURLRev2: server.URL, BaseURLAPI: server.URL}
5050
client := &Client{config: config, httpClient: &http.Client{}}
5151

52-
certificateExists, err := client.GetSiteMtlsCertificateAssociation(certifiateID, siteID)
52+
certificateExists, err := client.GetSiteMtlsCertificateAssociation(certifiateID, siteID, "")
5353

5454
if err == nil {
5555
t.Errorf("Should have received an error")
@@ -95,7 +95,7 @@ func TestClientGetSiteMtlsCertificateAssociationInvalidConfig(t *testing.T) {
9595
config := &Config{APIID: apiID, APIKey: apiKey, BaseURL: server.URL, BaseURLRev2: server.URL, BaseURLAPI: server.URL}
9696
client := &Client{config: config, httpClient: &http.Client{}}
9797

98-
certificateExists, err := client.GetSiteMtlsCertificateAssociation(certifiateID, siteID)
98+
certificateExists, err := client.GetSiteMtlsCertificateAssociation(certifiateID, siteID, "")
9999

100100
if err == nil {
101101
t.Errorf("Should have received an error")
@@ -129,7 +129,7 @@ func TestClientGetSiteMtlsCertificateAssociationValidConfig(t *testing.T) {
129129
config := &Config{APIID: apiID, APIKey: apiKey, BaseURL: server.URL, BaseURLRev2: server.URL, BaseURLAPI: server.URL}
130130
client := &Client{config: config, httpClient: &http.Client{}}
131131

132-
certificateExists, err := client.GetSiteMtlsCertificateAssociation(certifiateID, siteID)
132+
certificateExists, err := client.GetSiteMtlsCertificateAssociation(certifiateID, siteID, "")
133133

134134
if err != nil {
135135
t.Errorf("Should not have received an error")
@@ -149,7 +149,7 @@ func TestClientCreateSiteMtlsCertificateAssociationBadConnection(t *testing.T) {
149149
siteID := 42
150150
certificateID := 100
151151

152-
err := client.CreateSiteMtlsCertificateAssociation(certificateID, siteID)
152+
err := client.CreateSiteMtlsCertificateAssociation(certificateID, siteID, "")
153153
if err == nil {
154154
t.Errorf("Should have received an error")
155155
}
@@ -191,7 +191,7 @@ func TestClientUpdateSiteMtlsCertificateAssociationInvalidConfig(t *testing.T) {
191191
config := &Config{APIID: apiID, APIKey: apiKey, BaseURL: server.URL, BaseURLRev2: server.URL, BaseURLAPI: server.URL}
192192
client := &Client{config: config, httpClient: &http.Client{}}
193193

194-
err := client.CreateSiteMtlsCertificateAssociation(certificateID, siteID)
194+
err := client.CreateSiteMtlsCertificateAssociation(certificateID, siteID, "")
195195

196196
if err == nil {
197197
t.Errorf("Should have received an error")
@@ -211,7 +211,7 @@ func TestClientDeleteSiteMtlsCertificateAssociationBadConnection(t *testing.T) {
211211
siteID := 42
212212
certificateID := 100
213213

214-
err := client.DeleteSiteMtlsCertificateAssociation(certificateID, siteID)
214+
err := client.DeleteSiteMtlsCertificateAssociation(certificateID, siteID, "")
215215
if err == nil {
216216
t.Errorf("Should have received an error")
217217
}
@@ -254,7 +254,7 @@ func TestClientDeleteSiteMtlsCertificateAssociationInvalidConfig(t *testing.T) {
254254
config := &Config{APIID: apiID, APIKey: apiKey, BaseURL: server.URL, BaseURLRev2: server.URL, BaseURLAPI: server.URL}
255255
client := &Client{config: config, httpClient: &http.Client{}}
256256

257-
err := client.CreateSiteMtlsCertificateAssociation(certificateID, siteID)
257+
err := client.CreateSiteMtlsCertificateAssociation(certificateID, siteID, "")
258258

259259
if err == nil {
260260
t.Errorf("Should have received an error")

incapsula/mtls_utils.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,23 @@ import (
88

99
const ignoreSensitiveVariableString = "Exported Certificate - data placeholder"
1010

11-
func validateInput(d *schema.ResourceData) (int, int, error) {
11+
func validateInput(d *schema.ResourceData) (int, int, string, error) {
1212
siteIDStr := d.Get("site_id").(string)
1313
certificateIDStr := d.Get("certificate_id").(string)
14+
accountId := ""
15+
if d.Get("account_id") != nil {
16+
accountId = d.Get("account_id").(string)
17+
}
1418

1519
siteID, err := strconv.Atoi(siteIDStr)
1620
if err != nil {
17-
return 0, 0, fmt.Errorf("failed to convert Site Id, actual value: %s, expected numeric id", siteIDStr)
21+
return 0, 0, accountId, fmt.Errorf("failed to convert Site Id, actual value: %s, expected numeric id", siteIDStr)
1822
}
1923

2024
certificateID, err := strconv.Atoi(certificateIDStr)
2125
if err != nil {
22-
return 0, 0, fmt.Errorf("failed to convert certificate Id, actual value: %s, expected numeric id", certificateIDStr)
26+
return 0, 0, accountId, fmt.Errorf("failed to convert certificate Id, actual value: %s, expected numeric id", certificateIDStr)
2327
}
2428

25-
return siteID, certificateID, nil
29+
return siteID, certificateID, accountId, nil
2630
}

incapsula/resource_certificate_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ func TestAccIncapsulaCustomCertificate_Basic(t *testing.T) {
3939
Check: resource.ComposeTestCheckFunc(
4040
testCheckIncapsulaCertificateExists(certificateResourceName),
4141
resource.TestCheckResourceAttr(certificateResource, "input_hash", calculatedHashBase64),
42+
printState(),
4243
),
4344
},
4445
},

incapsula/resource_mtls_client_to_imperva_certificate_site_association.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func resourceMtlsClientToImpervaCertificateSiteAssociation() *schema.Resource {
6060
func resourceSiteMtlsClientToImpervaCertificateAssociationRead(d *schema.ResourceData, m interface{}) error {
6161
client := m.(*Client)
6262

63-
siteID, certificateID, err := validateInput(d)
63+
siteID, certificateID, _, err := validateInput(d)
6464
if err != nil {
6565
return err
6666
}
@@ -87,7 +87,7 @@ func resourceSiteMtlsClientToImpervaCertificateAssociationRead(d *schema.Resourc
8787

8888
func resourceSiteMtlsClientToImpervaCertificateAssociationCreate(d *schema.ResourceData, m interface{}) error {
8989
client := m.(*Client)
90-
siteID, certificateID, err := validateInput(d)
90+
siteID, certificateID, _, err := validateInput(d)
9191
if err != nil {
9292
return err
9393
}
@@ -105,7 +105,7 @@ func resourceSiteMtlsClientToImpervaCertificateAssociationCreate(d *schema.Resou
105105

106106
func resourceSiteMtlsClientToImpervaCertificateAssociationDelete(d *schema.ResourceData, m interface{}) error {
107107
client := m.(*Client)
108-
siteID, certificateID, err := validateInput(d)
108+
siteID, certificateID, _, err := validateInput(d)
109109

110110
err = client.DeleteSiteMtlsClientToImpervaCertificateAssociation(
111111
certificateID,

incapsula/resource_mtls_client_to_imperva_certificate_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ func TestAccIncapsulaMtlsClientToImervaCertificate_Basic(t *testing.T) {
2828
Check: resource.ComposeTestCheckFunc(
2929
testCheckMtlsClientToImervaCertificateExists(),
3030
resource.TestCheckResourceAttr(mtlsClientToImervaCertificateResource, "certificate_name", "acceptance test CA certificate"),
31+
printState(),
3132
),
3233
},
3334
},

incapsula/resource_mtls_imperva_to_origin_certificate_site_association.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,24 @@ func resourceMtlsImpervaToOriginCertificateSiteAssociation() *schema.Resource {
4242
Type: schema.TypeString,
4343
Required: true,
4444
},
45+
"account_id": {
46+
Description: "(Optional) The account to operate on. If not specified, operation will be performed on the account identified by the authentication parameters.",
47+
Type: schema.TypeString,
48+
Optional: true,
49+
},
4550
},
4651
}
4752
}
4853

4954
func resourceSiteMtlsCertificateAssociationRead(d *schema.ResourceData, m interface{}) error {
5055
client := m.(*Client)
5156

52-
siteID, certificateID, err := validateInput(d)
57+
siteID, certificateID, accountId, err := validateInput(d)
5358
if err != nil {
5459
return err
5560
}
5661

57-
associationExists, err := client.GetSiteMtlsCertificateAssociation(certificateID, siteID)
62+
associationExists, err := client.GetSiteMtlsCertificateAssociation(certificateID, siteID, accountId)
5863
if err != nil {
5964
return err
6065
}
@@ -72,14 +77,15 @@ func resourceSiteMtlsCertificateAssociationRead(d *schema.ResourceData, m interf
7277

7378
func resourceSiteMtlsCertificateAssociationCreate(d *schema.ResourceData, m interface{}) error {
7479
client := m.(*Client)
75-
siteID, certificateID, err := validateInput(d)
80+
siteID, certificateID, accountId, err := validateInput(d)
7681
if err != nil {
7782
return err
7883
}
7984

8085
err = client.CreateSiteMtlsCertificateAssociation(
8186
certificateID,
8287
siteID,
88+
accountId,
8389
)
8490
if err != nil {
8591
return err
@@ -89,11 +95,12 @@ func resourceSiteMtlsCertificateAssociationCreate(d *schema.ResourceData, m inte
8995

9096
func resourceSiteMtlsCertificateAssociationDelete(d *schema.ResourceData, m interface{}) error {
9197
client := m.(*Client)
92-
siteID, certificateID, err := validateInput(d)
98+
siteID, certificateID, accountId, err := validateInput(d)
9399

94100
err = client.DeleteSiteMtlsCertificateAssociation(
95101
certificateID,
96102
siteID,
103+
accountId,
97104
)
98105
if err != nil {
99106
return err

incapsula/resource_mtls_imperva_to_origin_certificate_site_association_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ func TestAccIncapsulaSiteMtlsCertificateAssociation_Basic(t *testing.T) {
2626
Config: testAccCheckSiteMtlsCertificateAssociationBasic(t),
2727
Check: resource.ComposeTestCheckFunc(
2828
testCheckSiteMtlsCertificateAssociationExists(),
29+
printState(),
2930
),
3031
},
3132
},

incapsula/resource_test_utils.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package incapsula
2+
3+
import (
4+
"fmt"
5+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
7+
)
8+
9+
// extracts the primary attributes of a resource from the state.
10+
func extractAttributes(s *terraform.State) map[string]map[string]string {
11+
attributes := make(map[string]map[string]string)
12+
for name, rs := range s.RootModule().Resources {
13+
attributes[name] = rs.Primary.Attributes
14+
}
15+
return attributes
16+
}
17+
18+
func printState() resource.TestCheckFunc {
19+
return func(s *terraform.State) error {
20+
attrs := extractAttributes(s)
21+
for resourceName, values := range attrs {
22+
fmt.Printf("[INFO] Resource: %s\nAttributes: %+v\n", resourceName, values)
23+
}
24+
return nil
25+
}
26+
}

website/docs/r/mtls_imperva_to_origin_certificate_site_association.html.markdown

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ The following arguments are supported:
2626

2727
* `site_id` - (Required) Site id to assign to a given mTLS client certificate.
2828
* `certificate_id` - (Required) The mTLS certificate id you want to assign to your site.
29+
* `account_id` - (Optional) The account to operate on. If not specified, operation will be performed on the account identified by the authentication parameters.
2930

3031
## Attributes Reference
3132

0 commit comments

Comments
 (0)