@@ -18,6 +18,8 @@ package handlers
1818import (
1919 "fmt"
2020
21+ "github.com/haproxytech/client-native/v6/runtime"
22+
2123 "github.com/go-openapi/runtime/middleware"
2224 client_native "github.com/haproxytech/client-native/v6"
2325 "github.com/haproxytech/client-native/v6/models"
@@ -108,25 +110,28 @@ func (h *CreateServerHandlerImpl) Handle(params server.CreateServerParams, princ
108110 return server .NewCreateServerDefault (int (* e .Code )).WithPayload (e )
109111 }
110112
111- // Try to create the new server dynamically. This is only possible if no `default_server`
113+ // Try to create the new server dynamically. This is only possible if parentType is `backend` and no `default_server`
112114 // was defined in the current backend or in the `defaults` section.
113115 useRuntime := false
114- var ras * models.RuntimeAddServer
115- _ , defaults , err := configuration .GetDefaultsConfiguration (t )
116- if err != nil {
117- e := misc .HandleError (err )
118- return server .NewCreateServerDefault (int (* e .Code )).WithPayload (e )
119- }
120- _ , backend , err := configuration .GetBackend (pName , t )
121- if err != nil {
122- e := misc .HandleError (err )
123- return server .NewCreateServerDefault (int (* e .Code )).WithPayload (e )
124- }
125- runtime , err := h .Client .Runtime ()
126- if err == nil && defaults .DefaultServer == nil && backend .DefaultServer == nil {
127- // Also make sure the server attributes are supported by the runtime API.
128- err = misc .ConvertStruct (params .Data , ras )
129- useRuntime = err == nil
116+ ras := & models.RuntimeAddServer {}
117+ var runtimeClient runtime.Runtime
118+ if pType == "backend" {
119+ _ , defaults , errRuntime := configuration .GetDefaultsConfiguration (t )
120+ if errRuntime != nil {
121+ e := misc .HandleError (errRuntime )
122+ return server .NewCreateServerDefault (int (* e .Code )).WithPayload (e )
123+ }
124+ _ , backend , errRuntime := configuration .GetBackend (pName , t )
125+ if errRuntime != nil {
126+ e := misc .HandleError (errRuntime )
127+ return server .NewCreateServerDefault (int (* e .Code )).WithPayload (e )
128+ }
129+ runtimeClient , errRuntime = h .Client .Runtime ()
130+ if errRuntime == nil && defaults .DefaultServer == nil && backend .DefaultServer == nil {
131+ // Also make sure the server attributes are supported by the runtime API.
132+ errRuntime = misc .ConvertStruct (params .Data , ras )
133+ useRuntime = errRuntime == nil
134+ }
130135 }
131136
132137 if params .TransactionID == nil {
@@ -139,9 +144,10 @@ func (h *CreateServerHandlerImpl) Handle(params server.CreateServerParams, princ
139144 return server .NewCreateServerCreated ().WithPayload (params .Data )
140145 }
141146 if useRuntime {
142- err = runtime .AddServer (pName , params .Data .Name , SerializeRuntimeAddServer (ras ))
147+ err = runtimeClient .AddServer (pName , params .Data .Name , SerializeRuntimeAddServer (ras ))
143148 if err == nil {
144149 // No need to reload.
150+ log .Debugf ("backend %s: server %s added though runtime" , pName , params .Data .Name )
145151 return server .NewCreateServerCreated ().WithPayload (params .Data )
146152 }
147153 log .Warning ("failed to add server through runtime:" , err )
0 commit comments