// validateFullConfig validates a fully-constructed storage config, // combining the user-specified config and any internally specified // config. func (p *rootfsProvider) validateFullConfig(cfg *storage.Config) error { if err := p.ValidateConfig(cfg); err != nil { return err } storageDir, ok := cfg.ValueString(storage.ConfigStorageDir) if !ok || storageDir == "" { return errors.New("storage directory not specified") } return nil }
// FilesystemSource is defined on the Provider interface. func (p *rootfsProvider) FilesystemSource(environConfig *config.Config, sourceConfig *storage.Config) (storage.FilesystemSource, error) { if err := p.validateFullConfig(sourceConfig); err != nil { return nil, err } // storageDir is validated by validateFullConfig. storageDir, _ := sourceConfig.ValueString(storage.ConfigStorageDir) return &rootfsFilesystemSource{ &osDirFuncs{p.run}, p.run, storageDir, }, nil }
// VolumeSource is defined on the Provider interface. func (lp *loopProvider) VolumeSource(sourceConfig *storage.Config) (storage.VolumeSource, error) { if err := lp.validateFullConfig(sourceConfig); err != nil { return nil, err } // storageDir is validated by validateFullConfig. storageDir, _ := sourceConfig.ValueString(storage.ConfigStorageDir) return &loopVolumeSource{ &osDirFuncs{lp.run}, lp.run, storageDir, }, nil }