Restructure go-micro layout and plugins
This commit is contained in:
		
							
								
								
									
										72
									
								
								registry/kubernetes/watcher.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								registry/kubernetes/watcher.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,72 @@ | ||||
| package kubernetes | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"net" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/GoogleCloudPlatform/kubernetes/pkg/api" | ||||
| 	"github.com/GoogleCloudPlatform/kubernetes/pkg/proxy/config" | ||||
| 	"github.com/GoogleCloudPlatform/kubernetes/pkg/util" | ||||
| ) | ||||
|  | ||||
| type watcher struct { | ||||
| 	registry *kregistry | ||||
| } | ||||
|  | ||||
| func (k *watcher) OnUpdate(services []api.Service) { | ||||
| 	fmt.Println("got update") | ||||
| 	activeServices := util.StringSet{} | ||||
| 	for _, svc := range services { | ||||
| 		fmt.Printf("%#v\n", svc.ObjectMeta) | ||||
| 		name, exists := svc.ObjectMeta.Labels["name"] | ||||
| 		if !exists { | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| 		activeServices.Insert(name) | ||||
| 		serviceIP := net.ParseIP(svc.Spec.PortalIP) | ||||
|  | ||||
| 		ks := &service{ | ||||
| 			name: name, | ||||
| 			nodes: []*node{ | ||||
| 				&node{ | ||||
| 					address: serviceIP.String(), | ||||
| 					port:    svc.Spec.Ports[0].Port, | ||||
| 				}, | ||||
| 			}, | ||||
| 		} | ||||
|  | ||||
| 		k.registry.mtx.Lock() | ||||
| 		k.registry.services[name] = ks | ||||
| 		k.registry.mtx.Unlock() | ||||
| 	} | ||||
|  | ||||
| 	k.registry.mtx.Lock() | ||||
| 	defer k.registry.mtx.Unlock() | ||||
| 	for name, _ := range k.registry.services { | ||||
| 		if !activeServices.Has(name) { | ||||
| 			delete(k.registry.services, name) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func newWatcher(kr *kregistry) *watcher { | ||||
| 	serviceConfig := config.NewServiceConfig() | ||||
| 	endpointsConfig := config.NewEndpointsConfig() | ||||
|  | ||||
| 	config.NewSourceAPI( | ||||
| 		kr.client.Services(api.NamespaceAll), | ||||
| 		kr.client.Endpoints(api.NamespaceAll), | ||||
| 		time.Second*10, | ||||
| 		serviceConfig.Channel("api"), | ||||
| 		endpointsConfig.Channel("api"), | ||||
| 	) | ||||
|  | ||||
| 	ks := &watcher{ | ||||
| 		registry: kr, | ||||
| 	} | ||||
|  | ||||
| 	serviceConfig.RegisterHandler(ks) | ||||
| 	return ks | ||||
| } | ||||
		Reference in New Issue
	
	Block a user