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  }