@@ -181,6 +181,10 @@ type LoadbalancerListenerCreateInput struct {
181181 AclType string `json:"acl_type"`
182182}
183183
184+ func (input LoadbalancerListenerCreateInput ) IsRedirect () bool {
185+ return len (input .Redirect ) > 0 && input .Redirect != LB_REDIRECT_OFF
186+ }
187+
184188func (self * LoadbalancerListenerCreateInput ) Validate () error {
185189 if len (self .Status ) == 0 {
186190 self .Status = LB_STATUS_ENABLED
@@ -191,7 +195,13 @@ func (self *LoadbalancerListenerCreateInput) Validate() error {
191195 if ! utils .IsInStringArray (self .SendProxy , LB_SENDPROXY_CHOICES ) {
192196 return httperrors .NewInputParameterError ("invalid send_proxy %s" , self .SendProxy )
193197 }
194- if ! utils .IsInStringArray (self .Scheduler , LB_SCHEDULER_TYPES ) {
198+ if len (self .Redirect ) == 0 {
199+ self .Redirect = LB_REDIRECT_OFF
200+ }
201+ if ! utils .IsInStringArray (self .Redirect , []string {LB_REDIRECT_OFF , LB_REDIRECT_RAW }) {
202+ return httperrors .NewInputParameterError ("invalid redirect %s" , self .Redirect )
203+ }
204+ if ! self .IsRedirect () && ! utils .IsInStringArray (self .Scheduler , LB_SCHEDULER_TYPES ) {
195205 return httperrors .NewInputParameterError ("invalid scheduler %s" , self .Scheduler )
196206 }
197207 if len (self .StickySession ) == 0 {
@@ -223,6 +233,9 @@ func (self *LoadbalancerListenerCreateInput) Validate() error {
223233 if ! utils .IsInStringArray (self .ListenerType , LB_LISTENER_TYPES ) {
224234 return httperrors .NewInputParameterError ("invalid listener_type %s" , self .ListenerType )
225235 }
236+ if self .IsRedirect () && ! utils .IsInStringArray (self .ListenerType , LB_APP_LISTENER_TYPES ) {
237+ return httperrors .NewInputParameterError ("redirect is only supported for http/https listeners" )
238+ }
226239 if self .ListenerPort < 1 || self .ListenerPort > 65535 {
227240 return httperrors .NewOutOfRangeError ("listener_port out of range 1-65535" )
228241 }
@@ -272,12 +285,7 @@ func (self *LoadbalancerListenerCreateInput) Validate() error {
272285 self .HealthCheckInterval = 30
273286 }
274287 }
275- if len (self .Redirect ) == 0 {
276- self .Redirect = LB_REDIRECT_OFF
277- }
278- if ! utils .IsInStringArray (self .Redirect , []string {LB_REDIRECT_OFF , LB_REDIRECT_RAW }) {
279- return httperrors .NewInputParameterError ("invalid redirect %s" , self .Redirect )
280- }
288+
281289 return nil
282290}
283291
0 commit comments