You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
consul/vendor/github.com/nicolai86/scaleway-sdk/security_group.go

147 lines
4.1 KiB

package api
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
)
// SecurityGroup definition
type SecurityGroup struct {
Description string `json:"description"`
ID string `json:"id"`
Organization string `json:"organization"`
Name string `json:"name"`
Servers []ServerRef `json:"servers"`
EnableDefaultSecurity bool `json:"enable_default_security"`
OrganizationDefault bool `json:"organization_default"`
}
type SecurityGroupRef struct {
Identifier string `json:"id,omitempty"`
Name string `json:"name,omitempty"`
}
type ServerRef struct {
Identifier string `json:"id,omitempty"`
Name string `json:"name,omitempty"`
}
// getSecurityGroups represents the response of a GET /security_groups/
type getSecurityGroups struct {
SecurityGroups []SecurityGroup `json:"security_groups"`
}
// getSecurityGroup represents the response of a GET /security_groups/{groupID}
type getSecurityGroup struct {
SecurityGroup SecurityGroup `json:"security_group"`
}
// NewSecurityGroup definition POST request /security_groups
type NewSecurityGroup struct {
Organization string `json:"organization"`
Name string `json:"name"`
Description string `json:"description"`
EnableDefaultSecurity bool `json:"enable_default_security"`
}
// UpdateSecurityGroup definition PUT request /security_groups
type UpdateSecurityGroup struct {
Organization string `json:"organization"`
Name string `json:"name"`
Description string `json:"description"`
OrganizationDefault bool `json:"organization_default"`
}
// DeleteSecurityGroup deletes a SecurityGroup
func (s *API) DeleteSecurityGroup(securityGroupID string) error {
resp, err := s.DeleteResponse(s.computeAPI, fmt.Sprintf("security_groups/%s", securityGroupID))
if err != nil {
return err
}
defer resp.Body.Close()
_, err = s.handleHTTPError([]int{http.StatusNoContent}, resp)
return err
}
// UpdateSecurityGroup updates a SecurityGroup
func (s *API) UpdateSecurityGroup(group UpdateSecurityGroup, securityGroupID string) (*SecurityGroup, error) {
resp, err := s.PutResponse(s.computeAPI, fmt.Sprintf("security_groups/%s", securityGroupID), group)
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, err := s.handleHTTPError([]int{http.StatusOK}, resp)
if err != nil {
return nil, err
}
var data getSecurityGroup
if err = json.Unmarshal(body, &data); err != nil {
return nil, err
}
return &data.SecurityGroup, err
}
// GetSecurityGroup returns a SecurityGroup
func (s *API) GetSecurityGroup(groupsID string) (*SecurityGroup, error) {
resp, err := s.GetResponsePaginate(s.computeAPI, fmt.Sprintf("security_groups/%s", groupsID), url.Values{})
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, err := s.handleHTTPError([]int{http.StatusOK}, resp)
if err != nil {
return nil, err
}
var securityGroups getSecurityGroup
if err = json.Unmarshal(body, &securityGroups); err != nil {
return nil, err
}
return &securityGroups.SecurityGroup, nil
}
// CreateSecurityGroup posts a group on a server
func (s *API) CreateSecurityGroup(group NewSecurityGroup) (*SecurityGroup, error) {
resp, err := s.PostResponse(s.computeAPI, "security_groups", group)
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, err := s.handleHTTPError([]int{http.StatusCreated}, resp)
if err != nil {
return nil, err
}
var securityGroups getSecurityGroup
if err = json.Unmarshal(body, &securityGroups); err != nil {
return nil, err
}
return &securityGroups.SecurityGroup, nil
}
// GetSecurityGroups returns a SecurityGroups
func (s *API) GetSecurityGroups() ([]SecurityGroup, error) {
resp, err := s.GetResponsePaginate(s.computeAPI, "security_groups", url.Values{})
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, err := s.handleHTTPError([]int{http.StatusOK}, resp)
if err != nil {
return nil, err
}
var securityGroups getSecurityGroups
if err = json.Unmarshal(body, &securityGroups); err != nil {
return nil, err
}
return securityGroups.SecurityGroups, nil
}