func (self *hawkularSink) init() error { self.reg = make(map[string]*metrics.MetricDefinition) self.models = make(map[string]*metrics.MetricDefinition) self.modifiers = make([]metrics.Modifier, 0) self.filters = make([]Filter, 0) p := metrics.Parameters{ Tenant: "heapster", Url: self.uri.String(), } opts := self.uri.Query() if v, found := opts["tenant"]; found { p.Tenant = v[0] } if v, found := opts["labelToTenant"]; found { self.labelTenant = 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 { self.modifiers = append(self.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 } self.filters = filters } c, err := metrics.NewHawkularClient(p) if err != nil { return err } self.client = c glog.Infof("Initialised Hawkular Sink with parameters %v", p) return nil }
// init initializes the Hawkular dataSource. Almost equal to the Heapster initialization func (hs *hawkularSource) init() error { hs.modifiers = make([]metrics.Modifier, 0) p := metrics.Parameters{ Tenant: "heapster", // This data is stored by the heapster - for no-namespace hits Url: hs.uri.String(), } opts := hs.uri.Query() if v, found := opts["tenant"]; found { p.Tenant = v[0] } if v, found := opts["useServiceAccount"]; found { if b, _ := strconv.ParseBool(v[0]); b { accountFile := defaultServiceAccountFile if file, f := opts["serviceAccountFile"]; f { accountFile = file[0] } // If a readable service account token exists, then use it if contents, err := ioutil.ReadFile(accountFile); err == nil { p.Token = string(contents) } else { glog.Errorf("Could not read contents of %s, no token authentication is used\n", defaultServiceAccountFile) } } } // 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 := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(&clientcmd.ClientConfigLoadingRules{ ExplicitPath: v[0]}, &clientcmd.ConfigOverrides{}).ClientConfig() if err != nil { return err } tC, err = restclient.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 { hs.modifiers = append(hs.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 { insecure, err := strconv.ParseBool(v[0]) if err != nil { return err } tC.InsecureSkipVerify = insecure } p.TLSConfig = tC c, err := metrics.NewHawkularClient(p) if err != nil { return err } hs.client = c glog.Infof("Initialised Hawkular Source with parameters %v", p) return nil }