func (l *KubeListener) Initialize(client *common.RestClient) error { l.restClient = client // TODO, find a better place to initialize // the translator. Stas. PTranslator.Init(l.restClient, l.segmentLabelName, l.tenantLabelName) tc := PTranslator.GetClient() if tc == nil { log.Critical("Failed to initialize rest client for policy translator.") os.Exit(255) } l.lastEventPerNamespace = make(map[string]uint64) log.Infof("%s: Starting server", l.Name()) nsURL, err := common.CleanURL(fmt.Sprintf("%s/%s/?%s", l.kubeURL, l.namespaceNotificationPath, HttpGetParamWatch)) if err != nil { return err } log.Infof("Starting to listen on %s", nsURL) done := make(chan struct{}) eventc, err := l.nsWatch(done, nsURL) if err != nil { log.Critical("Namespace watcher failed to start", err) os.Exit(255) } // events := l.conductor(nsEvents, done) l.process(eventc, done) ProduceNewPolicyEvents(eventc, done, l) log.Info("All routines started") return nil }
// updateCache contacts romana Tenant service, lists // all resources and loads them into memory. func (t *Translator) updateCache() error { log.Info("In updateCache") tenantURL, err := t.restClient.GetServiceUrl("tenant") if err != nil { return TranslatorError{ErrorCacheUpdate, err} } tenants := []tenant.Tenant{} err = t.restClient.Get(tenantURL+"/tenants", &tenants) if err != nil { log.Errorf("updateCache(): Error getting tenant information: %s", err) return TranslatorError{ErrorCacheUpdate, err} } if t.restClient == nil { log.Critical("REST client is nil") os.Exit(255) } // tenants := []tenant.Tenant{} // _ = t.restClient.Find(&tenants, common.FindAll) t.cacheMu.Lock() defer func() { log.Infof("Exiting updateCache with %d tenants", len(t.tenantsCache)) t.cacheMu.Unlock() }() t.tenantsCache = nil for _, ten := range tenants { segments := []tenant.Segment{} fullUrl := fmt.Sprintf("%s/tenants/%d/segments", tenantURL, ten.ID) err = t.restClient.Get(fullUrl, &segments) // ignore 404 error here which means no segments // considered to be a zero segments rather then // an error. if err != nil && !checkHttp404(err) { log.Errorf("updateCache(): Error getting segment information for tenant %d: %s", ten.ID, err) return TranslatorError{ErrorCacheUpdate, err} } t.tenantsCache = append(t.tenantsCache, TenantCacheEntry{ten, segments}) } return nil }