Skip to content

Commit 7b12c96

Browse files
authored
Merge pull request #522 from scaleway/stateful-groups
Add security group stateful flags
2 parents 65d3dbe + 0ee0aa2 commit 7b12c96

File tree

3 files changed

+66
-19
lines changed

3 files changed

+66
-19
lines changed

pkg/api/api.go

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,9 @@ type ScalewaySecurityGroups struct {
458458
Servers []ScalewaySecurityGroup `json:"servers"`
459459
EnableDefaultSecurity bool `json:"enable_default_security"`
460460
OrganizationDefault bool `json:"organization_default"`
461+
Stateful bool `json:"stateful"`
462+
InboundDefaultPolicy string `json:"inbound_default_policy"`
463+
OutboundDefaultPolicy string `json:"outbound_default_policy"`
461464
}
462465

463466
// ScalewayGetSecurityGroups represents the response of a GET /security_groups/
@@ -503,17 +506,23 @@ type ScalewaySecurityGroup struct {
503506

504507
// ScalewayNewSecurityGroup definition POST request /security_groups
505508
type ScalewayNewSecurityGroup struct {
506-
Organization string `json:"organization"`
507-
Name string `json:"name"`
508-
Description string `json:"description"`
509+
Organization string `json:"organization"`
510+
Name string `json:"name"`
511+
Description string `json:"description"`
512+
Stateful bool `json:"stateful"`
513+
InboundDefaultPolicy string `json:"inbound_default_policy"`
514+
OutboundDefaultPolicy string `json:"outbound_default_policy"`
509515
}
510516

511517
// ScalewayUpdateSecurityGroup definition PUT request /security_groups
512518
type ScalewayUpdateSecurityGroup struct {
513-
Organization string `json:"organization"`
514-
Name string `json:"name"`
515-
Description string `json:"description"`
516-
OrganizationDefault bool `json:"organization_default"`
519+
Organization string `json:"organization"`
520+
Name string `json:"name"`
521+
Description string `json:"description"`
522+
OrganizationDefault bool `json:"organization_default"`
523+
Stateful bool `json:"stateful"`
524+
InboundDefaultPolicy string `json:"inbound_default_policy"`
525+
OutboundDefaultPolicy string `json:"outbound_default_policy"`
517526
}
518527

519528
// ScalewayServer represents a Scaleway server

pkg/cli/x_security-groups.go

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ var cmdSecurityGroups = &Command{
2525
2626
$ scw _security-groups list-groups
2727
$ scw _security-groups show-group SGID
28-
$ scw _security-groups new-group --name=NAME --desc=DESC
29-
$ scw _security-groups update-group SGID --name=NAME --desc=DESC
28+
$ scw _security-groups new-group --name=NAME --description=DESC --stateful=[true, false] --inbound=[accept, drop] --outbound=[accept, drop]
29+
$ scw _security-groups update-group SGID --name=NAME --desc=DESC --stateful=[true, false] --inbound=[accept, drop] --outbound=[accept, drop]
3030
$ scw _security-groups delete-group SGID
3131
3232
$ scw _security-groups list-rules SGID
@@ -42,6 +42,9 @@ func init() {
4242
cmdSecurityGroups.Flag.BoolVar(&securityGroupsHelp, []string{"h", "-help"}, false, "Print usage")
4343
cmdSecurityGroups.Flag.StringVar(&securityGroupsName, []string{"n", "-name"}, "", "SecurityGroup's name")
4444
cmdSecurityGroups.Flag.StringVar(&securityGroupsDesc, []string{"d", "-description"}, "", "SecurityGroup's description")
45+
cmdSecurityGroups.Flag.BoolVar(&securityGroupsStateful, []string{"s", "-stateful"}, false, "is SecurityGroup stateful")
46+
cmdSecurityGroups.Flag.StringVar(&securityGroupsInboundDefaultPolicy, []string{"i", "-inbound"}, "accept", "Inbound default policy")
47+
cmdSecurityGroups.Flag.StringVar(&securityGroupsOutboundDefaultPolicy, []string{"o", "-outbound"}, "accept", "Outbound default policy")
4548
subCmdSecurityGroup = map[string]func(cmd *Command, args []string) error{
4649
"list-groups": listSecurityGroup,
4750
"new-group": newSecurityGroup,
@@ -57,9 +60,12 @@ func init() {
5760
}
5861

5962
// Flags
60-
var securityGroupsHelp bool // -h, --help flag
61-
var securityGroupsName string // -n, --name flag
62-
var securityGroupsDesc string // -d, --description flag
63+
var securityGroupsHelp bool // -h, --help flag
64+
var securityGroupsName string // -n, --name flag
65+
var securityGroupsDesc string // -d, --description flag
66+
var securityGroupsStateful bool // -s, --stateful flag
67+
var securityGroupsInboundDefaultPolicy string // -i, --inbound flag
68+
var securityGroupsOutboundDefaultPolicy string // -o, --outbound flag
6369

6470
// SubCommand
6571
var subCmdSecurityGroup map[string]func(cmd *Command, args []string) error
@@ -81,16 +87,31 @@ func printRawMode(out io.Writer, data interface{}) error {
8187
return nil
8288
}
8389

90+
func isValidPolicy(policy string) bool {
91+
switch policy {
92+
case
93+
"accept",
94+
"drop":
95+
return true
96+
}
97+
return false
98+
}
99+
84100
func newSecurityGroup(cmd *Command, args []string) error {
85101
fmt.Println(securityGroupsDesc)
86102
fmt.Println(securityGroupsName)
87-
if securityGroupsName == "" || securityGroupsDesc == "" {
103+
if securityGroupsName == "" || securityGroupsDesc == "" ||
104+
!isValidPolicy(securityGroupsInboundDefaultPolicy) ||
105+
!isValidPolicy(securityGroupsOutboundDefaultPolicy) {
88106
return cmd.PrintShortUsage()
89107
}
90108
return cmd.API.PostSecurityGroup(api.ScalewayNewSecurityGroup{
91-
Organization: cmd.API.Organization,
92-
Name: securityGroupsName,
93-
Description: securityGroupsDesc,
109+
Organization: cmd.API.Organization,
110+
Name: securityGroupsName,
111+
Description: securityGroupsDesc,
112+
Stateful: securityGroupsStateful,
113+
InboundDefaultPolicy: securityGroupsInboundDefaultPolicy,
114+
OutboundDefaultPolicy: securityGroupsOutboundDefaultPolicy,
94115
})
95116
}
96117

@@ -100,9 +121,12 @@ func updateSecurityGroup(cmd *Command, args []string) error {
100121
return cmd.PrintShortUsage()
101122
}
102123
return cmd.API.PutSecurityGroup(api.ScalewayUpdateSecurityGroup{
103-
Organization: cmd.API.Organization,
104-
Name: securityGroupsName,
105-
Description: securityGroupsDesc,
124+
Organization: cmd.API.Organization,
125+
Name: securityGroupsName,
126+
Description: securityGroupsDesc,
127+
Stateful: securityGroupsStateful,
128+
InboundDefaultPolicy: securityGroupsInboundDefaultPolicy,
129+
OutboundDefaultPolicy: securityGroupsOutboundDefaultPolicy,
106130
}, args[0])
107131
}
108132

pkg/cli/x_security-groups_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package cli
2+
3+
import (
4+
"testing"
5+
6+
. "github.com/smartystreets/goconvey/convey"
7+
)
8+
9+
func TestSecurity_groups(t *testing.T) {
10+
Convey("Testing Security groups valid policy", t, func() {
11+
So(isValidPolicy("accept"), ShouldEqual, true)
12+
So(isValidPolicy("notvalid"), ShouldEqual, false)
13+
})
14+
}

0 commit comments

Comments
 (0)