Skip to content

Commit b0b99b3

Browse files
authored
Merge pull request #1166 from yamamoto-febc/feature/webaccel-acl
ウェブアクセラレータ ACL機能
2 parents fd16bd1 + 0386894 commit b0b99b3

File tree

7 files changed

+258
-19
lines changed

7 files changed

+258
-19
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
data sakuracloud_webaccel "site" {
2+
name = "your-site-name"
3+
# or
4+
# domain = "your-domain"
5+
}
6+
7+
resource sakuracloud_webaccel_acl "acl" {
8+
site_id = data.sakuracloud_webaccel.site.id
9+
10+
acl = join("\n", [
11+
"deny 192.0.2.5/25",
12+
"deny 198.51.100.0",
13+
"allow all",
14+
])
15+
}

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ require (
1515
github.com/sacloud/iaas-service-go v1.10.0
1616
github.com/sacloud/iso9660wrap v0.0.0-20171031075302-eda21f77f6a8
1717
github.com/sacloud/packages-go v0.0.10
18-
github.com/sacloud/webaccel-api-go v1.1.6
18+
github.com/sacloud/webaccel-api-go v1.2.0
1919
github.com/stretchr/testify v1.9.0
2020
golang.org/x/text v0.14.0
2121
)

go.sum

+3-18
Original file line numberDiff line numberDiff line change
@@ -174,24 +174,18 @@ github.com/sacloud/autoscaler v0.15.5 h1:CcrddQsRW0oAF5877bPuyiK1c6f6nEkb1ktKuq/
174174
github.com/sacloud/autoscaler v0.15.5/go.mod h1:xWwCzhvAoLkLUv5tyVEuhcI6DrobZcBGnsmuQ+ugnw4=
175175
github.com/sacloud/ftps v1.2.0 h1:7UlSWd7cnm1J+sANz7IiBV9ffVcS+4g6ZV5UHVVbvaw=
176176
github.com/sacloud/ftps v1.2.0/go.mod h1:h4awhOi3PEyhKLj1FpXjoVV5yVkmRUU+d5L95EwX2JU=
177-
github.com/sacloud/go-http v0.1.7 h1:oBnoTLTlu4afkRJHIQSV6NJMUfIR1S3rB/SQaGzL/3Q=
178-
github.com/sacloud/go-http v0.1.7/go.mod h1:WV31q5qAUt6Rs7dfqQfGyRprXhf91jS+41FofYHmxUI=
179177
github.com/sacloud/go-http v0.1.8 h1:ynreWA/vnM8G2ksbMlmefBHsXURKPz49qlPRqQ9IQdw=
180178
github.com/sacloud/go-http v0.1.8/go.mod h1:7TL7TN1fnPKHsMifIqURDkGujnKViCgEz5Ei/LQdFK8=
181-
github.com/sacloud/iaas-api-go v1.11.2 h1:2jQLPwGRK/sS9bjvjWFWk2AFToU2Zq2o+6JP5Uvhqu8=
182-
github.com/sacloud/iaas-api-go v1.11.2/go.mod h1:gjiuIY5c/7lj2LmFnVgyHcPMT17PysXpNPBrmVMV8dM=
183179
github.com/sacloud/iaas-api-go v1.12.0 h1:kqXFn3HzCiawlX6hVJb1GVqcSJqcmiGHB4Zp14sxiI8=
184180
github.com/sacloud/iaas-api-go v1.12.0/go.mod h1:SZLXeWOdXk3WReIS557sbU1gkOgrE4rseIBQV1B3b7o=
185-
github.com/sacloud/iaas-service-go v1.9.2 h1:IAWsIJ1F5txAS38lN4x/iBvQl1NCIo5owFs+hFqFUmc=
186-
github.com/sacloud/iaas-service-go v1.9.2/go.mod h1:SrH2+QeaYd4W85tAK4/u3A7WXkOlnpLlaI1SDmH7Hj4=
187181
github.com/sacloud/iaas-service-go v1.10.0 h1:OP0z0LLNLaNTmN1CtGpjQowD4SP1zn77z1Iku1D7l9Q=
188182
github.com/sacloud/iaas-service-go v1.10.0/go.mod h1:tfWGYP+JnELP4ASOhcjaSDYr31TKrlPbqQ3wplCj190=
189183
github.com/sacloud/iso9660wrap v0.0.0-20171031075302-eda21f77f6a8 h1:5piK7EELHKRxGqBjgVEHsdfsFwEzF/Kds/bMWLS6gCw=
190184
github.com/sacloud/iso9660wrap v0.0.0-20171031075302-eda21f77f6a8/go.mod h1:1jHHCa624cG5rODkWmourombJaNmkY9/SBHWhLJcg+w=
191185
github.com/sacloud/packages-go v0.0.10 h1:UiQGjy8LretewkRhsuna1TBM9Vz/l9FoYpQx+D+AOck=
192186
github.com/sacloud/packages-go v0.0.10/go.mod h1:f8QITBh9z4IZc4yE9j21Q8b0sXEMwRlRmhhjWeDVTYs=
193-
github.com/sacloud/webaccel-api-go v1.1.6 h1:OjAORCUzk3kYCXSPsHj7D0+wk9/ILzZsbqPTtk24j4A=
194-
github.com/sacloud/webaccel-api-go v1.1.6/go.mod h1:xzeJjXIBtkjWc75u5gihiScjBlEBhxfLL60bhsHJSB4=
187+
github.com/sacloud/webaccel-api-go v1.2.0 h1:eoiMNmz9bbeL3Ht1WPLKe2DbG7vH7Lb3a/jCmSjcKPs=
188+
github.com/sacloud/webaccel-api-go v1.2.0/go.mod h1:ZgTg5TldLf90RU9y3TnI0/luxERkJofk9+iLaupKB2E=
195189
github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
196190
github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
197191
github.com/shivamMg/ppds v0.0.1 h1:idK2dpaen652zOO+OmcwmyoPNncBNqfHjF/14eS5JIk=
@@ -206,8 +200,6 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
206200
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
207201
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
208202
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
209-
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
210-
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
211203
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
212204
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
213205
github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
@@ -230,8 +222,6 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
230222
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
231223
golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
232224
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
233-
golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
234-
golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
235225
golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
236226
golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
237227
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
@@ -245,8 +235,6 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
245235
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
246236
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
247237
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
248-
golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
249-
golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
250238
golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4=
251239
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
252240
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -267,18 +255,15 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
267255
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
268256
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
269257
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
270-
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
271-
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
272258
golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
273259
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
274260
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
275261
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
276262
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
277263
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
278264
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
279-
golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4=
280-
golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
281265
golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q=
266+
golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
282267
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
283268
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
284269
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=

