// Read reads a State from the file. If the file does not exist it returns // ErrNoStateFile. func (f *StateFile) Read() (*State, error) { var st State if err := utils.ReadYaml(f.path, &st); err != nil { if os.IsNotExist(err) { return nil, ErrNoStateFile } } if err := st.validate(); err != nil { return nil, fmt.Errorf("cannot read charm state at %q: %v", f.path, err) } return &st, nil }
// loadManifest loads, from dataPath, the manifest for the charm identified by the // identity file at the supplied path within the charm directory. func (d *manifestDeployer) loadManifest(urlFilePath string) (*charm.URL, set.Strings, error) { url, err := ReadCharmURL(d.CharmPath(urlFilePath)) if err != nil { return nil, set.NewStrings(), err } name := charm.Quote(url.String()) path := filepath.Join(d.DataPath(manifestsDataPath), name) manifest := []string{} err = utils.ReadYaml(path, &manifest) if os.IsNotExist(err) { logger.Warningf("manifest not found at %q: files from charm %q may be left unremoved", path, url) err = nil } return url, set.NewStrings(manifest...), err }