func (m *RemoteManager) GetNetworkConfig(ctx context.Context, network string) (*subnet.Config, error) { url := m.mkurl(network, "config") resp, err := m.httpVerb(ctx, "GET", url, "", nil) if err != nil { return nil, err } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { return nil, httpError(resp) } body, err := ioutil.ReadAll(resp.Body) if err != nil { return nil, err } config, err := subnet.ParseConfig(string(body)) if err != nil { return nil, err } return config, nil }
func NewSubnetManager() (subnet.Manager, error) { cfg, err := restclient.InClusterConfig() if err != nil { return nil, fmt.Errorf("unable to initialize inclusterconfig: %v", err) } c, err := clientset.NewForConfig(cfg) if err != nil { return nil, fmt.Errorf("unable to initialize client: %v", err) } podName := os.Getenv("POD_NAME") podNamespace := os.Getenv("POD_NAMESPACE") if podName == "" || podNamespace == "" { return nil, fmt.Errorf("env variables POD_NAME and POD_NAMESPACE must be set") } pod, err := c.Pods(podNamespace).Get(podName) if err != nil { return nil, fmt.Errorf("error retrieving pod spec for '%s/%s': %v", podNamespace, podName, err) } nodeName := pod.Spec.NodeName if nodeName == "" { return nil, fmt.Errorf("node name not present in pod spec '%s/%s'", podNamespace, podName) } netConf, err := ioutil.ReadFile(netConfPath) if err != nil { return nil, fmt.Errorf("failed to read net conf: %v", err) } sc, err := subnet.ParseConfig(string(netConf)) if err != nil { return nil, fmt.Errorf("error parsing subnet config: %s", err) } sm, err := newKubeSubnetManager(c, sc, nodeName) if err != nil { return nil, fmt.Errorf("error creating network manager: %s", err) } go sm.Run(context.Background()) return sm, err }