sakuracloud/provider.go

+1
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ func Provider() *schema.Provider {
206206
"sakuracloud_subnet": resourceSakuraCloudSubnet(),
207207
"sakuracloud_switch": resourceSakuraCloudSwitch(),
208208
"sakuracloud_vpc_router": resourceSakuraCloudVPCRouter(),
209+
"sakuracloud_webaccel_acl": resourceSakuraCloudWebAccelACL(),
209210
"sakuracloud_webaccel_certificate": resourceSakuraCloudWebAccelCertificate(),
210211
},
211212
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
// Copyright 2016-2023 terraform-provider-sakuracloud authors
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package sakuracloud
16+
17+
import (
18+
"context"
19+
20+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
21+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
22+
"github.com/sacloud/webaccel-api-go"
23+
)
24+
25+
func resourceSakuraCloudWebAccelACL() *schema.Resource {
26+
return &schema.Resource{
27+
CreateContext: resourceSakuraCloudWebAccelACLCreate,
28+
ReadContext: resourceSakuraCloudWebAccelACLRead,
29+
UpdateContext: resourceSakuraCloudWebAccelACLUpdate,
30+
DeleteContext: resourceSakuraCloudWebAccelACLDelete,
31+
Importer: &schema.ResourceImporter{
32+
StateContext: schema.ImportStatePassthroughContext,
33+
},
34+
Schema: map[string]*schema.Schema{
35+
"site_id": {
36+
Type: schema.TypeString,
37+
Required: true,
38+
},
39+
"acl": {
40+
Type: schema.TypeString,
41+
Required: true,
42+
},
43+
},
44+
}
45+
}
46+
47+
func resourceSakuraCloudWebAccelACLCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
48+
client, _, err := sakuraCloudClient(d, meta)
49+
if err != nil {
50+
return diag.FromErr(err)
51+
}
52+
53+
siteID := d.Get("site_id").(string)
54+
55+
_, err = webaccel.NewOp(client.webaccelClient).UpsertACL(ctx, siteID, d.Get("acl").(string))
56+
if err != nil {
57+
return diag.FromErr(err)
58+
}
59+
60+
d.SetId(siteID)
61+
return resourceSakuraCloudWebAccelACLRead(ctx, d, meta)
62+
}
63+
64+
func resourceSakuraCloudWebAccelACLRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
65+
client, _, err := sakuraCloudClient(d, meta)
66+
if err != nil {
67+
return diag.FromErr(err)
68+
}
69+
70+
siteID := d.Id()
71+
72+
acl, err := webaccel.NewOp(client.webaccelClient).ReadACL(ctx, siteID)
73+
if err != nil {
74+
return diag.Errorf("could not read SakuraCloud WebAccel ACL[%s]: %s", d.Id(), err)
75+
}
76+
77+
if acl.ACL == "" {
78+
d.SetId("")
79+
return nil
80+
}
81+
82+
return setWebAccelACLResourceData(d, client, acl)
83+
}
84+
85+
func resourceSakuraCloudWebAccelACLUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
86+
client, _, err := sakuraCloudClient(d, meta)
87+
if err != nil {
88+
return diag.FromErr(err)
89+
}
90+
siteID := d.Id()
91+
92+
if d.HasChanges("acl") {
93+
_, err := webaccel.NewOp(client.webaccelClient).UpsertACL(ctx, siteID, d.Get("acl").(string))
94+
if err != nil {
95+
return diag.FromErr(err)
96+
}
97+
}
98+
99+
return resourceSakuraCloudWebAccelACLRead(ctx, d, meta)
100+
}
101+
102+
func resourceSakuraCloudWebAccelACLDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
103+
client, _, err := sakuraCloudClient(d, meta)
104+
if err != nil {
105+
return diag.FromErr(err)
106+
}
107+
siteID := d.Get("site_id").(string)
108+
109+
if err := webaccel.NewOp(client.webaccelClient).DeleteACL(ctx, siteID); err != nil {
110+
return diag.Errorf("deleting SakuraCloud WebAccel ACL[%s] is failed: %s", d.Id(), err)
111+
}
112+
113+
d.SetId("")
114+
return nil
115+
}
116+
117+
func setWebAccelACLResourceData(d *schema.ResourceData, client *APIClient, data *webaccel.ACLResult) diag.Diagnostics {
118+
d.Set("site_id", d.Id()) // nolint
119+
d.Set("acl", data.ACL) // nolint
120+
return nil
121+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
// Copyright 2016-2023 terraform-provider-sakuracloud authors
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package sakuracloud
16+
17+
import (
18+
"fmt"
19+
"os"
20+
"testing"
21+
22+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
23+
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
24+
)
25+
26+
func TestAccResourceSakuraCloudWebAccelACL_basic(t *testing.T) {
27+
envKeys := []string{
28+
envWebAccelSiteName,
29+
}
30+
for _, k := range envKeys {
31+
if os.Getenv(k) == "" {
32+
t.Skipf("ENV %q is requilred. skip", k)
33+
return
34+
}
35+
}
36+
37+
siteName := os.Getenv(envWebAccelSiteName)
38+
39+
resource.ParallelTest(t, resource.TestCase{
40+
PreCheck: func() { testAccPreCheck(t) },
41+
ProviderFactories: testAccProviderFactories,
42+
CheckDestroy: func(*terraform.State) error {
43+
return nil
44+
},
45+
Steps: []resource.TestStep{
46+
{
47+
Config: testAccCheckSakuraCloudWebAccelACLConfig(siteName),
48+
Check: resource.ComposeTestCheckFunc(
49+
resource.TestCheckResourceAttr("sakuracloud_webaccel_acl.foobar", "acl", "deny 192.0.2.5/25\ndeny 198.51.100.0\nallow all"),
50+
),
51+
},
52+
},
53+
})
54+
}
55+
56+
func testAccCheckSakuraCloudWebAccelACLConfig(siteName string) string {
57+
tmpl := `
58+
data sakuracloud_webaccel "site" {
59+
name = "%s"
60+
}
61+
resource sakuracloud_webaccel_acl "foobar" {
62+
site_id = data.sakuracloud_webaccel.site.id
63+
64+
acl = join("\n", [
65+
"deny 192.0.2.5/25",
66+
"deny 198.51.100.0",
67+
"allow all",
68+
])
69+
}
70+
`
71+
return fmt.Sprintf(tmpl, siteName)
72+
}

website/docs/r/webaccel_acl.md

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
---
2+
layout: "sakuracloud"
3+
page_title: "SakuraCloud: sakuracloud_webaccel_acl"
4+
subcategory: "WebAccelerator"
5+
description: |-
6+
Manages a SakuraCloud WebAccelerator Site ACL.
7+
---
8+
9+
# sakuracloud_webaccel_acl
10+
11+
Manages a SakuraCloud sakuracloud_webaccel_acl.
12+
13+
## Example Usage
14+
15+
```hcl
16+
data sakuracloud_webaccel "site" {
17+
name = "your-site-name"
18+
# or
19+
# domain = "your-domain"
20+
}
21+
22+
resource sakuracloud_webaccel_acl "acl" {
23+
site_id = data.sakuracloud_webaccel.site.id
24+
25+
acl = join("\n", [
26+
"deny 192.0.2.5/25",
27+
"deny 198.51.100.0",
28+
"allow all",
29+
])
30+
}
31+
```
32+
33+
## Argument Reference
34+
35+
* `acl` - (Required) .
36+
* `site_id` - (Required) .
37+
38+
39+
40+
## Attribute Reference
41+
42+
* `id` - The id of the sakuracloud_webaccel_acl.
43+
44+
45+

0 commit comments

Comments
 (0)