Attempt default rules API for security groups.
diff --git a/interfaces.go b/interfaces.go
index b038aa7..bdfaffd 100644
--- a/interfaces.go
+++ b/interfaces.go
@@ -214,4 +214,16 @@
// DeleteSecurityGroupById disposes of a security group corresponding to the provided ID number.
// This method works only if the provider supports the os-security-groups extension.
DeleteSecurityGroupById(id int) error
+
+ // ListDefaultSGRules lists default security group rules.
+ // This method only works if the provider supports the os-security-groups-default-rules extension.
+ ListDefaultSGRules() ([]SGRule, error)
+
+ // CreateDefaultSGRule creates a default security group rule.
+ // This method only works if the provider supports the os-security-groups-default-rules extension.
+ CreateDefaultSGRule(SGRule) error
+
+ // GetSGRule obtains information for a specified security group rule.
+ // This method only works if the provider supports the os-security-groups-default-rules extension.
+ GetSGRule(string) (*SGRule, error)
}
diff --git a/servers.go b/servers.go
index a66e9f2..1b5814d 100644
--- a/servers.go
+++ b/servers.go
@@ -486,6 +486,52 @@
return err
}
+// See the CloudServersProvider interface for details.
+func (gsp *genericServersProvider) ListDefaultSGRules() ([]SGRule, error) {
+ var sgrs []SGRule
+ err := gsp.context.WithReauth(gsp.access, func() error {
+ ep := fmt.Sprintf("%s/os-security-group-rules", gsp.endpoint)
+ return perigee.Get(ep, perigee.Options{
+ MoreHeaders: map[string]string{
+ "X-Auth-Token": gsp.access.AuthToken(),
+ },
+ Results: &struct{Security_group_default_rules *[]SGRule}{&sgrs},
+ })
+ })
+ return sgrs, err
+}
+
+// See the CloudServersProvider interface for details.
+func (gsp *genericServersProvider) CreateDefaultSGRule(r SGRule) error {
+ var sgr *SGRule
+ err := gsp.context.WithReauth(gsp.access, func() error {
+ ep := fmt.Sprintf("%s/os-security-group-rules", gsp.endpoint)
+ return perigee.Post(ep, perigee.Options{
+ MoreHeaders: map[string]string{
+ "X-Auth-Token": gsp.access.AuthToken(),
+ },
+ Results: &struct{Security_group_default_rule **SGRule}{&sgr},
+ ReqBody: struct{Security_group_default_rule SGRule `json:"security_group_default_rule"`}{r},
+ })
+ })
+ return sgr, err
+}
+
+// See the CloudServersProvider interface for details.
+func (gsp *genericServersProvider) GetSGRule(id string) (*SGRule, error) {
+ var sgr *SGRule
+ err := gsp.context.WithReauth(gsp.access, func() error {
+ ep := fmt.Sprintf("%s/os-security-group-rules/%s", gsp.endpoint, id)
+ return perigee.Get(ep, perigee.Options{
+ MoreHeaders: map[string]string{
+ "X-Auth-Token": gsp.access.AuthToken(),
+ },
+ Results: &struct{Security_group_default_rule **SGRule}{&sgr}
+ })
+ })
+ return sgr, err
+}
+
// SecurityGroup provides a description of a security group, including all its rules.
type SecurityGroup struct {
Description string `json:"description,omitempty"`