Skip to content

Commit 4a3ca68

Browse files
Support sub-account on resource_mtls_client_to_imperva_certificate_site_association (#555)
* resource_mtls_client_to_imperva_certificate_site_association should support sub-account * Removed unnecessary log prints * Added account_is to importer block * Returning nil when parsing fails * Fixed error variable
1 parent 1dd4cfb commit 4a3ca68

6 files changed

+53
-25
lines changed

incapsula/client_mtls_client_to_imperva_certificate_site_association.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,14 @@ import (
99
"strings"
1010
)
1111

12-
func (c *Client) GetSiteMtlsClientToImpervaCertificateAssociation(siteID, certificateID int) (*ClientCaCertificateWithSites, bool, error) {
12+
func (c *Client) GetSiteMtlsClientToImpervaCertificateAssociation(siteID, certificateID int, accountId string) (*ClientCaCertificateWithSites, bool, error) {
1313
log.Printf("[INFO] Getting Site to mutual TLS Imperva to Origin Certificate association for Site ID %d", siteID)
1414
reqURL := fmt.Sprintf("%s/certificate-manager/v2/sites/%d/client-certificates", c.config.BaseURLAPI, siteID)
1515

16+
if accountId != "" {
17+
reqURL = fmt.Sprintf("%s?caid=%s", reqURL, accountId)
18+
}
19+
1620
resp, err := c.DoJsonRequestWithHeaders(http.MethodGet, reqURL, nil, ReadMtlsClientToImpervaCertifiateSiteAssociation)
1721
if err != nil {
1822
return nil, true, fmt.Errorf("[ERROR] Error getting Site to mutual TLS Client to Imperva Certificate association for Site ID %d, certificate ID %d\n%v", siteID, certificateID, err)
@@ -57,9 +61,14 @@ func (c *Client) GetSiteMtlsClientToImpervaCertificateAssociation(siteID, certif
5761
}
5862
}
5963

60-
func (c *Client) CreateSiteMtlsClientToImpervaCertificateAssociation(certificateID, siteID int) error {
64+
func (c *Client) CreateSiteMtlsClientToImpervaCertificateAssociation(certificateID, siteID int, accountId string) error {
6165
log.Printf("[INFO] Updating Site to mutual TLS Client to Imperva Certificate Association certificate ID %d for Site ID %d", certificateID, siteID)
6266
reqURL := fmt.Sprintf("%s/certificate-manager/v2/sites/%d/client-certificates/%d", c.config.BaseURLAPI, siteID, certificateID)
67+
68+
if accountId != "" {
69+
reqURL = fmt.Sprintf("%s?caid=%s", reqURL, accountId)
70+
}
71+
6372
resp, err := c.DoJsonRequestWithHeaders(http.MethodPost, reqURL, nil, CreateMtlsClientToImpervaCertifiateSiteAssociation)
6473
if err != nil {
6574
return fmt.Errorf("[ERROR] Error creating Incapsula Site to mutual TLS Client to Imperva Certificate Association for certificate ID %d, Site ID %d\n%s", certificateID, siteID, err)
@@ -76,10 +85,14 @@ func (c *Client) CreateSiteMtlsClientToImpervaCertificateAssociation(certificate
7685
return nil
7786
}
7887

79-
func (c *Client) DeleteSiteMtlsClientToImpervaCertificateAssociation(certificateID, siteID int) error {
88+
func (c *Client) DeleteSiteMtlsClientToImpervaCertificateAssociation(certificateID, siteID int, accountId string) error {
8089
log.Printf("[INFO] Unassigning Site to mutual TLS Client to Imperva Certificate Association certificate ID %d for Site ID %d", certificateID, siteID)
8190
reqURL := fmt.Sprintf("%s/certificate-manager/v2/sites/%d/client-certificates/%d", c.config.BaseURLAPI, siteID, certificateID)
8291

92+
if accountId != "" {
93+
reqURL = fmt.Sprintf("%s?caid=%s", reqURL, accountId)
94+
}
95+
8396
resp, err := c.DoJsonRequestWithHeaders(http.MethodDelete, reqURL, nil, DeleteMtlsClientToImpervaCertifiateSiteAssociation)
8497
if err != nil {
8598
return fmt.Errorf("[ERROR] Error deleting Incapsula Site to mutual TLS Client to Imperva Certificate Association certificate ID %d for Site ID %d\n%s", certificateID, siteID, err)

incapsula/client_mtls_client_to_imperva_certificate_site_association_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ func TestClientGetSiteMtlsClientToImpervaCertificateAssociationBadConnection(t *
1919
siteID := 42
2020
certificateID := 100
2121

22-
_, _, err := client.GetSiteMtlsClientToImpervaCertificateAssociation(siteID, certificateID)
22+
_, _, err := client.GetSiteMtlsClientToImpervaCertificateAssociation(siteID, certificateID, "")
2323
if err == nil {
2424
t.Errorf("Should have received an error")
2525
}
@@ -49,7 +49,7 @@ func TestClientGetSiteMtlsClientToImpervaCertificateAssociationBadJSON(t *testin
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-
clientCaCertificateWithSites, _, err := client.GetSiteMtlsClientToImpervaCertificateAssociation(siteID, certificateID)
52+
clientCaCertificateWithSites, _, err := client.GetSiteMtlsClientToImpervaCertificateAssociation(siteID, certificateID, "")
5353

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

97-
clientCaCertificateWithSites, _, err := client.GetSiteMtlsClientToImpervaCertificateAssociation(siteID, certificateID)
97+
clientCaCertificateWithSites, _, err := client.GetSiteMtlsClientToImpervaCertificateAssociation(siteID, certificateID, "")
9898

9999
if err == nil {
100100
t.Errorf("Should have received an error")
@@ -143,7 +143,7 @@ func TestClientGetSiteMtlsClientToImpervaCertificateAssociationValidConfig(t *te
143143
config := &Config{APIID: apiID, APIKey: apiKey, BaseURL: server.URL, BaseURLRev2: server.URL, BaseURLAPI: server.URL}
144144
client := &Client{config: config, httpClient: &http.Client{}}
145145

146-
clientCaCertificateWithSites, _, err := client.GetSiteMtlsClientToImpervaCertificateAssociation(siteID, certificateID)
146+
clientCaCertificateWithSites, _, err := client.GetSiteMtlsClientToImpervaCertificateAssociation(siteID, certificateID, "")
147147

148148
if err != nil {
149149
t.Errorf("Should not have received an error")
@@ -163,7 +163,7 @@ func TestClientCreateSiteMtlsClientToImpervaCertificateAssociationBadConnection(
163163
siteID := 42
164164
certificateID := 100
165165

166-
err := client.CreateSiteMtlsClientToImpervaCertificateAssociation(siteID, certificateID)
166+
err := client.CreateSiteMtlsClientToImpervaCertificateAssociation(siteID, certificateID, "")
167167
if err == nil {
168168
t.Errorf("Should have received an error")
169169
}
@@ -191,7 +191,7 @@ func TestClientCreateSiteMtlsClientToImpervaCertificateAssociationInvalidConfig(
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.CreateSiteMtlsClientToImpervaCertificateAssociation(certificateID, siteID)
194+
err := client.CreateSiteMtlsClientToImpervaCertificateAssociation(certificateID, siteID, "")
195195

196196
if err == nil {
197197
t.Errorf("Should have received an error")
@@ -220,7 +220,7 @@ func TestClientCreateSiteMtlsClientToImpervaCertificateAssociationValidConfig(t
220220
config := &Config{APIID: apiID, APIKey: apiKey, BaseURL: server.URL, BaseURLRev2: server.URL, BaseURLAPI: server.URL}
221221
client := &Client{config: config, httpClient: &http.Client{}}
222222

223-
err := client.CreateSiteMtlsClientToImpervaCertificateAssociation(certificateID, siteID)
223+
err := client.CreateSiteMtlsClientToImpervaCertificateAssociation(certificateID, siteID, "")
224224

225225
if err != nil {
226226
t.Errorf("Should not have received an error")
@@ -237,7 +237,7 @@ func TestClientDeleteSiteMtlsClientToImpervaCertificateAssociationBadConnection(
237237
siteID := 42
238238
certificateID := 100
239239

240-
err := client.DeleteSiteMtlsClientToImpervaCertificateAssociation(siteID, certificateID)
240+
err := client.DeleteSiteMtlsClientToImpervaCertificateAssociation(siteID, certificateID, "")
241241
if err == nil {
242242
t.Errorf("Should have received an error")
243243
}
@@ -265,7 +265,7 @@ func TestClientDeleteSiteMtlsClientToImpervaCertificateAssociationInvalidConfig(
265265
config := &Config{APIID: apiID, APIKey: apiKey, BaseURL: server.URL, BaseURLRev2: server.URL, BaseURLAPI: server.URL}
266266
client := &Client{config: config, httpClient: &http.Client{}}
267267

268-
err := client.DeleteSiteMtlsClientToImpervaCertificateAssociation(certificateID, siteID)
268+
err := client.DeleteSiteMtlsClientToImpervaCertificateAssociation(certificateID, siteID, "")
269269

270270
if err == nil {
271271
t.Errorf("Should have received an error")
@@ -294,7 +294,7 @@ func TestClientDeleteSiteMtlsClientToImpervaCertificateAssociationValidConfig(t
294294
config := &Config{APIID: apiID, APIKey: apiKey, BaseURL: server.URL, BaseURLRev2: server.URL, BaseURLAPI: server.URL}
295295
client := &Client{config: config, httpClient: &http.Client{}}
296296

297-
err := client.DeleteSiteMtlsClientToImpervaCertificateAssociation(certificateID, siteID)
297+
err := client.DeleteSiteMtlsClientToImpervaCertificateAssociation(certificateID, siteID, "")
298298

299299
if err != nil {
300300
t.Errorf("Should not have received an error on delete Client to Imperva Certificate Association ")

incapsula/resource_mtls_client_to_imperva_certificate_site_association.go

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,32 @@ func resourceMtlsClientToImpervaCertificateSiteAssociation() *schema.Resource {
1818
State: func(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
1919
d.MarkNewResource()
2020
idSlice := strings.Split(d.Id(), "/")
21-
if len(idSlice) != 2 || idSlice[0] == "" || idSlice[1] == "" {
22-
return nil, fmt.Errorf("unexpected format of Incapsula Client to Imperva CA Certificate Site Association resource ID, expected site_id/certificate_id, got %s", d.Id())
21+
if len(idSlice) < 2 || len(idSlice) > 3 || idSlice[0] == "" || idSlice[1] == "" {
22+
return nil, fmt.Errorf("unexpected format of Incapsula Client to Imperva CA Certificate Site Association resource ID, expected site_id/certificate_id/account_id(optional), got %s", d.Id())
2323
}
2424

2525
_, err := strconv.Atoi(idSlice[0])
2626
if err != nil {
27-
fmt.Errorf("failed to convert Site Id from import command, actual value: %s, expected numeric id", idSlice[0])
27+
return nil, fmt.Errorf("failed to convert Site Id from import command, actual value: %s, expected numeric id", idSlice[0])
2828
}
2929

3030
_, err = strconv.Atoi(idSlice[1])
3131
if err != nil {
32-
fmt.Errorf("failed to convert Certificate Id from import command, actual value: %s, expected numeric id", idSlice[1])
32+
return nil, fmt.Errorf("failed to convert Certificate Id from import command, actual value: %s, expected numeric id", idSlice[1])
3333
}
3434

3535
d.Set("site_id", idSlice[0])
3636
d.Set("certificate_id", idSlice[1])
3737

38+
if len(idSlice) == 3 {
39+
_, err = strconv.Atoi(idSlice[2])
40+
if err != nil || idSlice[2] == "" {
41+
return nil, fmt.Errorf("failed to convert account Id from import command, actual value: %s, expected numeric id", idSlice[2])
42+
}
43+
44+
d.Set("account_id", idSlice[2])
45+
}
46+
3847
log.Printf("[DEBUG] Importing Incapsula Client to Imperva CA Certificate Site Association for Site ID %s, mutual TLS Certificate Id %s,", idSlice[0], idSlice[1])
3948
return []*schema.ResourceData{d}, nil
4049
},
@@ -53,19 +62,24 @@ func resourceMtlsClientToImpervaCertificateSiteAssociation() *schema.Resource {
5362
Type: schema.TypeString,
5463
Required: true,
5564
},
65+
"account_id": {
66+
Description: "(Optional) The account to operate on. If not specified, operation will be performed on the account identified by the authentication parameters.",
67+
Type: schema.TypeString,
68+
Optional: true,
69+
},
5670
},
5771
}
5872
}
5973

6074
func resourceSiteMtlsClientToImpervaCertificateAssociationRead(d *schema.ResourceData, m interface{}) error {
6175
client := m.(*Client)
6276

63-
siteID, certificateID, _, err := validateInput(d)
77+
siteID, certificateID, accountID, err := validateInput(d)
6478
if err != nil {
6579
return err
6680
}
6781

68-
mTLSCertificateData, associationExists, err := client.GetSiteMtlsClientToImpervaCertificateAssociation(siteID, certificateID)
82+
mTLSCertificateData, associationExists, err := client.GetSiteMtlsClientToImpervaCertificateAssociation(siteID, certificateID, accountID)
6983
if err != nil {
7084
return err
7185
}
@@ -87,14 +101,15 @@ func resourceSiteMtlsClientToImpervaCertificateAssociationRead(d *schema.Resourc
87101

88102
func resourceSiteMtlsClientToImpervaCertificateAssociationCreate(d *schema.ResourceData, m interface{}) error {
89103
client := m.(*Client)
90-
siteID, certificateID, _, err := validateInput(d)
104+
siteID, certificateID, accountID, err := validateInput(d)
91105
if err != nil {
92106
return err
93107
}
94108

95109
err = client.CreateSiteMtlsClientToImpervaCertificateAssociation(
96110
certificateID,
97111
siteID,
112+
accountID,
98113
)
99114
if err != nil {
100115
return err
@@ -105,11 +120,12 @@ func resourceSiteMtlsClientToImpervaCertificateAssociationCreate(d *schema.Resou
105120

106121
func resourceSiteMtlsClientToImpervaCertificateAssociationDelete(d *schema.ResourceData, m interface{}) error {
107122
client := m.(*Client)
108-
siteID, certificateID, _, err := validateInput(d)
123+
siteID, certificateID, accountID, err := validateInput(d)
109124

110125
err = client.DeleteSiteMtlsClientToImpervaCertificateAssociation(
111126
certificateID,
112127
siteID,
128+
accountID,
113129
)
114130
if err != nil {
115131
//todo - check error

incapsula/resource_mtls_client_to_imperva_certificate_site_association_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ func testACCStateSiteClientToImervaCertificateAssociationDestroy(s *terraform.St
4848

4949
siteID, certificateID := getResourceDetails(res)
5050

51-
_, _, err := client.GetSiteMtlsClientToImpervaCertificateAssociation(siteID, certificateID)
51+
_, _, err := client.GetSiteMtlsClientToImpervaCertificateAssociation(siteID, certificateID, "")
5252
if err == nil {
5353
return fmt.Errorf("Resource %s with siteID ID %d still exists", siteMtlsCrtificateAssociationResourceName, siteID)
5454
}
@@ -88,7 +88,7 @@ func testCheckClientToImervaCertificateAssociationExists() resource.TestCheckFun
8888
}
8989
siteID, certificateID := getResourceDetails(resource)
9090

91-
response, _, err := client.GetSiteMtlsClientToImpervaCertificateAssociation(siteID, certificateID)
91+
response, _, err := client.GetSiteMtlsClientToImpervaCertificateAssociation(siteID, certificateID, "")
9292
if err != nil || response == nil {
9393
return fmt.Errorf("Incapsula mTLS certificate ID %d is not assigned to Site ID %d", certificateID, siteID)
9494
}

incapsula/resource_site_v3.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ func resourceSiteV3() *schema.Resource {
8888
func resourceSiteV3Add(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
8989
client := m.(*Client)
9090
var diags diag.Diagnostics
91-
9291
accountID, _ := d.Get("account_id").(string)
9392
log.Printf("[INFO] adding v3 site to Account ID: %s to %v", accountID, d)
9493
siteV3Request := SiteV3Request{}
@@ -167,7 +166,6 @@ func resourceSiteV3Read(ctx context.Context, d *schema.ResourceData, m interface
167166
var diags diag.Diagnostics
168167

169168
accountID, _ := d.Get("account_id").(string)
170-
171169
log.Printf("[INFO] getting v3 site of Account ID: %s to %v", accountID, d)
172170
siteV3Request := SiteV3Request{}
173171
siteV3Request.SiteType = d.Get("type").(string)

website/docs/r/mtls_client_to_imperva_ca_certificate_site_association.html.markdown

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

5050
* `certificate_id` - (Required) The Mutual TLS Client to Imperva CA Certificate ID.
5151
* `site_id` - (Required) Numeric identifier of the site to operate on.
52+
* `account_id` - (Optional) The account to operate on. If not specified, operation will be performed on the account identified by the authentication parameters.
5253

5354
## Attributes Reference
5455

0 commit comments

Comments
 (0)