Fix the authorizeSecurityGroup[In|E]gress responses (#69)
diff --git a/cloudstack/FirewallService.go b/cloudstack/FirewallService.go
index 2a7ddbe..566643a 100644
--- a/cloudstack/FirewallService.go
+++ b/cloudstack/FirewallService.go
@@ -287,11 +287,6 @@
return nil, err
}
- resp, err = convertFirewallServiceResponse(resp)
- if err != nil {
- return nil, err
- }
-
var r ListPortForwardingRulesResponse
if err := json.Unmarshal(resp, &r); err != nil {
return nil, err
@@ -506,11 +501,6 @@
return nil, err
}
- resp, err = convertFirewallServiceResponse(resp)
- if err != nil {
- return nil, err
- }
-
var r CreatePortForwardingRuleResponse
if err := json.Unmarshal(resp, &r); err != nil {
return nil, err
@@ -614,11 +604,6 @@
return nil, err
}
- resp, err = convertFirewallServiceResponse(resp)
- if err != nil {
- return nil, err
- }
-
var r DeletePortForwardingRuleResponse
if err := json.Unmarshal(resp, &r); err != nil {
return nil, err
@@ -748,11 +733,6 @@
return nil, err
}
- resp, err = convertFirewallServiceResponse(resp)
- if err != nil {
- return nil, err
- }
-
var r UpdatePortForwardingRuleResponse
if err := json.Unmarshal(resp, &r); err != nil {
return nil, err
@@ -951,11 +931,6 @@
return nil, err
}
- resp, err = convertFirewallServiceResponse(resp)
- if err != nil {
- return nil, err
- }
-
var r CreateFirewallRuleResponse
if err := json.Unmarshal(resp, &r); err != nil {
return nil, err
@@ -1055,11 +1030,6 @@
return nil, err
}
- resp, err = convertFirewallServiceResponse(resp)
- if err != nil {
- return nil, err
- }
-
var r DeleteFirewallRuleResponse
if err := json.Unmarshal(resp, &r); err != nil {
return nil, err
@@ -1306,11 +1276,6 @@
return nil, err
}
- resp, err = convertFirewallServiceResponse(resp)
- if err != nil {
- return nil, err
- }
-
var r ListFirewallRulesResponse
if err := json.Unmarshal(resp, &r); err != nil {
return nil, err
@@ -1412,11 +1377,6 @@
return nil, err
}
- resp, err = convertFirewallServiceResponse(resp)
- if err != nil {
- return nil, err
- }
-
var r UpdateFirewallRuleResponse
if err := json.Unmarshal(resp, &r); err != nil {
return nil, err
@@ -1611,11 +1571,6 @@
return nil, err
}
- resp, err = convertFirewallServiceResponse(resp)
- if err != nil {
- return nil, err
- }
-
var r CreateEgressFirewallRuleResponse
if err := json.Unmarshal(resp, &r); err != nil {
return nil, err
@@ -1715,11 +1670,6 @@
return nil, err
}
- resp, err = convertFirewallServiceResponse(resp)
- if err != nil {
- return nil, err
- }
-
var r DeleteEgressFirewallRuleResponse
if err := json.Unmarshal(resp, &r); err != nil {
return nil, err
@@ -1966,11 +1916,6 @@
return nil, err
}
- resp, err = convertFirewallServiceResponse(resp)
- if err != nil {
- return nil, err
- }
-
var r ListEgressFirewallRulesResponse
if err := json.Unmarshal(resp, &r); err != nil {
return nil, err
@@ -2072,11 +2017,6 @@
return nil, err
}
- resp, err = convertFirewallServiceResponse(resp)
- if err != nil {
- return nil, err
- }
-
var r UpdateEgressFirewallRuleResponse
if err := json.Unmarshal(resp, &r); err != nil {
return nil, err
@@ -2224,11 +2164,6 @@
return nil, err
}
- resp, err = convertFirewallServiceResponse(resp)
- if err != nil {
- return nil, err
- }
-
var r AddPaloAltoFirewallResponse
if err := json.Unmarshal(resp, &r); err != nil {
return nil, err
@@ -2320,11 +2255,6 @@
return nil, err
}
- resp, err = convertFirewallServiceResponse(resp)
- if err != nil {
- return nil, err
- }
-
var r DeletePaloAltoFirewallResponse
if err := json.Unmarshal(resp, &r); err != nil {
return nil, err
@@ -2409,11 +2339,6 @@
return nil, err
}
- resp, err = convertFirewallServiceResponse(resp)
- if err != nil {
- return nil, err
- }
-
var r ConfigurePaloAltoFirewallResponse
if err := json.Unmarshal(resp, &r); err != nil {
return nil, err
@@ -2550,11 +2475,6 @@
return nil, err
}
- resp, err = convertFirewallServiceResponse(resp)
- if err != nil {
- return nil, err
- }
-
var r ListPaloAltoFirewallsResponse
if err := json.Unmarshal(resp, &r); err != nil {
return nil, err
diff --git a/cloudstack/SecurityGroupService.go b/cloudstack/SecurityGroupService.go
index 8034424..7a56c1c 100644
--- a/cloudstack/SecurityGroupService.go
+++ b/cloudstack/SecurityGroupService.go
@@ -24,6 +24,38 @@
"strings"
)
+// Helper function for maintaining backwards compatibility
+func convertAuthorizeSecurityGroupIngressResponse(b []byte) ([]byte, error) {
+ var raw struct {
+ Ingressrule []interface{} `json:"ingressrule"`
+ }
+ if err := json.Unmarshal(b, &raw); err != nil {
+ return nil, err
+ }
+
+ if len(raw.Ingressrule) != 1 {
+ return b, nil
+ }
+
+ return json.Marshal(raw.Ingressrule[0])
+}
+
+// Helper function for maintaining backwards compatibility
+func convertAuthorizeSecurityGroupEgressResponse(b []byte) ([]byte, error) {
+ var raw struct {
+ Egressrule []interface{} `json:"egressrule"`
+ }
+ if err := json.Unmarshal(b, &raw); err != nil {
+ return nil, err
+ }
+
+ if len(raw.Egressrule) != 1 {
+ return b, nil
+ }
+
+ return json.Marshal(raw.Egressrule[0])
+}
+
type CreateSecurityGroupParams struct {
p map[string]interface{}
}
@@ -472,6 +504,11 @@
return nil, err
}
+ b, err = convertAuthorizeSecurityGroupIngressResponse(b)
+ if err != nil {
+ return nil, err
+ }
+
if err := json.Unmarshal(b, &r); err != nil {
return nil, err
}
@@ -760,6 +797,11 @@
return nil, err
}
+ b, err = convertAuthorizeSecurityGroupEgressResponse(b)
+ if err != nil {
+ return nil, err
+ }
+
if err := json.Unmarshal(b, &r); err != nil {
return nil, err
}
diff --git a/generate/generate.go b/generate/generate.go
index 46ec022..5a6d020 100644
--- a/generate/generate.go
+++ b/generate/generate.go
@@ -617,6 +617,40 @@
pn("}")
pn("")
}
+ if s.name == "SecurityGroupService" {
+ pn("// Helper function for maintaining backwards compatibility")
+ pn("func convertAuthorizeSecurityGroupIngressResponse(b []byte) ([]byte, error) {")
+ pn(" var raw struct {")
+ pn(" Ingressrule []interface{} `json:\"ingressrule\"`")
+ pn(" }")
+ pn(" if err := json.Unmarshal(b, &raw); err != nil {")
+ pn(" return nil, err")
+ pn(" }")
+ pn("")
+ pn(" if len(raw.Ingressrule) != 1 {")
+ pn(" return b, nil")
+ pn(" }")
+ pn("")
+ pn(" return json.Marshal(raw.Ingressrule[0])")
+ pn("}")
+ pn("")
+ pn("// Helper function for maintaining backwards compatibility")
+ pn("func convertAuthorizeSecurityGroupEgressResponse(b []byte) ([]byte, error) {")
+ pn(" var raw struct {")
+ pn(" Egressrule []interface{} `json:\"egressrule\"`")
+ pn(" }")
+ pn(" if err := json.Unmarshal(b, &raw); err != nil {")
+ pn(" return nil, err")
+ pn(" }")
+ pn("")
+ pn(" if len(raw.Egressrule) != 1 {")
+ pn(" return b, nil")
+ pn(" }")
+ pn("")
+ pn(" return json.Marshal(raw.Egressrule[0])")
+ pn("}")
+ pn("")
+ }
for _, a := range s.apis {
s.generateParamType(a)
@@ -1032,13 +1066,6 @@
pn(" }")
pn("")
}
- if s.name == "FirewallService" {
- pn(" resp, err = convertFirewallServiceResponse(resp)")
- pn(" if err != nil {")
- pn(" return nil, err")
- pn(" }")
- pn("")
- }
pn(" var r %s", n+"Response")
pn(" if err := json.Unmarshal(resp, &r); err != nil {")
pn(" return nil, err")
@@ -1069,6 +1096,20 @@
pn(" }")
pn("")
}
+ if n == "AuthorizeSecurityGroupIngress" {
+ pn(" b, err = convertAuthorizeSecurityGroupIngressResponse(b)")
+ pn(" if err != nil {")
+ pn(" return nil, err")
+ pn(" }")
+ pn("")
+ }
+ if n == "AuthorizeSecurityGroupEgress" {
+ pn(" b, err = convertAuthorizeSecurityGroupEgressResponse(b)")
+ pn(" if err != nil {")
+ pn(" return nil, err")
+ pn(" }")
+ pn("")
+ }
pn(" if err := json.Unmarshal(b, &r); err != nil {")
pn(" return nil, err")
pn(" }")