Skip to content

Commit 8e5bea0

Browse files
committed
Add security group inbound/outbound default policy options
1 parent 8184132 commit 8e5bea0

File tree

2 files changed

+50
-24
lines changed

2 files changed

+50
-24
lines changed

pkg/api/api.go

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,8 @@ type ScalewaySecurityGroups struct {
459459
EnableDefaultSecurity bool `json:"enable_default_security"`
460460
OrganizationDefault bool `json:"organization_default"`
461461
Stateful bool `json:"stateful"`
462+
InboundDefaultPolicy string `json:"inbound_default_policy"`
463+
OutboundDefaultPolicy string `json:"outbound_default_policy"`
462464
}
463465

464466
// ScalewayGetSecurityGroups represents the response of a GET /security_groups/
@@ -504,19 +506,23 @@ type ScalewaySecurityGroup struct {
504506

505507
// ScalewayNewSecurityGroup definition POST request /security_groups
506508
type ScalewayNewSecurityGroup struct {
507-
Organization string `json:"organization"`
508-
Name string `json:"name"`
509-
Description string `json:"description"`
510-
Stateful bool `json:"stateful"`
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"`
511515
}
512516

513517
// ScalewayUpdateSecurityGroup definition PUT request /security_groups
514518
type ScalewayUpdateSecurityGroup struct {
515-
Organization string `json:"organization"`
516-
Name string `json:"name"`
517-
Description string `json:"description"`
518-
OrganizationDefault bool `json:"organization_default"`
519-
Stateful bool `json:"stateful"`
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"`
520526
}
521527

522528
// ScalewayServer represents a Scaleway server

pkg/cli/x_security-groups.go

Lines changed: 35 additions & 15 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
@@ -43,6 +43,8 @@ func init() {
4343
cmdSecurityGroups.Flag.StringVar(&securityGroupsName, []string{"n", "-name"}, "", "SecurityGroup's name")
4444
cmdSecurityGroups.Flag.StringVar(&securityGroupsDesc, []string{"d", "-description"}, "", "SecurityGroup's description")
4545
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")
4648
subCmdSecurityGroup = map[string]func(cmd *Command, args []string) error{
4749
"list-groups": listSecurityGroup,
4850
"new-group": newSecurityGroup,
@@ -58,10 +60,12 @@ func init() {
5860
}
5961

6062
// Flags
61-
var securityGroupsHelp bool // -h, --help flag
62-
var securityGroupsName string // -n, --name flag
63-
var securityGroupsDesc string // -d, --description flag
64-
var securityGroupsStateful bool // -s, --stateful 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
6569

6670
// SubCommand
6771
var subCmdSecurityGroup map[string]func(cmd *Command, args []string) error
@@ -83,17 +87,31 @@ func printRawMode(out io.Writer, data interface{}) error {
8387
return nil
8488
}
8589

90+
func isValidPolicy(policy string) bool {
91+
switch policy {
92+
case
93+
"accept",
94+
"drop":
95+
return true
96+
}
97+
return false
98+
}
99+
86100
func newSecurityGroup(cmd *Command, args []string) error {
87101
fmt.Println(securityGroupsDesc)
88102
fmt.Println(securityGroupsName)
89-
if securityGroupsName == "" || securityGroupsDesc == "" {
103+
if securityGroupsName == "" || securityGroupsDesc == "" ||
104+
!isValidPolicy(securityGroupsInboundDefaultPolicy) ||
105+
!isValidPolicy(securityGroupsOutboundDefaultPolicy) {
90106
return cmd.PrintShortUsage()
91107
}
92108
return cmd.API.PostSecurityGroup(api.ScalewayNewSecurityGroup{
93-
Organization: cmd.API.Organization,
94-
Name: securityGroupsName,
95-
Description: securityGroupsDesc,
96-
Stateful: securityGroupsStateful,
109+
Organization: cmd.API.Organization,
110+
Name: securityGroupsName,
111+
Description: securityGroupsDesc,
112+
Stateful: securityGroupsStateful,
113+
InboundDefaultPolicy: securityGroupsInboundDefaultPolicy,
114+
OutboundDefaultPolicy: securityGroupsOutboundDefaultPolicy,
97115
})
98116
}
99117

@@ -103,10 +121,12 @@ func updateSecurityGroup(cmd *Command, args []string) error {
103121
return cmd.PrintShortUsage()
104122
}
105123
return cmd.API.PutSecurityGroup(api.ScalewayUpdateSecurityGroup{
106-
Organization: cmd.API.Organization,
107-
Name: securityGroupsName,
108-
Description: securityGroupsDesc,
109-
Stateful: securityGroupsStateful,
124+
Organization: cmd.API.Organization,
125+
Name: securityGroupsName,
126+
Description: securityGroupsDesc,
127+
Stateful: securityGroupsStateful,
128+
InboundDefaultPolicy: securityGroupsInboundDefaultPolicy,
129+
OutboundDefaultPolicy: securityGroupsOutboundDefaultPolicy,
110130
}, args[0])
111131
}
112132

0 commit comments

Comments
 (0)