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
}