@@ -3,26 +3,17 @@ package common
3
3
import (
4
4
"fmt"
5
5
"net"
6
- "reflect"
7
- "strings"
8
- "time"
9
6
10
7
"github.com/golang/glog"
11
8
9
+ "k8s.io/apimachinery/pkg/apis/meta/v1"
10
+ kerrors "k8s.io/apimachinery/pkg/util/errors"
11
+ kapi "k8s.io/kubernetes/pkg/apis/core"
12
+
12
13
configapi "github.com/openshift/origin/pkg/cmd/server/api"
13
14
networkapi "github.com/openshift/origin/pkg/network/apis/network"
14
15
networkclient "github.com/openshift/origin/pkg/network/generated/internalclientset"
15
16
"github.com/openshift/origin/pkg/util/netutils"
16
-
17
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
18
- "k8s.io/apimachinery/pkg/fields"
19
- kerrors "k8s.io/apimachinery/pkg/util/errors"
20
- "k8s.io/apimachinery/pkg/util/wait"
21
- "k8s.io/apimachinery/pkg/watch"
22
- kcache "k8s.io/client-go/tools/cache"
23
- kapi "k8s.io/kubernetes/pkg/apis/core"
24
- "k8s.io/kubernetes/pkg/apis/networking"
25
- kinternalinformers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
26
17
)
27
18
28
19
func HostSubnetToString (subnet * networkapi.HostSubnet ) string {
@@ -161,119 +152,10 @@ func (ni *NetworkInfo) CheckClusterObjects(subnets []networkapi.HostSubnet, pods
161
152
}
162
153
163
154
func GetNetworkInfo (networkClient networkclient.Interface ) (* NetworkInfo , error ) {
164
- cn , err := networkClient .Network ().ClusterNetworks ().Get (networkapi .ClusterNetworkDefault , metav1 .GetOptions {})
155
+ cn , err := networkClient .Network ().ClusterNetworks ().Get (networkapi .ClusterNetworkDefault , v1 .GetOptions {})
165
156
if err != nil {
166
157
return nil , err
167
158
}
168
159
169
160
return ParseNetworkInfo (cn .ClusterNetworks , cn .ServiceNetwork )
170
161
}
171
-
172
- type ResourceName string
173
-
174
- const (
175
- Nodes ResourceName = "Nodes"
176
- Namespaces ResourceName = "Namespaces"
177
- NetNamespaces ResourceName = "NetNamespaces"
178
- Services ResourceName = "Services"
179
- HostSubnets ResourceName = "HostSubnets"
180
- Pods ResourceName = "Pods"
181
- EgressNetworkPolicies ResourceName = "EgressNetworkPolicies"
182
- NetworkPolicies ResourceName = "NetworkPolicies"
183
- )
184
-
185
- func newEventQueue (client kcache.Getter , resourceName ResourceName , expectedType interface {}, namespace string ) * EventQueue {
186
- rn := strings .ToLower (string (resourceName ))
187
- lw := kcache .NewListWatchFromClient (client , rn , namespace , fields .Everything ())
188
- eventQueue := NewEventQueue (DeletionHandlingMetaNamespaceKeyFunc )
189
- // Repopulate event queue every 30 mins
190
- // Existing items in the event queue will have watch.Modified event type
191
- go kcache .NewReflector (lw , expectedType , eventQueue , 30 * time .Minute ).Run (wait .NeverStop )
192
- return eventQueue
193
- }
194
-
195
- // Run event queue for the given resource. The 'process' function is called
196
- // repeatedly with each available cache.Delta that describes state changes
197
- // to an object. If the process function returns an error queued changes
198
- // for that object are dropped but processing continues with the next available
199
- // object's cache.Deltas. The error is logged with call stack information.
200
- //
201
- // NOTE: this function will handle DeletedFinalStateUnknown delta objects
202
- // automatically, which may not always be what you want since the now-deleted
203
- // object may be stale.
204
- func RunEventQueue (client kcache.Getter , resourceName ResourceName , process ProcessEventFunc ) {
205
- var expectedType interface {}
206
-
207
- switch resourceName {
208
- case HostSubnets :
209
- expectedType = & networkapi.HostSubnet {}
210
- case NetNamespaces :
211
- expectedType = & networkapi.NetNamespace {}
212
- case EgressNetworkPolicies :
213
- expectedType = & networkapi.EgressNetworkPolicy {}
214
- case NetworkPolicies :
215
- expectedType = & networking.NetworkPolicy {}
216
- default :
217
- glog .Fatalf ("Unknown resource %s during initialization of event queue" , resourceName )
218
- }
219
-
220
- eventQueue := newEventQueue (client , resourceName , expectedType , metav1 .NamespaceAll )
221
- for {
222
- eventQueue .Pop (process , expectedType )
223
- }
224
- }
225
-
226
- // RegisterSharedInformerEventHandlers registers addOrUpdateFunc and delFunc event handlers with
227
- // kubernetes shared informers for the given resource name.
228
- func RegisterSharedInformerEventHandlers (kubeInformers kinternalinformers.SharedInformerFactory ,
229
- addOrUpdateFunc func (interface {}, interface {}, watch.EventType ),
230
- delFunc func (interface {}), resourceName ResourceName ) {
231
-
232
- var expectedObjType interface {}
233
- var informer kcache.SharedIndexInformer
234
-
235
- internalVersion := kubeInformers .Core ().InternalVersion ()
236
-
237
- switch resourceName {
238
- case Nodes :
239
- informer = internalVersion .Nodes ().Informer ()
240
- expectedObjType = & kapi.Node {}
241
- case Namespaces :
242
- informer = internalVersion .Namespaces ().Informer ()
243
- expectedObjType = & kapi.Namespace {}
244
- case Services :
245
- informer = internalVersion .Services ().Informer ()
246
- expectedObjType = & kapi.Service {}
247
- case Pods :
248
- informer = internalVersion .Pods ().Informer ()
249
- expectedObjType = & kapi.Pod {}
250
- default :
251
- glog .Errorf ("Unknown resource name: %s" , resourceName )
252
- return
253
- }
254
-
255
- informer .AddEventHandler (kcache.ResourceEventHandlerFuncs {
256
- AddFunc : func (obj interface {}) {
257
- addOrUpdateFunc (obj , nil , watch .Added )
258
- },
259
- UpdateFunc : func (old , cur interface {}) {
260
- addOrUpdateFunc (cur , old , watch .Modified )
261
- },
262
- DeleteFunc : func (obj interface {}) {
263
- if reflect .TypeOf (expectedObjType ) != reflect .TypeOf (obj ) {
264
- tombstone , ok := obj .(kcache.DeletedFinalStateUnknown )
265
- if ! ok {
266
- glog .Errorf ("Couldn't get object from tombstone: %+v" , obj )
267
- return
268
- }
269
-
270
- obj = tombstone .Obj
271
- if reflect .TypeOf (expectedObjType ) != reflect .TypeOf (obj ) {
272
- glog .Errorf ("Tombstone contained object that is not a %s: %+v" , resourceName , obj )
273
- return
274
- }
275
- }
276
- delFunc (obj )
277
- },
278
- })
279
- }
0 commit comments