mirror of https://github.com/knative/client.git
Add creating ApiServerSource event source to Client (#415)
This commit is contained in:
parent
8e010d0cbd
commit
003dba3616
|
|
@ -27,5 +27,6 @@ Manage your Knative building blocks:
|
||||||
* [kn revision](kn_revision.md) - Revision command group
|
* [kn revision](kn_revision.md) - Revision command group
|
||||||
* [kn route](kn_route.md) - Route command group
|
* [kn route](kn_route.md) - Route command group
|
||||||
* [kn service](kn_service.md) - Service command group
|
* [kn service](kn_service.md) - Service command group
|
||||||
|
* [kn source](kn_source.md) - Event Source command group
|
||||||
* [kn version](kn_version.md) - Prints the client version
|
* [kn version](kn_version.md) - Prints the client version
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
## kn source
|
||||||
|
|
||||||
|
Event Source command group
|
||||||
|
|
||||||
|
### Synopsis
|
||||||
|
|
||||||
|
Event Source command group
|
||||||
|
|
||||||
|
```
|
||||||
|
kn source [flags]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Options
|
||||||
|
|
||||||
|
```
|
||||||
|
-h, --help help for source
|
||||||
|
```
|
||||||
|
|
||||||
|
### Options inherited from parent commands
|
||||||
|
|
||||||
|
```
|
||||||
|
--config string kn config file (default is $HOME/.kn/config.yaml)
|
||||||
|
--kubeconfig string kubectl config file (default is $HOME/.kube/config)
|
||||||
|
--log-http log http traffic
|
||||||
|
```
|
||||||
|
|
||||||
|
### SEE ALSO
|
||||||
|
|
||||||
|
* [kn](kn.md) - Knative client
|
||||||
|
* [kn source apiserver](kn_source_apiserver.md) - Kubernetes API Server Event Source command group
|
||||||
|
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
## kn source apiserver
|
||||||
|
|
||||||
|
Kubernetes API Server Event Source command group
|
||||||
|
|
||||||
|
### Synopsis
|
||||||
|
|
||||||
|
Kubernetes API Server Event Source command group
|
||||||
|
|
||||||
|
```
|
||||||
|
kn source apiserver [flags]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Options
|
||||||
|
|
||||||
|
```
|
||||||
|
-h, --help help for apiserver
|
||||||
|
```
|
||||||
|
|
||||||
|
### Options inherited from parent commands
|
||||||
|
|
||||||
|
```
|
||||||
|
--config string kn config file (default is $HOME/.kn/config.yaml)
|
||||||
|
--kubeconfig string kubectl config file (default is $HOME/.kube/config)
|
||||||
|
--log-http log http traffic
|
||||||
|
```
|
||||||
|
|
||||||
|
### SEE ALSO
|
||||||
|
|
||||||
|
* [kn source](kn_source.md) - Event Source command group
|
||||||
|
* [kn source apiserver create](kn_source_apiserver_create.md) - Create an ApiServerSource, which watches for Kubernetes events and forwards them to a sink
|
||||||
|
* [kn source apiserver delete](kn_source_apiserver_delete.md) - Delete an ApiServerSource.
|
||||||
|
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
## kn source apiserver create
|
||||||
|
|
||||||
|
Create an ApiServerSource, which watches for Kubernetes events and forwards them to a sink
|
||||||
|
|
||||||
|
### Synopsis
|
||||||
|
|
||||||
|
Create an ApiServerSource, which watches for Kubernetes events and forwards them to a sink
|
||||||
|
|
||||||
|
```
|
||||||
|
kn source apiserver create NAME --resource RESOURCE --service-account ACCOUNTNAME --sink SINK --mode MODE [flags]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Examples
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
# Create an ApiServerSource 'k8sevents' which consumes Kubernetes events and sends message to service 'mysvc' as a cloudevent
|
||||||
|
kn source apiserver create k8sevents --resource Event --service-account myaccountname --sink svc:mysvc
|
||||||
|
```
|
||||||
|
|
||||||
|
### Options
|
||||||
|
|
||||||
|
```
|
||||||
|
-h, --help help for create
|
||||||
|
--mode string The mode the receive adapter controller runs under:,
|
||||||
|
"Ref" sends only the reference to the resource,
|
||||||
|
"Resource" send the full resource. (default "Ref")
|
||||||
|
-n, --namespace string Specify the namespace to operate in.
|
||||||
|
--resource strings Comma seperate Kind:APIVersion:isController list, e.g. Event:v1:true.
|
||||||
|
"APIVersion" and "isControler" can be omitted.
|
||||||
|
"APIVersion" is "v1" by default, "isController" is "false" by default.
|
||||||
|
--service-account string Name of the service account to use to run this source
|
||||||
|
-s, --sink string Addressable sink for events
|
||||||
|
```
|
||||||
|
|
||||||
|
### Options inherited from parent commands
|
||||||
|
|
||||||
|
```
|
||||||
|
--config string kn config file (default is $HOME/.kn/config.yaml)
|
||||||
|
--kubeconfig string kubectl config file (default is $HOME/.kube/config)
|
||||||
|
--log-http log http traffic
|
||||||
|
```
|
||||||
|
|
||||||
|
### SEE ALSO
|
||||||
|
|
||||||
|
* [kn source apiserver](kn_source_apiserver.md) - Kubernetes API Server Event Source command group
|
||||||
|
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
## kn source apiserver delete
|
||||||
|
|
||||||
|
Delete an ApiServerSource.
|
||||||
|
|
||||||
|
### Synopsis
|
||||||
|
|
||||||
|
Delete an ApiServerSource.
|
||||||
|
|
||||||
|
```
|
||||||
|
kn source apiserver delete NAME [flags]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Examples
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
# Delete an ApiServerSource 'k8sevents' in default namespace
|
||||||
|
kn source apiserver delete k8sevents
|
||||||
|
```
|
||||||
|
|
||||||
|
### Options
|
||||||
|
|
||||||
|
```
|
||||||
|
-h, --help help for delete
|
||||||
|
-n, --namespace string Specify the namespace to operate in.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Options inherited from parent commands
|
||||||
|
|
||||||
|
```
|
||||||
|
--config string kn config file (default is $HOME/.kn/config.yaml)
|
||||||
|
--kubeconfig string kubectl config file (default is $HOME/.kube/config)
|
||||||
|
--log-http log http traffic
|
||||||
|
```
|
||||||
|
|
||||||
|
### SEE ALSO
|
||||||
|
|
||||||
|
* [kn source apiserver](kn_source_apiserver.md) - Kubernetes API Server Event Source command group
|
||||||
|
|
||||||
|
|
@ -15,6 +15,10 @@
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
apis_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
|
||||||
|
kn_errors "knative.dev/client/pkg/errors"
|
||||||
|
"knative.dev/eventing/pkg/apis/sources/v1alpha1"
|
||||||
client_v1alpha1 "knative.dev/eventing/pkg/client/clientset/versioned/typed/sources/v1alpha1"
|
client_v1alpha1 "knative.dev/eventing/pkg/client/clientset/versioned/typed/sources/v1alpha1"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -23,6 +27,12 @@ import (
|
||||||
type KnSourcesClient interface {
|
type KnSourcesClient interface {
|
||||||
// Namespace in which this client is operating for
|
// Namespace in which this client is operating for
|
||||||
Namespace() string
|
Namespace() string
|
||||||
|
|
||||||
|
// Get an ApiServerSource by object
|
||||||
|
CreateApiServerSource(apisvrsrc *v1alpha1.ApiServerSource) (*v1alpha1.ApiServerSource, error)
|
||||||
|
|
||||||
|
// Delete an ApiServerSource by name
|
||||||
|
DeleteApiServerSource(name string) error
|
||||||
}
|
}
|
||||||
|
|
||||||
// knSourcesClient is a combination of Sources client interface and namespace
|
// knSourcesClient is a combination of Sources client interface and namespace
|
||||||
|
|
@ -41,6 +51,21 @@ func NewKnSourcesClient(client client_v1alpha1.SourcesV1alpha1Interface, namespa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//CreateApiServerSource is used to create an instance of ApiServerSource
|
||||||
|
func (c *knSourcesClient) CreateApiServerSource(apisvrsrc *v1alpha1.ApiServerSource) (*v1alpha1.ApiServerSource, error) {
|
||||||
|
ins, err := c.client.ApiServerSources(c.namespace).Create(apisvrsrc)
|
||||||
|
if err != nil {
|
||||||
|
return nil, kn_errors.GetError(err)
|
||||||
|
}
|
||||||
|
return ins, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//DeleteApiServerSource is used to create an instance of ApiServerSource
|
||||||
|
func (c *knSourcesClient) DeleteApiServerSource(name string) error {
|
||||||
|
err := c.client.ApiServerSources(c.namespace).Delete(name, &apis_v1.DeleteOptions{})
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// Return the client's namespace
|
// Return the client's namespace
|
||||||
func (c *knSourcesClient) Namespace() string {
|
func (c *knSourcesClient) Namespace() string {
|
||||||
return c.namespace
|
return c.namespace
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
// Copyright © 2019 The Knative Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package v1alpha1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"gotest.tools/assert"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
|
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
client_testing "k8s.io/client-go/testing"
|
||||||
|
"knative.dev/eventing/pkg/apis/sources/v1alpha1"
|
||||||
|
"knative.dev/eventing/pkg/client/clientset/versioned/typed/sources/v1alpha1/fake"
|
||||||
|
)
|
||||||
|
|
||||||
|
var testNamespace = "test-ns"
|
||||||
|
|
||||||
|
func setup() (sources fake.FakeSourcesV1alpha1, client KnSourcesClient) {
|
||||||
|
sources = fake.FakeSourcesV1alpha1{Fake: &client_testing.Fake{}}
|
||||||
|
client = NewKnSourcesClient(&sources, testNamespace)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDeleteApiServerSource(t *testing.T) {
|
||||||
|
var srcName = "new-src"
|
||||||
|
sourcesServer, client := setup()
|
||||||
|
|
||||||
|
apisourceNew := newApiServerSource(srcName)
|
||||||
|
|
||||||
|
sourcesServer.AddReactor("create", "apiserversources",
|
||||||
|
func(a client_testing.Action) (bool, runtime.Object, error) {
|
||||||
|
assert.Equal(t, testNamespace, a.GetNamespace())
|
||||||
|
name := a.(client_testing.CreateAction).GetObject().(metav1.Object).GetName()
|
||||||
|
if name == apisourceNew.Name {
|
||||||
|
apisourceNew.Generation = 2
|
||||||
|
return true, apisourceNew, nil
|
||||||
|
}
|
||||||
|
return true, nil, fmt.Errorf("error while creating apiserversource %s", name)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("create apiserversource without error", func(t *testing.T) {
|
||||||
|
ins, err := client.CreateApiServerSource(apisourceNew)
|
||||||
|
assert.NilError(t, err)
|
||||||
|
assert.Equal(t, ins.Name, srcName)
|
||||||
|
assert.Equal(t, ins.Namespace, testNamespace)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("create apiserversource with an error returns an error object", func(t *testing.T) {
|
||||||
|
_, err := client.CreateApiServerSource(newApiServerSource("unknown"))
|
||||||
|
assert.ErrorContains(t, err, "unknown")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCreateApiServerSource(t *testing.T) {
|
||||||
|
var srcName = "new-src"
|
||||||
|
sourcesServer, client := setup()
|
||||||
|
|
||||||
|
apisourceNew := newApiServerSource(srcName)
|
||||||
|
|
||||||
|
sourcesServer.AddReactor("create", "apiserversources",
|
||||||
|
func(a client_testing.Action) (bool, runtime.Object, error) {
|
||||||
|
assert.Equal(t, testNamespace, a.GetNamespace())
|
||||||
|
name := a.(client_testing.CreateAction).GetObject().(metav1.Object).GetName()
|
||||||
|
if name == apisourceNew.Name {
|
||||||
|
apisourceNew.Generation = 2
|
||||||
|
return true, apisourceNew, nil
|
||||||
|
}
|
||||||
|
return true, nil, fmt.Errorf("error while creating apiserversource %s", name)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("create apiserversource without error", func(t *testing.T) {
|
||||||
|
ins, err := client.CreateApiServerSource(apisourceNew)
|
||||||
|
assert.NilError(t, err)
|
||||||
|
assert.Equal(t, ins.Name, srcName)
|
||||||
|
assert.Equal(t, ins.Namespace, testNamespace)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("create apiserversource with an error returns an error object", func(t *testing.T) {
|
||||||
|
_, err := client.CreateApiServerSource(newApiServerSource("unknown"))
|
||||||
|
assert.ErrorContains(t, err, "unknown")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func newApiServerSource(name string) *v1alpha1.ApiServerSource {
|
||||||
|
src := &v1alpha1.ApiServerSource{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: name,
|
||||||
|
Namespace: testNamespace,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
src.Name = name
|
||||||
|
src.Namespace = testNamespace
|
||||||
|
return src
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
// Copyright © 2019 The Knative Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package flags
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
v1 "k8s.io/api/core/v1"
|
||||||
|
apisv1alpha1 "knative.dev/pkg/apis/v1alpha1"
|
||||||
|
|
||||||
|
"knative.dev/client/pkg/serving/v1alpha1"
|
||||||
|
)
|
||||||
|
|
||||||
|
type SinkFlags struct {
|
||||||
|
sink string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *SinkFlags) Add(cmd *cobra.Command) {
|
||||||
|
cmd.Flags().StringVarP(&i.sink, "sink", "s", "", "Addressable sink for events")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *SinkFlags) ResolveSink(client v1alpha1.KnServingClient) (*apisv1alpha1.Destination, error) {
|
||||||
|
if i.sink == "" {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if strings.HasPrefix(i.sink, "svc:") {
|
||||||
|
serviceName := i.sink[4:]
|
||||||
|
service, err := client.GetService(serviceName)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &apisv1alpha1.Destination{
|
||||||
|
Ref: &v1.ObjectReference{
|
||||||
|
Kind: service.Kind,
|
||||||
|
APIVersion: service.APIVersion,
|
||||||
|
Name: service.Name,
|
||||||
|
Namespace: service.Namespace,
|
||||||
|
},
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, fmt.Errorf("Not supported sink type: %s", i.sink)
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
// Copyright © 2019 The Knative Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package apiserver
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
|
"knative.dev/client/pkg/kn/commands"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewApiServerCommand(p *commands.KnParams) *cobra.Command {
|
||||||
|
apiServerImporterCmd := &cobra.Command{
|
||||||
|
Use: "apiserver",
|
||||||
|
Short: "Kubernetes API Server Event Source command group",
|
||||||
|
}
|
||||||
|
apiServerImporterCmd.AddCommand(NewApiServerCreateCommand(p))
|
||||||
|
apiServerImporterCmd.AddCommand(NewApiServerDeleteCommand(p))
|
||||||
|
return apiServerImporterCmd
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,110 @@
|
||||||
|
// Copyright © 2019 The Knative Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package apiserver
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
"knative.dev/client/pkg/kn/commands"
|
||||||
|
"knative.dev/client/pkg/kn/commands/flags"
|
||||||
|
"knative.dev/eventing/pkg/apis/sources/v1alpha1"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewApiServerCreateCommand(p *commands.KnParams) *cobra.Command {
|
||||||
|
var apiServerUpdateFlags ApiServerSourceUpdateFlags
|
||||||
|
var sinkFlags flags.SinkFlags
|
||||||
|
|
||||||
|
cmd := &cobra.Command{
|
||||||
|
Use: "create NAME --resource RESOURCE --service-account ACCOUNTNAME --sink SINK --mode MODE",
|
||||||
|
Short: "Create an ApiServerSource, which watches for Kubernetes events and forwards them to a sink",
|
||||||
|
Example: `
|
||||||
|
# Create an ApiServerSource 'k8sevents' which consumes Kubernetes events and sends message to service 'mysvc' as a cloudevent
|
||||||
|
kn source apiserver create k8sevents --resource Event --service-account myaccountname --sink svc:mysvc`,
|
||||||
|
|
||||||
|
RunE: func(cmd *cobra.Command, args []string) (err error) {
|
||||||
|
if len(args) != 1 {
|
||||||
|
return errors.New("'source apiserver create' requires the name of the source as single argument")
|
||||||
|
}
|
||||||
|
name := args[0]
|
||||||
|
|
||||||
|
// get namespace
|
||||||
|
namespace, err := p.GetNamespace(cmd)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// get client
|
||||||
|
sourcesClient, err := p.NewSourcesClient(namespace)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// resolve sink
|
||||||
|
servingClient, err := p.NewServingClient(namespace)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
objectRef, err := sinkFlags.ResolveSink(servingClient)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf(
|
||||||
|
"cannot create ApiServerSource '%s' in namespace '%s' "+
|
||||||
|
"because %s", name, namespace, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// construct ApiServerSource
|
||||||
|
apisrvsrc := constructApiServerSource(name, namespace, apiServerUpdateFlags)
|
||||||
|
apisrvsrc.Spec.Sink = objectRef
|
||||||
|
|
||||||
|
// create
|
||||||
|
_, err = sourcesClient.CreateApiServerSource(apisrvsrc)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf(
|
||||||
|
"cannot create ApiServerSource '%s' in namespace '%s' "+
|
||||||
|
"because %s", name, namespace, err)
|
||||||
|
}
|
||||||
|
fmt.Fprintf(cmd.OutOrStdout(), "ApiServerSource '%s' successfully created in namespace '%s'.\n", args[0], namespace)
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
}
|
||||||
|
commands.AddNamespaceFlags(cmd.Flags(), false)
|
||||||
|
apiServerUpdateFlags.Add(cmd)
|
||||||
|
sinkFlags.Add(cmd)
|
||||||
|
cmd.MarkFlagRequired("schedule")
|
||||||
|
|
||||||
|
return cmd
|
||||||
|
}
|
||||||
|
|
||||||
|
// constructApiServerSource is to create an instance of v1alpha1.ApiServerSource
|
||||||
|
func constructApiServerSource(name string, namespace string, apiServerFlags ApiServerSourceUpdateFlags) *v1alpha1.ApiServerSource {
|
||||||
|
|
||||||
|
source := v1alpha1.ApiServerSource{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: name,
|
||||||
|
Namespace: namespace,
|
||||||
|
},
|
||||||
|
Spec: v1alpha1.ApiServerSourceSpec{
|
||||||
|
Resources: apiServerFlags.GetApiServerResourceArray(),
|
||||||
|
ServiceAccountName: apiServerFlags.ServiceAccountName,
|
||||||
|
Mode: apiServerFlags.Mode,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return &source
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,89 @@
|
||||||
|
// Copyright © 2019 The Knative Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package apiserver
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
sources_v1alpha1 "knative.dev/eventing/pkg/apis/sources/v1alpha1"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
ApiVersionSplitChar = ":"
|
||||||
|
DefaultApiVersion = "v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ApiServerSourceUpdateFlags are flags for create and update a ApiServerSource
|
||||||
|
type ApiServerSourceUpdateFlags struct {
|
||||||
|
ServiceAccountName string
|
||||||
|
Mode string
|
||||||
|
Resources []string
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetApiServerResourceArray is to return an array of ApiServerResource from a string. A sample is Event:v1:true,Pod:v2:false
|
||||||
|
func (f *ApiServerSourceUpdateFlags) GetApiServerResourceArray() []sources_v1alpha1.ApiServerResource {
|
||||||
|
var resourceList []sources_v1alpha1.ApiServerResource
|
||||||
|
for _, r := range f.Resources {
|
||||||
|
version, kind, controller := getValidResource(r)
|
||||||
|
resourceRef := sources_v1alpha1.ApiServerResource{
|
||||||
|
APIVersion: version,
|
||||||
|
Kind: kind,
|
||||||
|
Controller: controller,
|
||||||
|
}
|
||||||
|
resourceList = append(resourceList, resourceRef)
|
||||||
|
}
|
||||||
|
return resourceList
|
||||||
|
}
|
||||||
|
|
||||||
|
func getValidResource(resource string) (string, string, bool) {
|
||||||
|
var version = DefaultApiVersion // v1 as default
|
||||||
|
var isController = false //false as default
|
||||||
|
var err error
|
||||||
|
|
||||||
|
parts := strings.Split(resource, ApiVersionSplitChar)
|
||||||
|
kind := parts[0]
|
||||||
|
if len(parts) >= 2 {
|
||||||
|
version = parts[1]
|
||||||
|
}
|
||||||
|
if len(parts) >= 3 {
|
||||||
|
isController, err = strconv.ParseBool(parts[2])
|
||||||
|
if err != nil {
|
||||||
|
isController = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return version, kind, isController
|
||||||
|
}
|
||||||
|
|
||||||
|
//Add is to set parameters
|
||||||
|
func (f *ApiServerSourceUpdateFlags) Add(cmd *cobra.Command) {
|
||||||
|
cmd.Flags().StringVar(&f.ServiceAccountName,
|
||||||
|
"service-account",
|
||||||
|
"",
|
||||||
|
"Name of the service account to use to run this source")
|
||||||
|
cmd.Flags().StringVar(&f.Mode,
|
||||||
|
"mode",
|
||||||
|
"Ref",
|
||||||
|
`The mode the receive adapter controller runs under:,
|
||||||
|
"Ref" sends only the reference to the resource,
|
||||||
|
"Resource" send the full resource.`)
|
||||||
|
cmd.Flags().StringSliceVar(&f.Resources,
|
||||||
|
"resource",
|
||||||
|
nil,
|
||||||
|
`Comma seperate Kind:APIVersion:isController list, e.g. Event:v1:true.
|
||||||
|
"APIVersion" and "isControler" can be omitted.
|
||||||
|
"APIVersion" is "v1" by default, "isController" is "false" by default. `)
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,105 @@
|
||||||
|
// Copyright © 2019 The Knative Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package apiserver
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"gotest.tools/assert"
|
||||||
|
sources_v1alpha1 "knative.dev/eventing/pkg/apis/sources/v1alpha1"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestGetApiServerResourceArray(t *testing.T) {
|
||||||
|
t.Run("get single apiserver resource", func(t *testing.T) {
|
||||||
|
createFlag := ApiServerSourceUpdateFlags{
|
||||||
|
ServiceAccountName: "test-sa",
|
||||||
|
Mode: "Ref",
|
||||||
|
Resources: []string{"Service:serving.knative.dev/v1alpha1:true"},
|
||||||
|
}
|
||||||
|
created := createFlag.GetApiServerResourceArray()
|
||||||
|
wanted := []sources_v1alpha1.ApiServerResource{{
|
||||||
|
APIVersion: "serving.knative.dev/v1alpha1",
|
||||||
|
Kind: "Service",
|
||||||
|
Controller: true,
|
||||||
|
}}
|
||||||
|
assert.DeepEqual(t, wanted, created)
|
||||||
|
|
||||||
|
// default isController
|
||||||
|
createFlag = ApiServerSourceUpdateFlags{
|
||||||
|
ServiceAccountName: "test-sa",
|
||||||
|
Mode: "Ref",
|
||||||
|
Resources: []string{"Service:serving.knative.dev/v1alpha1"},
|
||||||
|
}
|
||||||
|
created = createFlag.GetApiServerResourceArray()
|
||||||
|
wanted = []sources_v1alpha1.ApiServerResource{{
|
||||||
|
APIVersion: "serving.knative.dev/v1alpha1",
|
||||||
|
Kind: "Service",
|
||||||
|
Controller: false,
|
||||||
|
}}
|
||||||
|
assert.DeepEqual(t, wanted, created)
|
||||||
|
|
||||||
|
// default api version and isController
|
||||||
|
createFlag = ApiServerSourceUpdateFlags{
|
||||||
|
ServiceAccountName: "test-sa",
|
||||||
|
Mode: "Ref",
|
||||||
|
Resources: []string{"Service"},
|
||||||
|
}
|
||||||
|
created = createFlag.GetApiServerResourceArray()
|
||||||
|
wanted = []sources_v1alpha1.ApiServerResource{{
|
||||||
|
APIVersion: "v1",
|
||||||
|
Kind: "Service",
|
||||||
|
Controller: false,
|
||||||
|
}}
|
||||||
|
assert.DeepEqual(t, wanted, created)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("get multiple apiserver resources", func(t *testing.T) {
|
||||||
|
createFlag := ApiServerSourceUpdateFlags{
|
||||||
|
ServiceAccountName: "test-sa",
|
||||||
|
Mode: "Resource",
|
||||||
|
Resources: []string{"Event:v1:true", "Pod:v2:false"},
|
||||||
|
}
|
||||||
|
created := createFlag.GetApiServerResourceArray()
|
||||||
|
wanted := []sources_v1alpha1.ApiServerResource{{
|
||||||
|
APIVersion: "v1",
|
||||||
|
Kind: "Event",
|
||||||
|
Controller: true,
|
||||||
|
}, {
|
||||||
|
APIVersion: "v2",
|
||||||
|
Kind: "Pod",
|
||||||
|
Controller: false,
|
||||||
|
}}
|
||||||
|
assert.DeepEqual(t, wanted, created)
|
||||||
|
|
||||||
|
// default api version and isController
|
||||||
|
createFlag = ApiServerSourceUpdateFlags{
|
||||||
|
ServiceAccountName: "test-sa",
|
||||||
|
Mode: "Resource",
|
||||||
|
Resources: []string{"Event", "Pod"},
|
||||||
|
}
|
||||||
|
created = createFlag.GetApiServerResourceArray()
|
||||||
|
|
||||||
|
wanted = []sources_v1alpha1.ApiServerResource{{
|
||||||
|
APIVersion: "v1",
|
||||||
|
Kind: "Event",
|
||||||
|
Controller: false,
|
||||||
|
}, {
|
||||||
|
APIVersion: "v1",
|
||||||
|
Kind: "Pod",
|
||||||
|
Controller: false,
|
||||||
|
}}
|
||||||
|
assert.DeepEqual(t, wanted, created)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,102 @@
|
||||||
|
// Copyright © 2019 The Knative Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package apiserver
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"gotest.tools/assert"
|
||||||
|
v1 "k8s.io/api/core/v1"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
|
client_testing "k8s.io/client-go/testing"
|
||||||
|
"knative.dev/client/pkg/kn/commands"
|
||||||
|
"knative.dev/client/pkg/util"
|
||||||
|
"knative.dev/eventing/pkg/apis/sources/v1alpha1"
|
||||||
|
apisv1alpha1 "knative.dev/pkg/apis/v1alpha1"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
testApiServerSrcName = "foo"
|
||||||
|
)
|
||||||
|
|
||||||
|
func fakeApiServerSourceCreate(args []string, withExistingService bool, sync bool) (
|
||||||
|
action client_testing.Action,
|
||||||
|
src *v1alpha1.ApiServerSource,
|
||||||
|
output string,
|
||||||
|
err error) {
|
||||||
|
knParams := &commands.KnParams{}
|
||||||
|
cmd, fakeSource, buf := commands.CreateSourcesTestKnCommand(NewApiServerCommand(knParams), knParams)
|
||||||
|
fakeSource.AddReactor("create", "apiserversources",
|
||||||
|
func(a client_testing.Action) (bool, runtime.Object, error) {
|
||||||
|
createAction, ok := a.(client_testing.CreateAction)
|
||||||
|
action = createAction
|
||||||
|
if !ok {
|
||||||
|
return true, nil, fmt.Errorf("wrong kind of action %v", a)
|
||||||
|
}
|
||||||
|
src, ok = createAction.GetObject().(*v1alpha1.ApiServerSource)
|
||||||
|
if !ok {
|
||||||
|
return true, nil, errors.New("was passed the wrong object")
|
||||||
|
}
|
||||||
|
return true, src, nil
|
||||||
|
})
|
||||||
|
cmd.SetArgs(args)
|
||||||
|
err = cmd.Execute()
|
||||||
|
if err != nil {
|
||||||
|
output = err.Error()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
output = buf.String()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestApiServerSourceCreate(t *testing.T) {
|
||||||
|
action, created, output, err := fakeApiServerSourceCreate([]string{
|
||||||
|
"apiserver", "create", testApiServerSrcName, "--resource", "Event:v1:true", "--service-account", "myaccountname", "--sink", "svc:mysvc"}, true, false)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
} else if !action.Matches("create", "apiserversources") {
|
||||||
|
t.Fatalf("Bad action %v", action)
|
||||||
|
}
|
||||||
|
|
||||||
|
//construct a wanted instance
|
||||||
|
wanted := &v1alpha1.ApiServerSource{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: testApiServerSrcName,
|
||||||
|
Namespace: commands.FakeNamespace,
|
||||||
|
},
|
||||||
|
Spec: v1alpha1.ApiServerSourceSpec{
|
||||||
|
Resources: []v1alpha1.ApiServerResource{{
|
||||||
|
APIVersion: "v1",
|
||||||
|
Kind: "Event",
|
||||||
|
Controller: true,
|
||||||
|
}},
|
||||||
|
ServiceAccountName: "myaccountname",
|
||||||
|
Mode: "Ref",
|
||||||
|
Sink: &apisv1alpha1.Destination{
|
||||||
|
Ref: &v1.ObjectReference{
|
||||||
|
Kind: "Service",
|
||||||
|
APIVersion: "serving.knative.dev/v1alpha1",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
//assert equal
|
||||||
|
assert.DeepEqual(t, wanted, created)
|
||||||
|
assert.Check(t, util.ContainsAll(output, "ApiServerSource", testApiServerSrcName, "created", "namespace", commands.FakeNamespace))
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,59 @@
|
||||||
|
// Copyright © 2019 The Knative Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package apiserver
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
"knative.dev/client/pkg/kn/commands"
|
||||||
|
)
|
||||||
|
|
||||||
|
// NewRevisionDeleteCommand represent 'revision delete' command
|
||||||
|
func NewApiServerDeleteCommand(p *commands.KnParams) *cobra.Command {
|
||||||
|
ApiServerDeleteCommand := &cobra.Command{
|
||||||
|
Use: "delete NAME",
|
||||||
|
Short: "Delete an ApiServerSource.",
|
||||||
|
Example: `
|
||||||
|
# Delete an ApiServerSource 'k8sevents' in default namespace
|
||||||
|
kn source apiserver delete k8sevents`,
|
||||||
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
if len(args) != 1 {
|
||||||
|
return errors.New("'source apiserver delete' requires the name of the source as single argument")
|
||||||
|
}
|
||||||
|
name := args[0]
|
||||||
|
|
||||||
|
namespace, err := p.GetNamespace(cmd)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
sourcesClient, err := p.NewSourcesClient(namespace)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = sourcesClient.DeleteApiServerSource(name)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
fmt.Fprintf(cmd.OutOrStdout(), "ApiServerSource '%s' deleted in namespace '%s'.\n", args[0], namespace)
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
}
|
||||||
|
commands.AddNamespaceFlags(ApiServerDeleteCommand.Flags(), false)
|
||||||
|
return ApiServerDeleteCommand
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
// Copyright © 2019 The Knative Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package apiserver
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"gotest.tools/assert"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
|
client_testing "k8s.io/client-go/testing"
|
||||||
|
"knative.dev/client/pkg/kn/commands"
|
||||||
|
"knative.dev/client/pkg/util"
|
||||||
|
)
|
||||||
|
|
||||||
|
func fakeServiceDelete(args []string) (action client_testing.Action, name string, output string, err error) {
|
||||||
|
knParams := &commands.KnParams{}
|
||||||
|
cmd, fakeSource, buf := commands.CreateSourcesTestKnCommand(NewApiServerCommand(knParams), knParams)
|
||||||
|
fakeSource.AddReactor("delete", "apiserversources",
|
||||||
|
func(a client_testing.Action) (bool, runtime.Object, error) {
|
||||||
|
deleteAction, _ := a.(client_testing.DeleteAction)
|
||||||
|
action = deleteAction
|
||||||
|
name = deleteAction.GetName()
|
||||||
|
return true, nil, nil
|
||||||
|
})
|
||||||
|
cmd.SetArgs(args)
|
||||||
|
err = cmd.Execute()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
output = buf.String()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestServiceDelete(t *testing.T) {
|
||||||
|
srcName := "src-12345"
|
||||||
|
action, name, output, err := fakeServiceDelete([]string{"apiserver", "delete", srcName})
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if action == nil {
|
||||||
|
t.Errorf("No action")
|
||||||
|
} else if !action.Matches("delete", "apiserversources") {
|
||||||
|
t.Errorf("Bad action %v", action)
|
||||||
|
} else if name != srcName {
|
||||||
|
t.Errorf("Bad service name returned after delete.")
|
||||||
|
}
|
||||||
|
assert.Check(t, util.ContainsAll(output, "ApiServerSource", srcName, "deleted", "namespace", commands.FakeNamespace))
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
// Copyright © 2019 The Knative Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package source
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
|
"knative.dev/client/pkg/kn/commands"
|
||||||
|
"knative.dev/client/pkg/kn/commands/source/apiserver"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewSourceCommand(p *commands.KnParams) *cobra.Command {
|
||||||
|
sourceCmd := &cobra.Command{
|
||||||
|
Use: "source",
|
||||||
|
Short: "Event Source command group",
|
||||||
|
}
|
||||||
|
//sourceCmd.AddCommand(cron.NewCronCommand(p))
|
||||||
|
sourceCmd.AddCommand(apiserver.NewApiServerCommand(p))
|
||||||
|
return sourceCmd
|
||||||
|
}
|
||||||
|
|
@ -60,6 +60,12 @@ func CreateTestKnCommand(cmd *cobra.Command, knParams *KnParams) (*cobra.Command
|
||||||
// CreateSourcesTestKnCommand helper for creating test commands
|
// CreateSourcesTestKnCommand helper for creating test commands
|
||||||
func CreateSourcesTestKnCommand(cmd *cobra.Command, knParams *KnParams) (*cobra.Command, *sources_fake.FakeSourcesV1alpha1, *bytes.Buffer) {
|
func CreateSourcesTestKnCommand(cmd *cobra.Command, knParams *KnParams) (*cobra.Command, *sources_fake.FakeSourcesV1alpha1, *bytes.Buffer) {
|
||||||
buf := new(bytes.Buffer)
|
buf := new(bytes.Buffer)
|
||||||
|
// create fake serving client because the sink of source depends on serving client
|
||||||
|
fakeServing := &fake.FakeServingV1alpha1{&client_testing.Fake{}}
|
||||||
|
knParams.NewServingClient = func(namespace string) (v1alpha1.KnServingClient, error) {
|
||||||
|
return v1alpha1.NewKnServingClient(fakeServing, FakeNamespace), nil
|
||||||
|
}
|
||||||
|
// create fake sources client
|
||||||
fakeEventing := &sources_fake.FakeSourcesV1alpha1{&client_testing.Fake{}}
|
fakeEventing := &sources_fake.FakeSourcesV1alpha1{&client_testing.Fake{}}
|
||||||
knParams.Output = buf
|
knParams.Output = buf
|
||||||
knParams.NewSourcesClient = func(namespace string) (sources_client.KnSourcesClient, error) {
|
knParams.NewSourcesClient = func(namespace string) (sources_client.KnSourcesClient, error) {
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ import (
|
||||||
"knative.dev/client/pkg/kn/commands/revision"
|
"knative.dev/client/pkg/kn/commands/revision"
|
||||||
"knative.dev/client/pkg/kn/commands/route"
|
"knative.dev/client/pkg/kn/commands/route"
|
||||||
"knative.dev/client/pkg/kn/commands/service"
|
"knative.dev/client/pkg/kn/commands/service"
|
||||||
|
"knative.dev/client/pkg/kn/commands/source"
|
||||||
"knative.dev/client/pkg/kn/commands/version"
|
"knative.dev/client/pkg/kn/commands/version"
|
||||||
"knative.dev/client/pkg/kn/flags"
|
"knative.dev/client/pkg/kn/flags"
|
||||||
)
|
)
|
||||||
|
|
@ -142,6 +143,7 @@ func NewKnCommand(params ...commands.KnParams) *cobra.Command {
|
||||||
rootCmd.AddCommand(route.NewRouteCommand(p))
|
rootCmd.AddCommand(route.NewRouteCommand(p))
|
||||||
rootCmd.AddCommand(completion.NewCompletionCommand(p))
|
rootCmd.AddCommand(completion.NewCompletionCommand(p))
|
||||||
rootCmd.AddCommand(version.NewVersionCommand(p))
|
rootCmd.AddCommand(version.NewVersionCommand(p))
|
||||||
|
rootCmd.AddCommand(source.NewSourceCommand(p))
|
||||||
|
|
||||||
// Deal with empty and unknown sub command groups
|
// Deal with empty and unknown sub command groups
|
||||||
EmptyAndUnknownSubCommands(rootCmd)
|
EmptyAndUnknownSubCommands(rootCmd)
|
||||||
|
|
|
||||||
|
|
@ -357,8 +357,8 @@ gotest.tools/internal/source
|
||||||
gotest.tools/internal/difflib
|
gotest.tools/internal/difflib
|
||||||
# k8s.io/api v0.0.0-20191016110246-af539daaa43a
|
# k8s.io/api v0.0.0-20191016110246-af539daaa43a
|
||||||
k8s.io/api/core/v1
|
k8s.io/api/core/v1
|
||||||
k8s.io/api/authentication/v1
|
|
||||||
k8s.io/api/apps/v1
|
k8s.io/api/apps/v1
|
||||||
|
k8s.io/api/authentication/v1
|
||||||
k8s.io/api/admissionregistration/v1beta1
|
k8s.io/api/admissionregistration/v1beta1
|
||||||
k8s.io/api/apps/v1beta1
|
k8s.io/api/apps/v1beta1
|
||||||
k8s.io/api/apps/v1beta2
|
k8s.io/api/apps/v1beta2
|
||||||
|
|
@ -437,9 +437,9 @@ k8s.io/apimachinery/pkg/version
|
||||||
k8s.io/apimachinery/pkg/runtime/serializer/protobuf
|
k8s.io/apimachinery/pkg/runtime/serializer/protobuf
|
||||||
k8s.io/apimachinery/pkg/runtime/serializer/recognizer
|
k8s.io/apimachinery/pkg/runtime/serializer/recognizer
|
||||||
k8s.io/apimachinery/pkg/util/clock
|
k8s.io/apimachinery/pkg/util/clock
|
||||||
k8s.io/apimachinery/pkg/util/framer
|
|
||||||
k8s.io/apimachinery/pkg/util/cache
|
k8s.io/apimachinery/pkg/util/cache
|
||||||
k8s.io/apimachinery/pkg/util/diff
|
k8s.io/apimachinery/pkg/util/diff
|
||||||
|
k8s.io/apimachinery/pkg/util/framer
|
||||||
k8s.io/apimachinery/pkg/apis/meta/internalversion
|
k8s.io/apimachinery/pkg/apis/meta/internalversion
|
||||||
# k8s.io/cli-runtime v0.0.0-20191016113937-7693ce2cae74
|
# k8s.io/cli-runtime v0.0.0-20191016113937-7693ce2cae74
|
||||||
k8s.io/cli-runtime/pkg/genericclioptions
|
k8s.io/cli-runtime/pkg/genericclioptions
|
||||||
|
|
@ -475,9 +475,9 @@ k8s.io/client-go/tools/metrics
|
||||||
k8s.io/client-go/transport
|
k8s.io/client-go/transport
|
||||||
k8s.io/client-go/util/cert
|
k8s.io/client-go/util/cert
|
||||||
k8s.io/client-go/util/flowcontrol
|
k8s.io/client-go/util/flowcontrol
|
||||||
|
k8s.io/client-go/tools/cache
|
||||||
k8s.io/client-go/tools/clientcmd/api/v1
|
k8s.io/client-go/tools/clientcmd/api/v1
|
||||||
k8s.io/client-go/dynamic
|
k8s.io/client-go/dynamic
|
||||||
k8s.io/client-go/tools/cache
|
|
||||||
k8s.io/client-go/kubernetes/scheme
|
k8s.io/client-go/kubernetes/scheme
|
||||||
k8s.io/client-go/third_party/forked/golang/template
|
k8s.io/client-go/third_party/forked/golang/template
|
||||||
k8s.io/client-go/pkg/apis/clientauthentication
|
k8s.io/client-go/pkg/apis/clientauthentication
|
||||||
|
|
@ -621,12 +621,12 @@ k8s.io/utils/integer
|
||||||
k8s.io/utils/buffer
|
k8s.io/utils/buffer
|
||||||
k8s.io/utils/trace
|
k8s.io/utils/trace
|
||||||
# knative.dev/eventing v0.10.0
|
# knative.dev/eventing v0.10.0
|
||||||
|
knative.dev/eventing/pkg/apis/sources/v1alpha1
|
||||||
knative.dev/eventing/pkg/client/clientset/versioned/typed/sources/v1alpha1
|
knative.dev/eventing/pkg/client/clientset/versioned/typed/sources/v1alpha1
|
||||||
knative.dev/eventing/pkg/client/clientset/versioned/typed/sources/v1alpha1/fake
|
knative.dev/eventing/pkg/client/clientset/versioned/typed/sources/v1alpha1/fake
|
||||||
knative.dev/eventing/pkg/apis/sources/v1alpha1
|
|
||||||
knative.dev/eventing/pkg/client/clientset/versioned/scheme
|
|
||||||
knative.dev/eventing/pkg/apis/duck
|
knative.dev/eventing/pkg/apis/duck
|
||||||
knative.dev/eventing/pkg/apis/sources
|
knative.dev/eventing/pkg/apis/sources
|
||||||
|
knative.dev/eventing/pkg/client/clientset/versioned/scheme
|
||||||
knative.dev/eventing/pkg/apis/eventing/v1alpha1
|
knative.dev/eventing/pkg/apis/eventing/v1alpha1
|
||||||
knative.dev/eventing/pkg/apis/messaging/v1alpha1
|
knative.dev/eventing/pkg/apis/messaging/v1alpha1
|
||||||
knative.dev/eventing/pkg/apis/duck/v1alpha1
|
knative.dev/eventing/pkg/apis/duck/v1alpha1
|
||||||
|
|
@ -635,13 +635,13 @@ knative.dev/eventing/pkg/apis/messaging
|
||||||
# knative.dev/pkg v0.0.0-20191107185656-884d50f09454
|
# knative.dev/pkg v0.0.0-20191107185656-884d50f09454
|
||||||
knative.dev/pkg/apis
|
knative.dev/pkg/apis
|
||||||
knative.dev/pkg/apis/duck/v1
|
knative.dev/pkg/apis/duck/v1
|
||||||
|
knative.dev/pkg/apis/v1alpha1
|
||||||
knative.dev/pkg/ptr
|
knative.dev/pkg/ptr
|
||||||
|
knative.dev/pkg/kmeta
|
||||||
knative.dev/pkg/kmp
|
knative.dev/pkg/kmp
|
||||||
knative.dev/pkg/apis/duck
|
knative.dev/pkg/apis/duck
|
||||||
knative.dev/pkg/apis/v1alpha1
|
|
||||||
knative.dev/pkg/profiling
|
knative.dev/pkg/profiling
|
||||||
knative.dev/pkg/apis/duck/v1alpha1
|
knative.dev/pkg/apis/duck/v1alpha1
|
||||||
knative.dev/pkg/kmeta
|
|
||||||
knative.dev/pkg/configmap
|
knative.dev/pkg/configmap
|
||||||
knative.dev/pkg/logging
|
knative.dev/pkg/logging
|
||||||
knative.dev/pkg/network
|
knative.dev/pkg/network
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue