mirror of
https://github.com/helm/helm.git
synced 2026-05-28 04:35:48 -04:00
Merge pull request #2400 from sushilkm/issues/2384
Fixes various issues related to plugin command
This commit is contained in:
commit
3e5642a40a
5 changed files with 67 additions and 10 deletions
|
|
@ -16,9 +16,11 @@ limitations under the License.
|
|||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"k8s.io/helm/pkg/helm/helmpath"
|
||||
"k8s.io/helm/pkg/plugin"
|
||||
|
|
@ -48,8 +50,8 @@ func newPluginRemoveCmd(out io.Writer) *cobra.Command {
|
|||
}
|
||||
|
||||
func (pcmd *pluginRemoveCmd) complete(args []string) error {
|
||||
if err := checkArgsLength(len(args), "plugin"); err != nil {
|
||||
return err
|
||||
if len(args) == 0 {
|
||||
return errors.New("please provide plugin name to remove")
|
||||
}
|
||||
pcmd.names = args
|
||||
pcmd.home = settings.Home
|
||||
|
|
@ -63,15 +65,21 @@ func (pcmd *pluginRemoveCmd) run() error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var errorPlugins []string
|
||||
for _, name := range pcmd.names {
|
||||
if found := findPlugin(plugins, name); found != nil {
|
||||
if err := removePlugin(found, pcmd.home); err != nil {
|
||||
return err
|
||||
errorPlugins = append(errorPlugins, fmt.Sprintf("Failed to remove plugin %s, got error (%v)", name, err))
|
||||
} else {
|
||||
fmt.Fprintf(pcmd.out, "Removed plugin: %s\n", name)
|
||||
}
|
||||
fmt.Fprintf(pcmd.out, "Removed plugin: %s\n", name)
|
||||
} else {
|
||||
errorPlugins = append(errorPlugins, fmt.Sprintf("Plugin: %s not found", name))
|
||||
}
|
||||
}
|
||||
if len(errorPlugins) > 0 {
|
||||
return fmt.Errorf(strings.Join(errorPlugins, "\n"))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40,6 +40,10 @@ type Installer interface {
|
|||
|
||||
// Install installs a plugin to $HELM_HOME.
|
||||
func Install(i Installer) error {
|
||||
if _, pathErr := os.Stat(i.Path()); !os.IsNotExist(pathErr) {
|
||||
return errors.New("plugin already exists")
|
||||
}
|
||||
|
||||
return i.Install()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ func TestLocalInstaller(t *testing.T) {
|
|||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer os.Remove(hh)
|
||||
defer os.RemoveAll(hh)
|
||||
|
||||
home := helmpath.Home(hh)
|
||||
if err := os.MkdirAll(home.Plugins(), 0755); err != nil {
|
||||
|
|
@ -43,7 +43,7 @@ func TestLocalInstaller(t *testing.T) {
|
|||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer os.Remove(tdir)
|
||||
defer os.RemoveAll(tdir)
|
||||
if err := ioutil.WriteFile(filepath.Join(tdir, "plugin.yaml"), []byte{}, 0644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ limitations under the License.
|
|||
package installer // import "k8s.io/helm/pkg/plugin/installer"
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"sort"
|
||||
|
||||
|
|
@ -112,7 +113,8 @@ func (i *VCSInstaller) solveVersion(repo vcs.Repo) (string, error) {
|
|||
return ver, nil
|
||||
}
|
||||
}
|
||||
return "", nil
|
||||
|
||||
return "", fmt.Errorf("requested version %q does not exist for plugin %q", i.Version, i.Repo.Remote())
|
||||
}
|
||||
|
||||
// setVersion attempts to checkout the version
|
||||
|
|
|
|||
|
|
@ -16,8 +16,10 @@ limitations under the License.
|
|||
package installer // import "k8s.io/helm/pkg/plugin/installer"
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"k8s.io/helm/pkg/helm/helmpath"
|
||||
|
|
@ -51,7 +53,7 @@ func TestVCSInstaller(t *testing.T) {
|
|||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer os.Remove(hh)
|
||||
defer os.RemoveAll(hh)
|
||||
|
||||
home := helmpath.Home(hh)
|
||||
if err := os.MkdirAll(home.Plugins(), 0755); err != nil {
|
||||
|
|
@ -59,8 +61,9 @@ func TestVCSInstaller(t *testing.T) {
|
|||
}
|
||||
|
||||
source := "https://github.com/adamreese/helm-env"
|
||||
testRepoPath, _ := filepath.Abs("../testdata/plugdir/echo")
|
||||
repo := &testRepo{
|
||||
local: "../testdata/plugdir/echo",
|
||||
local: testRepoPath,
|
||||
tags: []string{"0.1.0", "0.1.1"},
|
||||
}
|
||||
|
||||
|
|
@ -87,4 +90,44 @@ func TestVCSInstaller(t *testing.T) {
|
|||
if i.Path() != home.Path("plugins", "helm-env") {
|
||||
t.Errorf("expected path '$HELM_HOME/plugins/helm-env', got %q", i.Path())
|
||||
}
|
||||
|
||||
// Install again to test plugin exists error
|
||||
if err := Install(i); err == nil {
|
||||
t.Error("expected error for plugin exists, got none")
|
||||
} else if err.Error() != "plugin already exists" {
|
||||
t.Errorf("expected error for plugin exists, got (%v)", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestVCSInstallerNonExistentVersion(t *testing.T) {
|
||||
hh, err := ioutil.TempDir("", "helm-home-")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer os.RemoveAll(hh)
|
||||
|
||||
home := helmpath.Home(hh)
|
||||
if err := os.MkdirAll(home.Plugins(), 0755); err != nil {
|
||||
t.Fatalf("Could not create %s: %s", home.Plugins(), err)
|
||||
}
|
||||
|
||||
source := "https://github.com/adamreese/helm-env"
|
||||
version := "0.2.0"
|
||||
|
||||
i, err := NewForSource(source, version, home)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %s", err)
|
||||
}
|
||||
|
||||
// ensure a VCSInstaller was returned
|
||||
_, ok := i.(*VCSInstaller)
|
||||
if !ok {
|
||||
t.Error("expected a VCSInstaller")
|
||||
}
|
||||
|
||||
if err := Install(i); err == nil {
|
||||
t.Error("expected error for version does not exists, got none")
|
||||
} else if err.Error() != fmt.Sprintf("requested version %q does not exist for plugin %q", version, source) {
|
||||
t.Errorf("expected error for version does not exists, got (%v)", err)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue