@@ -26,17 +26,17 @@ type ServiceDiscoveryClient interface {
26
26
// ListServices returns all services and their endpoints for a given namespace.
27
27
ListServices (ctx context.Context , namespaceName string ) ([]* model.Service , error )
28
28
29
- // CreateService creates a Cloud Map service resource and returns the created service struct .
30
- CreateService (ctx context.Context , service * model. Service ) error
29
+ // CreateService creates a Cloud Map service resource, and namespace if necessary .
30
+ CreateService (ctx context.Context , namespaceName string , serviceName string ) error
31
31
32
32
// GetService returns a service resource fetched from AWS Cloud Map or nil if not found.
33
33
GetService (ctx context.Context , namespaceName string , serviceName string ) (* model.Service , error )
34
34
35
35
// RegisterEndpoints registers all endpoints for given service.
36
- RegisterEndpoints (ctx context.Context , service * model.Service ) error
36
+ RegisterEndpoints (ctx context.Context , namespaceName string , serviceName string , endpoints [] * model.Endpoint ) error
37
37
38
38
// DeleteEndpoints de-registers all endpoints for given service.
39
- DeleteEndpoints (ctx context.Context , service * model.Service ) error
39
+ DeleteEndpoints (ctx context.Context , namespaceName string , serviceName string , endpoints [] * model.Endpoint ) error
40
40
}
41
41
42
42
type serviceDiscoveryClient struct {
@@ -59,8 +59,6 @@ func NewServiceDiscoveryClient(cfg *aws.Config) ServiceDiscoveryClient {
59
59
}
60
60
61
61
func (sdc * serviceDiscoveryClient ) ListServices (ctx context.Context , nsName string ) (svcs []* model.Service , err error ) {
62
- svcs = make ([]* model.Service , 0 )
63
-
64
62
nsId , err := sdc .getNamespaceId (ctx , nsName )
65
63
if err != nil || nsId == "" {
66
64
return svcs , err
@@ -73,14 +71,14 @@ func (sdc *serviceDiscoveryClient) ListServices(ctx context.Context, nsName stri
73
71
}
74
72
75
73
for _ , svcSum := range svcSums {
76
- endpts , endptsErr := sdc .ListEndpoints (ctx , svcSum .Id )
74
+ sdc .cacheServiceId (nsName , svcSum .Name , svcSum .Id )
75
+
76
+ endpts , endptsErr := sdc .listEndpoints (ctx , svcSum .Id )
77
77
78
- if err != nil {
78
+ if endptsErr != nil {
79
79
return svcs , endptsErr
80
80
}
81
81
82
- sdc .cacheServiceId (nsName , svcSum .Name , svcSum .Id )
83
-
84
82
svcs = append (svcs , & model.Service {
85
83
Namespace : nsName ,
86
84
Name : svcSum .Name ,
@@ -91,45 +89,31 @@ func (sdc *serviceDiscoveryClient) ListServices(ctx context.Context, nsName stri
91
89
return svcs , nil
92
90
}
93
91
94
- func (sdc * serviceDiscoveryClient ) ListEndpoints (ctx context.Context , serviceId string ) (endpts []* model.Endpoint , err error ) {
95
-
96
- if cachedValue , exists := sdc .endpointCache .Get (serviceId ); exists {
97
- return cachedValue .([]* model.Endpoint ), nil
98
- }
99
-
100
- endpts , err = sdc .sdApi .ListInstances (ctx , serviceId )
101
-
102
- if err != nil {
103
- return nil , err
104
- }
105
-
106
- sdc .cacheEndpoints (serviceId , endpts )
107
-
108
- return endpts , nil
109
- }
110
-
111
- func (sdc * serviceDiscoveryClient ) CreateService (ctx context.Context , service * model.Service ) (err error ) {
112
- sdc .log .Info ("creating a new service" , "namespace" , service .Namespace , "name" , service .Name )
92
+ func (sdc * serviceDiscoveryClient ) CreateService (ctx context.Context , nsName string , svcName string ) (err error ) {
93
+ sdc .log .Info ("creating a new service" , "namespace" , nsName , "name" , svcName )
113
94
114
- nsId , err := sdc .getNamespaceId (ctx , service . Namespace )
95
+ nsId , err := sdc .getNamespaceId (ctx , nsName )
115
96
if err != nil {
116
97
return err
117
98
}
118
99
119
100
if nsId == "" {
120
- nsId , err = sdc .createNamespace (ctx , service .Namespace )
101
+ nsId , err = sdc .createNamespace (ctx , nsName )
102
+ }
103
+ if err != nil {
104
+ return err
121
105
}
122
106
123
107
//TODO: Handle non-http namespaces
124
- svcId , err := sdc .sdApi .CreateService (ctx , nsId , service . Name )
108
+ svcId , err := sdc .sdApi .CreateService (ctx , nsId , svcName )
125
109
126
110
if err != nil {
127
111
return err
128
112
}
129
113
130
- sdc .cacheServiceId (service . Namespace , service . Name , svcId )
114
+ sdc .cacheServiceId (nsName , svcName , svcId )
131
115
132
- return sdc . RegisterEndpoints ( ctx , service )
116
+ return nil
133
117
}
134
118
135
119
func (sdc * serviceDiscoveryClient ) GetService (ctx context.Context , nsName string , svcName string ) (svc * model.Service , err error ) {
@@ -145,7 +129,7 @@ func (sdc *serviceDiscoveryClient) GetService(ctx context.Context, nsName string
145
129
return nil , nil
146
130
}
147
131
148
- endpts , err := sdc .ListEndpoints (ctx , svcId )
132
+ endpts , err := sdc .listEndpoints (ctx , svcId )
149
133
150
134
if err != nil {
151
135
return nil , err
@@ -160,23 +144,22 @@ func (sdc *serviceDiscoveryClient) GetService(ctx context.Context, nsName string
160
144
return svc , nil
161
145
}
162
146
163
- func (sdc * serviceDiscoveryClient ) RegisterEndpoints (ctx context.Context , service * model.Service ) (err error ) {
164
- if len (service . Endpoints ) == 0 {
165
- sdc .log .Info ("skipping endpoint registration for empty endpoint list" , "serviceName" , service . Name )
147
+ func (sdc * serviceDiscoveryClient ) RegisterEndpoints (ctx context.Context , nsName string , svcName string , endpts [] * model.Endpoint ) (err error ) {
148
+ if len (endpts ) == 0 {
149
+ sdc .log .Info ("skipping endpoint registration for empty endpoint list" , "serviceName" , svcName )
166
150
return nil
167
151
}
168
152
169
- sdc .log .Info ("registering endpoints" , "namespaceName" , service .Namespace ,
170
- "serviceName" , service .Name , "endpoints" , service .Endpoints )
153
+ sdc .log .Info ("registering endpoints" , "namespaceName" , nsName , "serviceName" , svcName , "endpoints" , endpts )
171
154
172
- svcId , err := sdc .getServiceId (ctx , service . Namespace , service . Name )
155
+ svcId , err := sdc .getServiceId (ctx , nsName , svcName )
173
156
if err != nil {
174
157
return err
175
158
}
176
159
177
160
opCollector := NewOperationCollector ()
178
161
179
- for _ , endpt := range service . Endpoints {
162
+ for _ , endpt := range endpts {
180
163
opCollector .Add (func () (opId string , err error ) {
181
164
return sdc .sdApi .RegisterInstance (ctx , svcId , endpt .Id , endpt .GetCloudMapAttributes ())
182
165
})
@@ -198,23 +181,23 @@ func (sdc *serviceDiscoveryClient) RegisterEndpoints(ctx context.Context, servic
198
181
return nil
199
182
}
200
183
201
- func (sdc * serviceDiscoveryClient ) DeleteEndpoints (ctx context.Context , service * model.Service ) (err error ) {
202
- if len (service . Endpoints ) == 0 {
203
- sdc .log .Info ("skipping endpoint deletion for empty endpoint list" , "serviceName" , service . Name )
184
+ func (sdc * serviceDiscoveryClient ) DeleteEndpoints (ctx context.Context , nsName string , svcName string , endpts [] * model.Endpoint ) (err error ) {
185
+ if len (endpts ) == 0 {
186
+ sdc .log .Info ("skipping endpoint deletion for empty endpoint list" , "serviceName" , svcName )
204
187
return nil
205
188
}
206
189
207
- sdc .log .Info ("deleting endpoints" , "namespaceName" , service . Namespace ,
208
- "serviceName" , service . Name , "endpoints" , service . Endpoints )
190
+ sdc .log .Info ("deleting endpoints" , "namespaceName" , nsName ,
191
+ "serviceName" , svcName , "endpoints" , endpts )
209
192
210
- svcId , err := sdc .getServiceId (ctx , service . Namespace , service . Name )
193
+ svcId , err := sdc .getServiceId (ctx , nsName , svcName )
211
194
if err != nil {
212
195
return err
213
196
}
214
197
215
198
opCollector := NewOperationCollector ()
216
199
217
- for _ , endpt := range service . Endpoints {
200
+ for _ , endpt := range endpts {
218
201
opCollector .Add (func () (opId string , err error ) {
219
202
return sdc .sdApi .DeregisterInstance (ctx , svcId , endpt .Id )
220
203
})
@@ -236,6 +219,23 @@ func (sdc *serviceDiscoveryClient) DeleteEndpoints(ctx context.Context, service
236
219
return nil
237
220
}
238
221
222
+ func (sdc * serviceDiscoveryClient ) listEndpoints (ctx context.Context , serviceId string ) (endpts []* model.Endpoint , err error ) {
223
+
224
+ if cachedValue , exists := sdc .endpointCache .Get (serviceId ); exists {
225
+ return cachedValue .([]* model.Endpoint ), nil
226
+ }
227
+
228
+ endpts , err = sdc .sdApi .ListInstances (ctx , serviceId )
229
+
230
+ if err != nil {
231
+ return nil , err
232
+ }
233
+
234
+ sdc .cacheEndpoints (serviceId , endpts )
235
+
236
+ return endpts , nil
237
+ }
238
+
239
239
func (sdc * serviceDiscoveryClient ) getNamespaceId (ctx context.Context , nsName string ) (nsId string , err error ) {
240
240
// We are assuming a unique namespace name per account
241
241
if cachedValue , exists := sdc .namespaceIdCache .Get (nsName ); exists {
@@ -307,10 +307,6 @@ func (sdc *serviceDiscoveryClient) createNamespace(ctx context.Context, nsName s
307
307
return "" , err
308
308
}
309
309
310
- if nsId == "" {
311
- return "" , fmt .Errorf ("failed to create namespace" )
312
- }
313
-
314
310
sdc .cacheNamespaceId (nsName , nsId )
315
311
316
312
return nsId , nil
0 commit comments