示例#1
0
func ProbeNetworkProviders(remoteAddr string) error {
	conn, err := grpc.Dial(remoteAddr, grpc.WithInsecure())
	if err != nil {
		glog.Errorf("Connect network provider %s failed: %v", remoteAddr, err)
		return err
	}

	networkClient := types.NewNetworksClient(conn)
	podClient := types.NewPodsClient(conn)
	lbClient := types.NewLoadBalancersClient(conn)
	resp, err := networkClient.Active(
		context.Background(),
		&types.ActiveRequest{},
	)
	if err != nil || !resp.Result {
		glog.Errorf("Active network provider %s failed: %v", remoteAddr, err)
		return err
	}

	networkprovider.RegisterNetworkProvider(remoteAddr, func() (networkprovider.Interface, error) {
		return &RemoteProvider{
			server:             remoteAddr,
			podClient:          podClient,
			loadbalancerClient: lbClient,
			networkClient:      networkClient,
		}, nil
	})

	return nil
}
示例#2
0
func ProbeNetworkProviders() {
	files, _ := ioutil.ReadDir(PluginsPath)
	for _, f := range files {
		// only treat .sock/.spec as plugins
		if !f.IsDir() {
			if strings.HasSuffix(f.Name(), ".sock") || strings.HasSuffix(f.Name(), ".spec") {
				pluginName := f.Name()[:len(f.Name())-5]
				networkprovider.RegisterNetworkProvider(pluginName, func() (networkprovider.Interface, error) {
					plugin, err := GetPlugin(pluginName)
					if err != nil {
						glog.Warningf("Initialize network provider %s failed: %v", pluginName, err)
						return nil, err
					} else {
						glog.V(4).Infof("Network provider %s initialized", pluginName)
					}

					return plugin, nil
				})
			}
		}
	}
}