Skip to content

Commit

Permalink
Add -l/--light option for profile list command.
Browse files Browse the repository at this point in the history
If option is true, Doens't try to get profiles from container and read
current status.
  • Loading branch information
daehyeok committed Feb 6, 2021
1 parent 3f4ff5b commit 23ca443
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 2 deletions.
23 changes: 21 additions & 2 deletions cmd/minikube/cmd/config/profile_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import (
)

var output string
var isLight bool

var profileListCmd = &cobra.Command{
Use: "list",
Expand All @@ -58,8 +59,18 @@ var profileListCmd = &cobra.Command{
},
}

func listProfiles() (validProfiles, invalidProfiles []*config.Profile, err error) {
if isLight {
validProfiles, err = config.ListValidProfiles()
} else {
validProfiles, invalidProfiles, err = config.ListProfiles()
}

return validProfiles, invalidProfiles, err
}

func printProfilesTable() {
validProfiles, invalidProfiles, err := config.ListProfiles()
validProfiles, invalidProfiles, err := listProfiles()

if err != nil {
klog.Warningf("error loading profiles: %v", err)
Expand All @@ -75,6 +86,13 @@ func printProfilesTable() {
}

func updateProfilesStatus(profiles []*config.Profile) {
if isLight {
for _, p := range profiles {
p.Status = "Skipped"
}
return
}

api, err := machine.NewAPIClient()
if err != nil {
klog.Errorf("failed to get machine api client %v", err)
Expand Down Expand Up @@ -168,7 +186,7 @@ func warnInvalidProfiles(invalidProfiles []*config.Profile) {
}

func printProfilesJSON() {
validProfiles, invalidProfiles, err := config.ListProfiles()
validProfiles, invalidProfiles, err := listProfiles()

updateProfilesStatus(validProfiles)

Expand All @@ -195,5 +213,6 @@ func profilesOrDefault(profiles []*config.Profile) []*config.Profile {

func init() {
profileListCmd.Flags().StringVarP(&output, "output", "o", "table", "The output format. One of 'json', 'table'")
profileListCmd.Flags().BoolVarP(&isLight, "light", "l", false, "If true, only display vaild profiles and do not check status.")
ProfileCmd.AddCommand(profileListCmd)
}
1 change: 1 addition & 0 deletions site/content/en/docs/commands/profile.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ minikube profile list [flags]
### Options

```
-l, --light If true, only display vaild profiles and do not check status.
-o, --output string The output format. One of 'json', 'table' (default "table")
```

Expand Down
52 changes: 52 additions & 0 deletions test/integration/functional_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -813,6 +813,58 @@ func validateProfileCmd(ctx context.Context, t *testing.T, profile string) {
}

})

t.Run("profile_list_light", func(t *testing.T) {
// List profiles
rr, err := Run(t, exec.CommandContext(ctx, Target(), "profile", "list", "-l"))
if err != nil {
t.Errorf("failed to list profiles: args %q : %v", rr.Command(), err)
}

// Table output
listLines := strings.Split(strings.TrimSpace(rr.Stdout.String()), "\n")
profileExists := false
for i := 3; i < (len(listLines) - 1); i++ {
profileLine := listLines[i]
if strings.Contains(profileLine, profile) && strings.Contains(profileLine, "Skipped") {
profileExists = true
break
}
}
if !profileExists {
t.Errorf("expected 'profile list' output to include %q with 'Skipped' status but got *%q*. args: %q", profile, rr.Stdout.String(), rr.Command())
}
})

t.Run("profile_list_light_json", func(t *testing.T) {
// Json output
rr, err := Run(t, exec.CommandContext(ctx, Target(), "profile", "list", "--light", "--output", "json"))
if err != nil {
t.Errorf("failed to list profiles with json format. args %q: %v", rr.Command(), err)
}
var jsonObject map[string][]config.Profile
err = json.Unmarshal(rr.Stdout.Bytes(), &jsonObject)
if err != nil {
t.Errorf("failed to decode json from profile list: args %q: %v", rr.Command(), err)
}
validProfiles := jsonObject["valid"]
profileExists := false
for _, profileObject := range validProfiles {
if profileObject.Name != profile {
continue
}

profileExists = true
if profileObject.Status != "Skipped" {
t.Errorf("expected the json of 'profile list --light' to include 'Skipped' status for %q but got *%q*. args: %q", profile, rr.Stdout.String(), rr.Command())
}
break
}
if !profileExists {
t.Errorf("expected the json of 'profile list --light' to include %q but got *%q*. args: %q", profile, rr.Stdout.String(), rr.Command())
}

})
}

// validateServiceCmd asserts basic "service" command functionality
Expand Down

0 comments on commit 23ca443

Please sign in to comment.