// NewForConfig creates a new Clientset for the given config. func NewForConfig(c *rest.Config) (*Clientset, error) { configShallowCopy := *c if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) } var clientset Clientset var err error clientset.CoreClient, err = v1core.NewForConfig(&configShallowCopy) if err != nil { return nil, err } clientset.AuthorizationClient, err = v1beta1authorization.NewForConfig(&configShallowCopy) if err != nil { return nil, err } clientset.AutoscalingClient, err = v1autoscaling.NewForConfig(&configShallowCopy) if err != nil { return nil, err } clientset.BatchClient, err = v1batch.NewForConfig(&configShallowCopy) if err != nil { return nil, err } clientset.ExtensionsClient, err = v1beta1extensions.NewForConfig(&configShallowCopy) if err != nil { return nil, err } clientset.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy) if err != nil { glog.Errorf("failed to create the DiscoveryClient: %v", err) return nil, err } return &clientset, nil }
// NewRESTClient creates a new RESTClient. This client performs generic REST functions // such as Get, Put, Post, and Delete on specified paths. Codec controls encoding and // decoding of responses from the server. func NewRESTClient(baseURL *url.URL, versionedAPIPath string, config ContentConfig, maxQPS float32, maxBurst int, rateLimiter flowcontrol.RateLimiter, client *http.Client) (*RESTClient, error) { base := *baseURL if !strings.HasSuffix(base.Path, "/") { base.Path += "/" } base.RawQuery = "" base.Fragment = "" if config.GroupVersion == nil { config.GroupVersion = &unversioned.GroupVersion{} } if len(config.ContentType) == 0 { config.ContentType = "application/json" } serializers, err := createSerializers(config) if err != nil { return nil, err } var throttle flowcontrol.RateLimiter if maxQPS > 0 && rateLimiter == nil { throttle = flowcontrol.NewTokenBucketRateLimiter(maxQPS, maxBurst) } else if rateLimiter != nil { throttle = rateLimiter } return &RESTClient{ base: &base, versionedAPIPath: versionedAPIPath, contentConfig: config, serializers: *serializers, createBackoffMgr: readExpBackoffConfig, Throttle: throttle, Client: client, }, nil }
func main() { nginx.Start() cfg, err := rest.InClusterConfig() if err != nil { log.Fatalf("Failed to create config: %v", err) } kubeClient, err := kubernetes.NewForConfig(cfg) if err != nil { log.Fatalf("Failed to create client: %v.", err) } rateLimiter := flowcontrol.NewTokenBucketRateLimiter(0.1, 1) known := &model.RouterConfig{} // Main loop for { rateLimiter.Accept() routerConfig, err := model.Build(kubeClient) if err != nil { log.Printf("Error building model; not modifying certs or configuration: %v.", err) continue } if reflect.DeepEqual(routerConfig, known) { continue } log.Println("INFO: Router configuration has changed in k8s.") err = nginx.WriteCerts(routerConfig, "/opt/router/ssl") if err != nil { log.Printf("Failed to write certs; continuing with existing certs, dhparam, and configuration: %v", err) continue } err = nginx.WriteDHParam(routerConfig, "/opt/router/ssl") if err != nil { log.Printf("Failed to write dhparam; continuing with existing dhparam and configuration: %v", err) continue } err = nginx.WriteConfig(routerConfig, "/opt/router/conf/nginx.conf") if err != nil { log.Printf("Failed to write new nginx configuration; continuing with existing configuration: %v", err) continue } err = nginx.Reload() if err != nil { log.Printf("Failed to reload nginx; continuing with existing configuration: %v", err) continue } known = routerConfig } }