Skip to content

Commit

Permalink
get service and revision based on name parameter
Browse files Browse the repository at this point in the history
  • Loading branch information
savitaashture committed Jun 14, 2019
1 parent 5d26faa commit d9bcedb
Show file tree
Hide file tree
Showing 20 changed files with 4,148 additions and 28 deletions.
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ require (
go.uber.org/atomic v1.4.0 // indirect
go.uber.org/multierr v1.1.0 // indirect
go.uber.org/zap v1.10.0 // indirect
github.com/stretchr/testify v1.3.0
golang.org/x/net v0.0.0-20190514140710-3ec191127204 // indirect
golang.org/x/oauth2 v0.0.0-20190517181255-950ef44c6e07 // indirect
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 // indirect
Expand Down
4 changes: 2 additions & 2 deletions hack/generate-docs.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ func main() {
if len(os.Args) > 1 {
dir = os.Args[1]
}
err := doc.GenMarkdownTree(rootCmd, dir + "/docs/cmd/")
err := doc.GenMarkdownTree(rootCmd, dir+"/docs/cmd/")
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}
}
47 changes: 45 additions & 2 deletions pkg/kn/commands/revision/revision_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,11 @@ package revision

import (
"fmt"
"github.com/knative/serving/pkg/apis/serving/v1alpha1"

"github.com/knative/client/pkg/kn/commands"

serving "github.com/knative/serving/pkg/client/clientset/versioned/typed/serving/v1alpha1"
"github.com/spf13/cobra"
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
Expand All @@ -28,8 +31,20 @@ func NewRevisionListCommand(p *commands.KnParams) *cobra.Command {
revisionListFlags := NewRevisionListFlags()

revisionListCommand := &cobra.Command{
Use: "list",
Use: "list NAME",
Short: "List available revisions.",
Example: `
# List a all revisions.
kn revision list
# List a all revisions in JSON output format.
kn revision list -o json
# List a single revisions with specified NAME.
kn revision list web
# List a single revisions in YAML output format.
kn revision list web -o yaml`,
RunE: func(cmd *cobra.Command, args []string) error {
client, err := p.ServingFactory()
if err != nil {
Expand All @@ -39,22 +54,27 @@ func NewRevisionListCommand(p *commands.KnParams) *cobra.Command {
if err != nil {
return err
}
revision, err := client.Revisions(namespace).List(v1.ListOptions{})

revision, err := getRevisionInfo(args, namespace, client)
if err != nil {
return err
}

if len(revision.Items) == 0 {
fmt.Fprintf(cmd.OutOrStdout(), "No resources found.\n")
return nil
}

revision.GetObjectKind().SetGroupVersionKind(schema.GroupVersionKind{
Group: "knative.dev",
Version: "v1alpha1",
Kind: "revision"})

printer, err := revisionListFlags.ToPrinter()
if err != nil {
return err
}

err = printer.PrintObj(revision, cmd.OutOrStdout())
if err != nil {
return err
Expand All @@ -66,3 +86,26 @@ func NewRevisionListCommand(p *commands.KnParams) *cobra.Command {
revisionListFlags.AddFlags(revisionListCommand)
return revisionListCommand
}

func getRevisionInfo(args []string, namespace string, client serving.ServingV1alpha1Interface) (*v1alpha1.RevisionList, error) {

switch len(args) {
case 0:
revision, err := client.Revisions(namespace).List(v1.ListOptions{})
if err != nil {
return nil, err
}

return revision, nil

case 1:
revision, err := client.Revisions(namespace).List(v1.ListOptions{FieldSelector: "metadata.name=" + args[0]})
if err != nil {
return nil, err
}

return revision, nil
default:
return nil, fmt.Errorf("'revision list' only accepts no arguments or a single revision name, not %d arguments as given", len(args))
}
}
82 changes: 72 additions & 10 deletions pkg/kn/commands/revision/revision_list_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@ import (
"testing"

"github.com/knative/client/pkg/kn/commands"
serving "github.com/knative/serving/pkg/apis/serving"
v1alpha1 "github.com/knative/serving/pkg/apis/serving/v1alpha1"

"github.com/knative/serving/pkg/apis/serving"
"github.com/knative/serving/pkg/apis/serving/v1alpha1"
"github.com/stretchr/testify/assert"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
client_testing "k8s.io/client-go/testing"
Expand Down Expand Up @@ -58,6 +60,19 @@ func TestRevisionListEmpty(t *testing.T) {
}
}

func TestRevisionGetEmpty(t *testing.T) {
action, _, err := fakeRevisionList([]string{"revision", "list", "name"}, &v1alpha1.RevisionList{})
if err != nil {
t.Error(err)
return
}
if action == nil {
t.Errorf("No action")
} else if !action.Matches("list", "revisions") {
t.Errorf("Bad action %v", action)
}
}

func TestRevisionListDefaultOutput(t *testing.T) {
revision1 := createMockRevisionWithParams("foo-abcd", "foo")
revision2 := createMockRevisionWithParams("bar-wxyz", "bar")
Expand All @@ -71,17 +86,64 @@ func TestRevisionListDefaultOutput(t *testing.T) {
} else if !action.Matches("list", "revisions") {
t.Errorf("Bad action %v", action)
}
testContains(t, output[0], []string{"SERVICE", "NAME", "AGE", "CONDITIONS", "READY", "REASON"}, "column header")
testContains(t, output[1], []string{"foo", "foo-abcd"}, "value")
testContains(t, output[2], []string{"bar", "bar-wxyz"}, "value")
commands.TestContains(t, output[0], []string{"SERVICE", "NAME", "AGE", "CONDITIONS", "READY", "REASON"}, "column header")
commands.TestContains(t, output[1], []string{"foo", "foo-abcd"}, "value")
commands.TestContains(t, output[2], []string{"bar", "bar-wxyz"}, "value")
}

func TestRevisionGetOneOutput(t *testing.T) {
revision := createMockRevisionWithParams("foo-abcd", "foo")
RevisionList := &v1alpha1.RevisionList{Items: []v1alpha1.Revision{*revision}}
action, output, err := fakeRevisionList([]string{"revision", "list", "foo-abcd"}, RevisionList)
if err != nil {
t.Fatal(err)
}
if action == nil {
t.Errorf("No action")
} else if !action.Matches("list", "revisions") {
t.Errorf("Bad action %v", action)
}
commands.TestContains(t, output[0], []string{"SERVICE", "NAME", "AGE", "CONDITIONS", "READY", "REASON"}, "column header")
commands.TestContains(t, output[1], []string{"foo", "foo-abcd"}, "value")
}

func testContains(t *testing.T, output string, sub []string, element string) {
for _, each := range sub {
if !strings.Contains(output, each) {
t.Errorf("Missing %s: %s", element, each)
}
func TestRevisionGetOutputWithTwoRevName(t *testing.T) {
t.Log("create a first revision name foo")
revision := createMockRevisionWithParams("foo-abcd", "foo")
RevisionList := &v1alpha1.RevisionList{Items: []v1alpha1.Revision{*revision}}
action, output, err := fakeRevisionList([]string{"revision", "list", "foo-abcd"}, RevisionList)
if err != nil {
t.Fatal(err)
}
if action == nil {
t.Errorf("No action")
} else if !action.Matches("list", "revisions") {
t.Errorf("Bad action %v", action)
}
commands.TestContains(t, output[0], []string{"SERVICE", "NAME", "AGE", "CONDITIONS", "READY", "REASON"}, "column header")
commands.TestContains(t, output[1], []string{"foo", "foo-abcd"}, "value")

t.Log("create a second revision name bar")
revision = createMockRevisionWithParams("bar-abcd", "bar")
RevisionList = &v1alpha1.RevisionList{Items: []v1alpha1.Revision{*revision}}
action, output, err = fakeRevisionList([]string{"revision", "list", "bar-abcd"}, RevisionList)
if err != nil {
t.Fatal(err)
}
if action == nil {
t.Errorf("No action")
} else if !action.Matches("list", "revisions") {
t.Errorf("Bad action %v", action)
}
commands.TestContains(t, output[0], []string{"SERVICE", "NAME", "AGE", "CONDITIONS", "READY", "REASON"}, "column header")
commands.TestContains(t, output[1], []string{"bar", "bar-abcd"}, "value")

t.Log("verify by passing two revision name to get command")
_, output, err = fakeRevisionList([]string{"revision", "list", "foo-abcd", "bar-abcd"}, RevisionList)
assert.NotNil(t, err)
assert.Equal(t, "'revision list' only accepts no arguments or a single revision name, not 2 arguments as given", err.Error())
assert.Empty(t, output)

}

func createMockRevisionWithParams(name, svcName string) *v1alpha1.Revision {
Expand Down
44 changes: 42 additions & 2 deletions pkg/kn/commands/service/service_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,11 @@ package service

import (
"fmt"
"github.com/knative/serving/pkg/apis/serving/v1alpha1"

"github.com/knative/client/pkg/kn/commands"

serving "github.com/knative/serving/pkg/client/clientset/versioned/typed/serving/v1alpha1"
"github.com/spf13/cobra"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
Expand All @@ -28,8 +31,20 @@ func NewServiceListCommand(p *commands.KnParams) *cobra.Command {
serviceListFlags := NewServiceListFlags()

serviceListCommand := &cobra.Command{
Use: "list",
Use: "list NAME",
Short: "List available services.",
Example: `
# List a all services.
kn service list
# List a all services in JSON output format.
kn service list -o json
# List a single service with specified NAME.
kn service list web
# List a single service in YAML output format.
kn service list web -o yaml`,
RunE: func(cmd *cobra.Command, args []string) error {
client, err := p.ServingFactory()
if err != nil {
Expand All @@ -39,14 +54,17 @@ func NewServiceListCommand(p *commands.KnParams) *cobra.Command {
if err != nil {
return err
}
service, err := client.Services(namespace).List(v1.ListOptions{})

service, err := getServiceInfo(args, namespace, client)
if err != nil {
return err
}

if len(service.Items) == 0 {
fmt.Fprintf(cmd.OutOrStdout(), "No resources found.\n")
return nil
}

service.GetObjectKind().SetGroupVersionKind(schema.GroupVersionKind{
Group: "knative.dev",
Version: "v1alpha1",
Expand All @@ -68,3 +86,25 @@ func NewServiceListCommand(p *commands.KnParams) *cobra.Command {
serviceListFlags.AddFlags(serviceListCommand)
return serviceListCommand
}

func getServiceInfo(args []string, namespace string, client serving.ServingV1alpha1Interface) (*v1alpha1.ServiceList, error) {

switch len(args) {
case 0:
service, err := client.Services(namespace).List(v1.ListOptions{})
if err != nil {
return nil, err
}

return service, nil
case 1:
service, err := client.Services(namespace).List(v1.ListOptions{FieldSelector: "metadata.name=" + args[0]})
if err != nil {
return nil, err
}

return service, nil
default:
return nil, fmt.Errorf("'service list' only accepts no arguments or a single service name, not %d arguments as given", len(args))
}
}
Loading

0 comments on commit d9bcedb

Please sign in to comment.