github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/dom/images/api.go (about) 1 package images 2 3 import ( 4 "sync" 5 6 "github.com/Cloud-Foundations/Dominator/lib/image" 7 "github.com/Cloud-Foundations/Dominator/lib/log" 8 "github.com/Cloud-Foundations/Dominator/lib/stringutil" 9 ) 10 11 type Manager struct { 12 imageServerAddress string 13 logger log.Logger 14 loggedDialFailure bool 15 sync.RWMutex 16 deduper *stringutil.StringDeduplicator 17 // Protected by lock. 18 imageInterestChannel chan<- map[string]struct{} 19 imageRequestChannel chan<- string 20 imageExpireChannel chan<- string 21 imagesByName map[string]*image.Image 22 missingImages map[string]error 23 } 24 25 func New(imageServerAddress string, logger log.Logger) *Manager { 26 return newManager(imageServerAddress, logger) 27 } 28 29 func (m *Manager) Get(name string, wait bool) (*image.Image, error) { 30 if name == "" { 31 return nil, nil 32 } 33 if wait { 34 return m.getWait(name) 35 } 36 return m.getNoWait(name) 37 } 38 39 func (m *Manager) GetNoError(name string) *image.Image { 40 if name == "" { 41 return nil 42 } 43 img, _ := m.getNoWait(name) 44 return img 45 } 46 47 func (m *Manager) SetImageInterestList(images map[string]struct{}, wait bool) { 48 m.setImageInterestList(images, wait) 49 } 50 51 func (m *Manager) String() string { 52 return m.imageServerAddress 53 }