@@ -18,6 +18,8 @@ package handlers
18
18
import (
19
19
"fmt"
20
20
21
+ "github.com/haproxytech/client-native/v6/runtime"
22
+
21
23
"github.com/go-openapi/runtime/middleware"
22
24
client_native "github.com/haproxytech/client-native/v6"
23
25
"github.com/haproxytech/client-native/v6/models"
@@ -108,25 +110,28 @@ func (h *CreateServerHandlerImpl) Handle(params server.CreateServerParams, princ
108
110
return server .NewCreateServerDefault (int (* e .Code )).WithPayload (e )
109
111
}
110
112
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`
112
114
// was defined in the current backend or in the `defaults` section.
113
115
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
+ }
130
135
}
131
136
132
137
if params .TransactionID == nil {
@@ -139,9 +144,10 @@ func (h *CreateServerHandlerImpl) Handle(params server.CreateServerParams, princ
139
144
return server .NewCreateServerCreated ().WithPayload (params .Data )
140
145
}
141
146
if useRuntime {
142
- err = runtime .AddServer (pName , params .Data .Name , SerializeRuntimeAddServer (ras ))
147
+ err = runtimeClient .AddServer (pName , params .Data .Name , SerializeRuntimeAddServer (ras ))
143
148
if err == nil {
144
149
// No need to reload.
150
+ log .Debugf ("backend %s: server %s added though runtime" , pName , params .Data .Name )
145
151
return server .NewCreateServerCreated ().WithPayload (params .Data )
146
152
}
147
153
log .Warning ("failed to add server through runtime:" , err )
0 commit comments