store: add sources to store
The api is initialized with a base repo but users may want to add their own custom repos. Based on lorax's implementation, the store now supports sources. The source object is similar to but not the same as the repos used by dnf. The store can now add, delete, and get info about sources.
This commit is contained in:
parent
24e3e5f8be
commit
29ebb9ff51
1 changed files with 63 additions and 0 deletions
|
|
@ -25,6 +25,7 @@ type Store struct {
|
||||||
Blueprints map[string]blueprint.Blueprint `json:"blueprints"`
|
Blueprints map[string]blueprint.Blueprint `json:"blueprints"`
|
||||||
Workspace map[string]blueprint.Blueprint `json:"workspace"`
|
Workspace map[string]blueprint.Blueprint `json:"workspace"`
|
||||||
Composes map[uuid.UUID]Compose `json:"composes"`
|
Composes map[uuid.UUID]Compose `json:"composes"`
|
||||||
|
Sources map[string]SourceConfig `json:"sources"`
|
||||||
|
|
||||||
mu sync.RWMutex // protects all fields
|
mu sync.RWMutex // protects all fields
|
||||||
pendingJobs chan Job
|
pendingJobs chan Job
|
||||||
|
|
@ -58,6 +59,15 @@ type Image struct {
|
||||||
Size int64
|
Size int64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SourceConfig struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Type string `json:"type"`
|
||||||
|
URL string `json:"url"`
|
||||||
|
CheckGPG bool `json:"check_gpg"`
|
||||||
|
CheckSSL bool `json:"check_ssl"`
|
||||||
|
System bool `json:"system"`
|
||||||
|
}
|
||||||
|
|
||||||
type NotFoundError struct {
|
type NotFoundError struct {
|
||||||
message string
|
message string
|
||||||
}
|
}
|
||||||
|
|
@ -126,6 +136,9 @@ func New(stateFile *string) *Store {
|
||||||
// TODO: push waiting/running composes to workers again
|
// TODO: push waiting/running composes to workers again
|
||||||
s.Composes = make(map[uuid.UUID]Compose)
|
s.Composes = make(map[uuid.UUID]Compose)
|
||||||
}
|
}
|
||||||
|
if s.Sources == nil {
|
||||||
|
s.Sources = make(map[string]SourceConfig)
|
||||||
|
}
|
||||||
s.pendingJobs = make(chan Job, 200)
|
s.pendingJobs = make(chan Job, 200)
|
||||||
|
|
||||||
return &s
|
return &s
|
||||||
|
|
@ -487,3 +500,53 @@ func (s *Store) GetImage(composeID uuid.UUID) (*Image, error) {
|
||||||
|
|
||||||
return nil, &NotFoundError{"compose could not be found"}
|
return nil, &NotFoundError{"compose could not be found"}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Store) PushSource(source SourceConfig) {
|
||||||
|
s.change(func() error {
|
||||||
|
s.Sources[source.Name] = source
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Store) DeleteSource(name string) {
|
||||||
|
s.change(func() error {
|
||||||
|
delete(s.Sources, name)
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Store) ListSources() []string {
|
||||||
|
s.mu.RLock()
|
||||||
|
defer s.mu.RUnlock()
|
||||||
|
names := make([]string, 0, len(s.Sources))
|
||||||
|
for name := range s.Sources {
|
||||||
|
names = append(names, name)
|
||||||
|
}
|
||||||
|
sort.Strings(names)
|
||||||
|
|
||||||
|
return names
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Store) GetSource(name string) *SourceConfig {
|
||||||
|
s.mu.RLock()
|
||||||
|
defer s.mu.RUnlock()
|
||||||
|
|
||||||
|
source, ok := s.Sources[name]
|
||||||
|
if !ok {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &source
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Store) GetAllSources() map[string]SourceConfig {
|
||||||
|
s.mu.RLock()
|
||||||
|
defer s.mu.RUnlock()
|
||||||
|
|
||||||
|
sources := make(map[string]SourceConfig)
|
||||||
|
|
||||||
|
for k, v := range s.Sources {
|
||||||
|
sources[k] = v
|
||||||
|
}
|
||||||
|
|
||||||
|
return sources
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue