func (c *RootCmd) ListClusters() ([]string, error) { if c.stateLocation == "" { return nil, fmt.Errorf("--state is required") } statePath, err := vfs.Context.BuildVfsPath(c.stateLocation) if err != nil { return nil, fmt.Errorf("error building state store path: %v", err) } paths, err := statePath.ReadTree() if err != nil { return nil, fmt.Errorf("error reading state store: %v", err) } var keys []string for _, p := range paths { relativePath, err := vfs.RelativePath(statePath, p) if err != nil { return nil, err } if !strings.HasSuffix(relativePath, "/config") { continue } key := strings.TrimSuffix(relativePath, "/config") keys = append(keys, key) } return keys, nil }
func DeleteConfig(stateStore fi.StateStore) error { paths, err := stateStore.VFSPath().ReadTree() if err != nil { return fmt.Errorf("error listing files in state store: %v", err) } for _, path := range paths { relativePath, err := vfs.RelativePath(stateStore.VFSPath(), path) if err != nil { return err } if relativePath == "config" || relativePath == "cluster.spec" { continue } if strings.HasPrefix(relativePath, "pki/") { continue } if strings.HasPrefix(relativePath, "secrets/") { continue } if strings.HasPrefix(relativePath, "instancegroup/") { continue } return fmt.Errorf("refusing to delete: unknown file found: %s", path) } for _, path := range paths { err = path.Remove() if err != nil { return fmt.Errorf("error deleting cluster file %s: %v", path, err) } } return nil }