Skip to content
This repository was archived by the owner on Aug 1, 2023. It is now read-only.

Commit d4fc90f

Browse files
committed
Merge pull request #138 from rackspace/sg-default-rules
Attempt default rules API for security groups.
2 parents 3165919 + c61289e commit d4fc90f

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

interfaces.go

+12
Original file line numberDiff line numberDiff line change
@@ -214,4 +214,16 @@ type CloudServersProvider interface {
214214
// DeleteSecurityGroupById disposes of a security group corresponding to the provided ID number.
215215
// This method works only if the provider supports the os-security-groups extension.
216216
DeleteSecurityGroupById(id int) error
217+
218+
// ListDefaultSGRules lists default security group rules.
219+
// This method only works if the provider supports the os-security-groups-default-rules extension.
220+
ListDefaultSGRules() ([]SGRule, error)
221+
222+
// CreateDefaultSGRule creates a default security group rule.
223+
// This method only works if the provider supports the os-security-groups-default-rules extension.
224+
CreateDefaultSGRule(SGRule) (*SGRule, error)
225+
226+
// GetSGRule obtains information for a specified security group rule.
227+
// This method only works if the provider supports the os-security-groups-default-rules extension.
228+
GetSGRule(string) (*SGRule, error)
217229
}

servers.go

+46
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,52 @@ func (gsp *genericServersProvider) DeleteSecurityGroupById(id int) error {
486486
return err
487487
}
488488

489+
// See the CloudServersProvider interface for details.
490+
func (gsp *genericServersProvider) ListDefaultSGRules() ([]SGRule, error) {
491+
var sgrs []SGRule
492+
err := gsp.context.WithReauth(gsp.access, func() error {
493+
ep := fmt.Sprintf("%s/os-security-group-default-rules", gsp.endpoint)
494+
return perigee.Get(ep, perigee.Options{
495+
MoreHeaders: map[string]string{
496+
"X-Auth-Token": gsp.access.AuthToken(),
497+
},
498+
Results: &struct{Security_group_default_rules *[]SGRule}{&sgrs},
499+
})
500+
})
501+
return sgrs, err
502+
}
503+
504+
// See the CloudServersProvider interface for details.
505+
func (gsp *genericServersProvider) CreateDefaultSGRule(r SGRule) (*SGRule, error) {
506+
var sgr *SGRule
507+
err := gsp.context.WithReauth(gsp.access, func() error {
508+
ep := fmt.Sprintf("%s/os-security-group-default-rules", gsp.endpoint)
509+
return perigee.Post(ep, perigee.Options{
510+
MoreHeaders: map[string]string{
511+
"X-Auth-Token": gsp.access.AuthToken(),
512+
},
513+
Results: &struct{Security_group_default_rule **SGRule}{&sgr},
514+
ReqBody: struct{Security_group_default_rule SGRule `json:"security_group_default_rule"`}{r},
515+
})
516+
})
517+
return sgr, err
518+
}
519+
520+
// See the CloudServersProvider interface for details.
521+
func (gsp *genericServersProvider) GetSGRule(id string) (*SGRule, error) {
522+
var sgr *SGRule
523+
err := gsp.context.WithReauth(gsp.access, func() error {
524+
ep := fmt.Sprintf("%s/os-security-group-default-rules/%s", gsp.endpoint, id)
525+
return perigee.Get(ep, perigee.Options{
526+
MoreHeaders: map[string]string{
527+
"X-Auth-Token": gsp.access.AuthToken(),
528+
},
529+
Results: &struct{Security_group_default_rule **SGRule}{&sgr},
530+
})
531+
})
532+
return sgr, err
533+
}
534+
489535
// SecurityGroup provides a description of a security group, including all its rules.
490536
type SecurityGroup struct {
491537
Description string `json:"description,omitempty"`

0 commit comments

Comments
 (0)