// Create is defined on PoolManager interface. func (pm *poolManager) Create(name string, providerType storage.ProviderType, attrs map[string]interface{}) (*storage.Config, error) { if name == "" { return nil, MissingNameError } if providerType == "" { return nil, MissingTypeError } cfg, err := storage.NewConfig(name, providerType, attrs) if err != nil { return nil, errors.Trace(err) } p, err := registry.StorageProvider(providerType) if err != nil { return nil, errors.Trace(err) } if err := provider.ValidateConfig(p, cfg); err != nil { return nil, errors.Annotate(err, "validating storage provider config") } poolAttrs := cfg.Attrs() poolAttrs[Name] = name poolAttrs[Type] = string(providerType) if err := pm.settings.CreateSettings(globalKey(name), poolAttrs); err != nil { return nil, errors.Annotatef(err, "creating pool %q", name) } return cfg, nil }
func configFromSettings(settings map[string]interface{}) (*storage.Config, error) { providerType := storage.ProviderType(settings[Type].(string)) name := settings[Name].(string) // Ensure returned attributes are stripped of name and type, // as these are not user-specified attributes. delete(settings, Name) delete(settings, Type) cfg, err := storage.NewConfig(name, providerType, settings) if err != nil { return nil, errors.Trace(err) } p, err := registry.StorageProvider(providerType) if err != nil { return nil, errors.Trace(err) } if err := provider.ValidateConfig(p, cfg); err != nil { return nil, errors.Trace(err) } return cfg, nil }