func NewKindCache()

in plugins/client/grpc/resolvers/kubernetes_kinds.go [54:103]


func NewKindCache(ctx context.Context, c *KubernetesConfig, cc resolver.ClientConn) (*KindCache, error) {
	// build config
	conf := &kubernetes.SDConfig{}
	if c.APIServer != "" {
		parsed, err := url.Parse(c.APIServer)
		if err != nil {
			return nil, err
		}
		conf.APIServer = config.URL{URL: parsed}
		httpConfig, err := c.HTTPClientConfig.convertHTTPConfig()
		if err != nil {
			return nil, err
		}
		conf.HTTPClientConfig = *httpConfig
	}

	conf.Role = kubernetes.Role(c.Kind)
	conf.NamespaceDiscovery = kubernetes.NamespaceDiscovery{
		Names: c.Namespaces,
	}
	conf.Selectors = []kubernetes.SelectorConfig{
		{
			Role:  kubernetes.Role(c.Kind),
			Label: c.Selector.Label,
			Field: c.Selector.Field,
		},
	}

	// build discovery
	discoverer, err := kubernetes.New(&logAdapt{}, conf)
	if err != nil {
		return nil, err
	}

	// build analyzer
	var analyzer KindAddressAnalyzer
	for _, a := range analyzers {
		if a.KindType() == c.Kind {
			analyzer = a
		}
	}
	if analyzer == nil {
		return nil, fmt.Errorf("could not kind analyzer: %s", c.Kind)
	}

	// build and start watch
	kind := &KindCache{config: c, cc: cc, analyzer: analyzer}
	kind.watchAndUpdate(ctx, discoverer)
	return kind, nil
}