func (h *hawkularSink) init() error { h.reg = make(map[string]*metrics.MetricDefinition) h.models = make(map[string]*metrics.MetricDefinition) h.modifiers = make([]metrics.Modifier, 0) h.filters = make([]Filter, 0) h.batchSize = batchSizeDefault p := metrics.Parameters{ Tenant: "heapster", Url: h.uri.String(), Concurrency: concurrencyDefault, } opts := h.uri.Query() if v, found := opts["tenant"]; found { p.Tenant = v[0] } if v, found := opts["labelToTenant"]; found { h.labelTenant = v[0] } if v, found := opts[nodeId]; found { h.labelNodeId = v[0] } if v, found := opts["useServiceAccount"]; found { if b, _ := strconv.ParseBool(v[0]); b { // If a readable service account token exists, then use it if contents, err := ioutil.ReadFile(defaultServiceAccountFile); err == nil { p.Token = string(contents) } } } // Authentication / Authorization parameters tC := &tls.Config{} if v, found := opts["auth"]; found { if _, f := opts["caCert"]; f { return fmt.Errorf("Both auth and caCert files provided, combination is not supported") } if len(v[0]) > 0 { // Authfile kubeConfig, err := kubeClientCmd.NewNonInteractiveDeferredLoadingClientConfig(&kubeClientCmd.ClientConfigLoadingRules{ ExplicitPath: v[0]}, &kubeClientCmd.ConfigOverrides{}).ClientConfig() if err != nil { return err } tC, err = kube_client.TLSConfigFor(kubeConfig) if err != nil { return err } } } if u, found := opts["user"]; found { if _, wrong := opts["useServiceAccount"]; wrong { return fmt.Errorf("If user and password are used, serviceAccount cannot be used") } if p, f := opts["pass"]; f { h.modifiers = append(h.modifiers, func(req *http.Request) error { req.SetBasicAuth(u[0], p[0]) return nil }) } } if v, found := opts["caCert"]; found { caCert, err := ioutil.ReadFile(v[0]) if err != nil { return err } caCertPool := x509.NewCertPool() caCertPool.AppendCertsFromPEM(caCert) tC.RootCAs = caCertPool } if v, found := opts["insecure"]; found { _, f := opts["caCert"] _, f2 := opts["auth"] if f || f2 { return fmt.Errorf("Insecure can't be defined with auth or caCert") } insecure, err := strconv.ParseBool(v[0]) if err != nil { return err } tC.InsecureSkipVerify = insecure } p.TLSConfig = tC // Filters if v, found := opts["filter"]; found { filters, err := parseFilters(v) if err != nil { return err } h.filters = filters } // Concurrency limitations if v, found := opts["concurrencyLimit"]; found { cs, err := strconv.Atoi(v[0]) if err != nil || cs < 0 { return fmt.Errorf("Supplied concurrency value of %s is invalid", v[0]) } p.Concurrency = cs } if v, found := opts["batchSize"]; found { bs, err := strconv.Atoi(v[0]) if err != nil || bs < 0 { return fmt.Errorf("Supplied batchSize value of %s is invalid", v[0]) } h.batchSize = bs } c, err := metrics.NewHawkularClient(p) if err != nil { return err } h.client = c glog.Infof("Initialised Hawkular Sink with parameters %v", p) return nil }