-
Notifications
You must be signed in to change notification settings - Fork 263
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add command to create/delete a plain trigger #541
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
## kn trigger | ||
|
||
Trigger command group | ||
|
||
### Synopsis | ||
|
||
Trigger command group | ||
|
||
``` | ||
kn trigger [flags] | ||
``` | ||
|
||
### Options | ||
|
||
``` | ||
-h, --help help for trigger | ||
``` | ||
|
||
### 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 trigger create](kn_trigger_create.md) - Create a trigger | ||
* [kn trigger delete](kn_trigger_delete.md) - Delete a trigger. | ||
* [kn trigger describe](kn_trigger_describe.md) - Describe a trigger. | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
## kn trigger create | ||
|
||
Create a trigger | ||
|
||
### Synopsis | ||
|
||
Create a trigger | ||
|
||
``` | ||
kn trigger create NAME --broker BROKER --filter KEY=VALUE --sink SINK [flags] | ||
``` | ||
|
||
### Examples | ||
|
||
``` | ||
|
||
# Create a trigger 'mytrigger' to declare a subscription to events with attribute 'type=dev.knative.foo' from default broker. The subscriber is service 'mysvc' | ||
kn trigger create mytrigger --broker default --filter type=dev.knative.foo --sink svc:mysvc | ||
``` | ||
|
||
### Options | ||
|
||
``` | ||
--broker string Name of the Broker which the trigger associates with. (default "default") | ||
--filter []string Key-value pair for exact CloudEvent attribute matching against incoming events, e.g type=dev.knative.foo | ||
-h, --help help for create | ||
-n, --namespace string Specify the namespace to operate in. | ||
-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 trigger](kn_trigger.md) - Trigger command group | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
## kn trigger delete | ||
|
||
Delete a trigger. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Spelling... There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Change to lower case t in the whole PR (unless starting a sentence) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Change to lower case t in the whole PR (unless starting a sentence) |
||
|
||
### Synopsis | ||
|
||
Delete a trigger. | ||
|
||
``` | ||
kn trigger delete NAME [flags] | ||
``` | ||
|
||
### Examples | ||
|
||
``` | ||
|
||
# Delete a trigger 'mytrigger' in default namespace | ||
kn trigger delete mytrigger | ||
``` | ||
|
||
### 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 trigger](kn_trigger.md) - Trigger command group | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
## kn trigger describe | ||
|
||
Describe a trigger. | ||
|
||
### Synopsis | ||
|
||
Describe a trigger. | ||
|
||
``` | ||
kn trigger describe NAME [flags] | ||
``` | ||
|
||
### Examples | ||
|
||
``` | ||
|
||
# Describe a trigger with name 'my-trigger' | ||
kn trigger describe my-trigger | ||
``` | ||
|
||
### Options | ||
|
||
``` | ||
-h, --help help for describe | ||
-n, --namespace string Specify the namespace to operate in. | ||
-v, --verbose More output. | ||
``` | ||
|
||
### 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 trigger](kn_trigger.md) - Trigger command group | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
// 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 ( | ||
apis_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||
|
||
kn_errors "knative.dev/client/pkg/errors" | ||
"knative.dev/eventing/pkg/apis/eventing/v1alpha1" | ||
client_v1alpha1 "knative.dev/eventing/pkg/client/clientset/versioned/typed/eventing/v1alpha1" | ||
) | ||
|
||
// KnEventingClient to Eventing Sources. All methods are relative to the | ||
// namespace specified during construction | ||
type KnEventingClient interface { | ||
// Namespace in which this client is operating for | ||
Namespace() string | ||
// CreateTrigger is used to create an instance of trigger | ||
CreateTrigger(trigger *v1alpha1.Trigger) (*v1alpha1.Trigger, error) | ||
// DeleteTrigger is used to delete an instance of trigger | ||
DeleteTrigger(name string) error | ||
// GetTrigger is used to get an instance of trigger | ||
GetTrigger(name string) (*v1alpha1.Trigger, error) | ||
} | ||
|
||
// KnEventingClient is a combination of Sources client interface and namespace | ||
// Temporarily help to add sources dependencies | ||
// May be changed when adding real sources features | ||
type knEventingClient struct { | ||
client client_v1alpha1.EventingV1alpha1Interface | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Be consistent with creation in the order of the fields? It’s reverse here to the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I changed the order of fields in NewKnEventingClient constructor to be consistent. |
||
namespace string | ||
} | ||
|
||
// NewKnEventingClient is to invoke Eventing Sources Client API to create object | ||
func NewKnEventingClient(client client_v1alpha1.EventingV1alpha1Interface, namespace string) KnEventingClient { | ||
return &knEventingClient{ | ||
client: client, | ||
namespace: namespace, | ||
} | ||
} | ||
|
||
//CreateTrigger is used to create an instance of trigger | ||
func (c *knEventingClient) CreateTrigger(trigger *v1alpha1.Trigger) (*v1alpha1.Trigger, error) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. To be in accordance with our other APIs, we should not return the created trigger here. |
||
trigger, err := c.client.Triggers(c.namespace).Create(trigger) | ||
if err != nil { | ||
return nil, kn_errors.GetError(err) | ||
} | ||
return trigger, nil | ||
} | ||
|
||
//DeleteTrigger is used to delete an instance of trigger | ||
func (c *knEventingClient) DeleteTrigger(name string) error { | ||
err := c.client.Triggers(c.namespace).Delete(name, &apis_v1.DeleteOptions{}) | ||
if err != nil { | ||
return kn_errors.GetError(err) | ||
} | ||
return nil | ||
} | ||
|
||
//GetTrigger is used to get an instance of trigger | ||
func (c *knEventingClient) GetTrigger(name string) (*v1alpha1.Trigger, error) { | ||
trigger, err := c.client.Triggers(c.namespace).Get(name, apis_v1.GetOptions{}) | ||
if err != nil { | ||
return nil, kn_errors.GetError(err) | ||
} | ||
return trigger, nil | ||
} | ||
|
||
// Return the client's namespace | ||
func (c *knEventingClient) Namespace() string { | ||
return c.namespace | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
// 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 ( | ||
"testing" | ||
|
||
"knative.dev/client/pkg/util/mock" | ||
"knative.dev/eventing/pkg/apis/eventing/v1alpha1" | ||
) | ||
|
||
// MockKnEventingClient is a combine of test object and recorder | ||
type MockKnEventingClient struct { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Golint comments: exported type MockKnEventingClient should have comment or be unexported. More info. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 👍 |
||
t *testing.T | ||
recorder *EventingRecorder | ||
namespace string | ||
} | ||
|
||
// NewMockKnEventingClient returns a new mock instance which you need to record for | ||
func NewMockKnEventingClient(t *testing.T, ns ...string) *MockKnEventingClient { | ||
namespace := "default" | ||
if len(ns) > 0 { | ||
namespace = ns[0] | ||
} | ||
return &MockKnEventingClient{ | ||
t: t, | ||
recorder: &EventingRecorder{mock.NewRecorder(t, namespace)}, | ||
} | ||
} | ||
|
||
// Ensure that the interface is implemented | ||
var _ KnEventingClient = &MockKnEventingClient{} | ||
|
||
// EventingRecorder is recorder for eventing objects | ||
type EventingRecorder struct { | ||
r *mock.Recorder | ||
} | ||
|
||
// Recorder returns the recorder for registering API calls | ||
func (c *MockKnEventingClient) Recorder() *EventingRecorder { | ||
return c.recorder | ||
} | ||
|
||
// Namespace of this client | ||
func (c *MockKnEventingClient) Namespace() string { | ||
return c.recorder.r.Namespace() | ||
} | ||
|
||
// CreateTrigger records a call for CreateCronJobSource with the expected error | ||
func (sr *EventingRecorder) CreateTrigger(trigger interface{}, err error) { | ||
sr.r.Add("CreateTrigger", []interface{}{trigger}, []interface{}{trigger, err}) | ||
} | ||
|
||
// CreateTrigger performs a previously recorded action, failing if non has been registered | ||
func (c *MockKnEventingClient) CreateTrigger(trigger *v1alpha1.Trigger) (*v1alpha1.Trigger, error) { | ||
call := c.recorder.r.VerifyCall("CreateTrigger", trigger) | ||
return call.Result[0].(*v1alpha1.Trigger), mock.ErrorOrNil(call.Result[1]) | ||
} | ||
|
||
// GetTrigger records a call for GetTrigger with the expected object or error. Either trigger or err should be nil | ||
func (sr *EventingRecorder) GetTrigger(name interface{}, trigger *v1alpha1.Trigger, err error) { | ||
sr.r.Add("GetTrigger", []interface{}{name}, []interface{}{trigger, err}) | ||
} | ||
|
||
// GetTrigger performs a previously recorded action, failing if non has been registered | ||
func (c *MockKnEventingClient) GetTrigger(name string) (*v1alpha1.Trigger, error) { | ||
call := c.recorder.r.VerifyCall("GetTrigger", name) | ||
return call.Result[0].(*v1alpha1.Trigger), mock.ErrorOrNil(call.Result[1]) | ||
} | ||
|
||
// DeleteTrigger records a call for DeleteTrigger with the expected error (nil if none) | ||
func (sr *EventingRecorder) DeleteTrigger(name interface{}, err error) { | ||
sr.r.Add("DeleteTrigger", []interface{}{name}, []interface{}{err}) | ||
} | ||
|
||
// DeleteTrigger performs a previously recorded action, failing if non has been registered | ||
func (c *MockKnEventingClient) DeleteTrigger(name string) error { | ||
call := c.recorder.r.VerifyCall("DeleteTrigger", name) | ||
return mock.ErrorOrNil(call.Result[0]) | ||
} | ||
|
||
// Validate validates whether every recorded action has been called | ||
func (sr *EventingRecorder) Validate() { | ||
sr.r.CheckThatAllRecordedMethodsHaveBeenCalled() | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
// 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 ( | ||
"testing" | ||
|
||
"knative.dev/eventing/pkg/apis/eventing/v1alpha1" | ||
) | ||
|
||
func TestMockKnClient(t *testing.T) { | ||
|
||
client := NewMockKnEventingClient(t) | ||
|
||
recorder := client.Recorder() | ||
|
||
// Record all services | ||
recorder.GetTrigger("hello", nil, nil) | ||
recorder.CreateTrigger(&v1alpha1.Trigger{}, nil) | ||
recorder.DeleteTrigger("hello", nil) | ||
|
||
// Call all service | ||
client.GetTrigger("hello") | ||
client.CreateTrigger(&v1alpha1.Trigger{}) | ||
client.DeleteTrigger("hello") | ||
|
||
// Validate | ||
recorder.Validate() | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should contain examples, like for sources.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Examples are contained in line #13.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I mean, describing the possible format (e.g. prefix
:
name) and a reference to the list of possible prefixes. Lets keep it like now, going to make an overall check of all sources later.