mirror of https://github.com/docker/docs.git
73 lines
1.7 KiB
Go
73 lines
1.7 KiB
Go
package store
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path"
|
|
"path/filepath"
|
|
)
|
|
|
|
// NewFilesystemStore creates a new store in a directory tree
|
|
func NewFilesystemStore(baseDir, metaSubDir, metaExtension, targetsSubDir string) (*FilesystemStore, error) {
|
|
metaDir := path.Join(baseDir, metaSubDir)
|
|
targetsDir := path.Join(baseDir, targetsSubDir)
|
|
|
|
// Make sure we can create the necessary dirs and they are writable
|
|
err := os.MkdirAll(metaDir, 0700)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
err = os.MkdirAll(targetsDir, 0700)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &FilesystemStore{
|
|
baseDir: baseDir,
|
|
metaDir: metaDir,
|
|
metaExtension: metaExtension,
|
|
targetsDir: targetsDir,
|
|
}, nil
|
|
}
|
|
|
|
// FilesystemStore is a store in a locally accessible directory
|
|
type FilesystemStore struct {
|
|
baseDir string
|
|
metaDir string
|
|
metaExtension string
|
|
targetsDir string
|
|
}
|
|
|
|
// GetMeta returns the meta for the given name (a role)
|
|
func (f *FilesystemStore) GetMeta(name string, size int64) ([]byte, error) {
|
|
fileName := fmt.Sprintf("%s.%s", name, f.metaExtension)
|
|
path := filepath.Join(f.metaDir, fileName)
|
|
meta, err := ioutil.ReadFile(path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return meta, nil
|
|
}
|
|
|
|
// SetMultiMeta sets the metadata for multiple roles in one operation
|
|
func (f *FilesystemStore) SetMultiMeta(metas map[string][]byte) error {
|
|
for role, blob := range metas {
|
|
err := f.SetMeta(role, blob)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// SetMeta sets the meta for a single role
|
|
func (f *FilesystemStore) SetMeta(name string, meta []byte) error {
|
|
fileName := fmt.Sprintf("%s.%s", name, f.metaExtension)
|
|
path := filepath.Join(f.metaDir, fileName)
|
|
if err := ioutil.WriteFile(path, meta, 0600); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|