// readAllStateFiles loads and returns every stateFile persisted inside // the supplied dirPath. If dirPath does not exist, no error is returned. func readAllStateFiles(dirPath string) (files map[names.StorageTag]*stateFile, err error) { defer errors.DeferredAnnotatef(&err, "cannot load storage state from %q", dirPath) if _, err := os.Stat(dirPath); os.IsNotExist(err) { return nil, nil } else if err != nil { return nil, err } fis, err := ioutil.ReadDir(dirPath) if err != nil { return nil, err } files = make(map[names.StorageTag]*stateFile) for _, fi := range fis { if fi.IsDir() { continue } storageId := strings.Replace(fi.Name(), "-", "/", -1) if !names.IsValidStorage(storageId) { continue } tag := names.NewStorageTag(storageId) f, err := readStateFile(dirPath, tag) if err != nil { return nil, err } files[tag] = f } return files, nil }
func (c *ShowCommand) getStorageTags() ([]names.StorageTag, error) { tags := make([]names.StorageTag, len(c.ids)) for i, id := range c.ids { if !names.IsValidStorage(id) { return nil, errors.Errorf("invalid storage id %v", id) } tags[i] = names.NewStorageTag(id) } return tags, nil }
// Set interprets value as a storage id, if possible, and returns an error // if it is not known to the system. The parsed storage id will be written // to v.result. func (v *storageIdValue) Set(value string) error { if !names.IsValidStorage(value) { return errors.Errorf("invalid storage ID %q", value) } tag := names.NewStorageTag(value) if _, found := v.ctx.Storage(tag); !found { return fmt.Errorf("unknown storage ID") } *v.result = tag return nil }
// Set interprets value as a storage id, if possible, and returns an error // if it is not known to the system. The parsed storage id will be written // to v.result. func (v *storageIdValue) Set(value string) error { if !names.IsValidStorage(value) { return errors.Errorf("invalid storage ID %q", value) } tag := names.NewStorageTag(value) if _, err := v.ctx.Storage(tag); err != nil { return errors.Trace(err) } *v.result = tag return nil }
// Validate returns an error if the info is not valid. func (hi Info) Validate() error { switch hi.Kind { case hooks.RelationJoined, hooks.RelationChanged, hooks.RelationDeparted: if hi.RemoteUnit == "" { return fmt.Errorf("%q hook requires a remote unit", hi.Kind) } fallthrough case hooks.Install, hooks.Start, hooks.ConfigChanged, hooks.UpgradeCharm, hooks.Stop, hooks.RelationBroken, hooks.CollectMetrics, hooks.MeterStatusChanged, hooks.UpdateStatus: return nil case hooks.Action: return fmt.Errorf("hooks.Kind Action is deprecated") case hooks.StorageAttached, hooks.StorageDetaching: if !names.IsValidStorage(hi.StorageId) { return fmt.Errorf("invalid storage ID %q", hi.StorageId) } return nil // TODO(fwereade): define these in charm/hooks... case LeaderElected, LeaderDeposed, LeaderSettingsChanged: return nil } return fmt.Errorf("unknown hook kind %q", hi.Kind) }
func assertStorageIdInvalid(c *gc.C, name string) { c.Assert(names.IsValidStorage(name), gc.Equals, false) testStorageTag := func() { names.NewStorageTag(name) } expect := fmt.Sprintf("%q is not a valid storage instance ID", name) c.Assert(testStorageTag, gc.PanicMatches, expect) }
func assertStorageIdValid(c *gc.C, name string) { c.Assert(names.IsValidStorage(name), gc.Equals, true) names.NewStorageTag(name) }