Skip to content

Commit 625a825

Browse files
fix(instance): security group rule read from api and acl database not statefull (#892)
* Convert acl_rules from list to set * Fix read security group rules, removed from api * fix update typeSet for acl_rules * change order Co-authored-by: Rémy Léone <[email protected]>
1 parent ef1b96a commit 625a825

3 files changed

+19
-14
lines changed

scaleway/resource_instance_security_group.go

+5
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,11 @@ func getSecurityGroupRules(ctx context.Context, instanceAPI *instance.API, zone
203203
stateRules[direction] = append(stateRules[direction], securityGroupRuleFlatten(apiRule))
204204
}
205205
}
206+
// There are rule in tfstate not present in api
207+
if len(apiRules[direction]) != len(stateRules[direction]) {
208+
// Truncate stateRules with apiRules length
209+
stateRules[direction] = stateRules[direction][0:len(apiRules[direction])]
210+
}
206211
}
207212

208213
return stateRules[instance.SecurityGroupRuleDirectionInbound], stateRules[instance.SecurityGroupRuleDirectionOutbound], nil

scaleway/resource_rdb_acl.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func resourceScalewayRdbACL() *schema.Resource {
3232
Description: "Instance on which the ACL is applied",
3333
},
3434
"acl_rules": {
35-
Type: schema.TypeList,
35+
Type: schema.TypeSet,
3636
Required: true,
3737
Description: "List of ACL rules to apply",
3838
Elem: &schema.Resource{
@@ -72,7 +72,7 @@ func resourceScalewayRdbACLCreate(ctx context.Context, d *schema.ResourceData, m
7272
createReq := &rdb.SetInstanceACLRulesRequest{
7373
Region: region,
7474
InstanceID: ID,
75-
Rules: rdbACLExpand(d.Get("acl_rules")),
75+
Rules: rdbACLExpand(d.Get("acl_rules").(*schema.Set)),
7676
}
7777

7878
_, err = rdbAPI.SetInstanceACLRules(createReq, scw.WithContext(ctx))
@@ -127,7 +127,7 @@ func resourceScalewayRdbACLUpdate(ctx context.Context, d *schema.ResourceData, m
127127
req := &rdb.SetInstanceACLRulesRequest{
128128
Region: region,
129129
InstanceID: ID,
130-
Rules: rdbACLExpand(d.Get("acl_rules")),
130+
Rules: rdbACLExpand(d.Get("acl_rules").(*schema.Set)),
131131
}
132132

133133
_, err = rdbAPI.SetInstanceACLRules(req, scw.WithContext(ctx))
@@ -145,7 +145,7 @@ func resourceScalewayRdbACLDelete(ctx context.Context, d *schema.ResourceData, m
145145
return diag.FromErr(err)
146146
}
147147
aclruleips := make([]string, 0)
148-
for _, acl := range rdbACLExpand(d.Get("acl_rules")) {
148+
for _, acl := range rdbACLExpand(d.Get("acl_rules").(*schema.Set)) {
149149
aclruleips = append(aclruleips, acl.IP.String())
150150
}
151151
_, err = rdbAPI.DeleteInstanceACLRules(&rdb.DeleteInstanceACLRulesRequest{
@@ -161,13 +161,13 @@ func resourceScalewayRdbACLDelete(ctx context.Context, d *schema.ResourceData, m
161161
return nil
162162
}
163163

164-
func rdbACLExpand(data interface{}) []*rdb.ACLRuleRequest {
164+
func rdbACLExpand(data *schema.Set) []*rdb.ACLRuleRequest {
165165
type aclRule struct {
166166
IP string
167167
Description string
168168
}
169169
var res []*rdb.ACLRuleRequest
170-
for _, rule := range data.([]interface{}) {
170+
for _, rule := range data.List() {
171171
r := rule.(map[string]interface{})
172172
res = append(res, &rdb.ACLRuleRequest{
173173
IP: expandIPNet(r["ip"].(string)),

scaleway/resource_rdb_acl_test.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,10 @@ func TestAccScalewayRdbACL_Basic(t *testing.T) {
4545
}
4646
}`, instanceName),
4747
Check: resource.ComposeTestCheckFunc(
48-
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.0.ip", "1.2.3.4/32"),
49-
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.0.description", "foo"),
50-
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.1.ip", "4.5.6.7/32"),
51-
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.1.description", "bar"),
48+
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.0.ip", "4.5.6.7/32"),
49+
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.0.description", "bar"),
50+
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.1.ip", "1.2.3.4/32"),
51+
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.1.description", "foo"),
5252
),
5353
},
5454
{
@@ -73,10 +73,10 @@ func TestAccScalewayRdbACL_Basic(t *testing.T) {
7373
}
7474
}`, instanceName),
7575
Check: resource.ComposeTestCheckFunc(
76-
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.0.ip", "1.2.3.4/32"),
77-
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.0.description", "foo"),
78-
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.1.ip", "9.0.0.0/16"),
79-
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.1.description", "baz"),
76+
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.0.ip", "9.0.0.0/16"),
77+
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.0.description", "baz"),
78+
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.1.ip", "1.2.3.4/32"),
79+
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.1.description", "foo"),
8080
),
8181
},
8282
},

0 commit comments

Comments
 (0)