diff --git a/examples/v1beta1/README.md b/examples/v1beta1/README.md new file mode 100644 index 0000000000..b3cd9c6be3 --- /dev/null +++ b/examples/v1beta1/README.md @@ -0,0 +1,47 @@ +## V1Beta1 Task EventListener + +Creates an EventListener that creates a v1beta1 TaskRun. + +### Try it out locally: + +1. Create the service account: + + ```shell script + kubectl apply -f examples/role-resources/triggerbinding-roles + kubectl apply -f examples/role-resources/ + ``` + +1. Create the V1Beta1 EventListener: + + ```shell script + kubectl apply -f examples/v1beta1/v1beta1-listener.yaml + ``` + +1. Port forward: + + ```shell script + kubectl port-forward \ + "$(kubectl get pod --selector=eventlistener=v1beta1-listener -oname)" \ + 8080 + ``` + + **Note**: Instead of port forwarding, you can set the + [`serviceType`](https://github.com/tektoncd/triggers/blob/master/docs/eventlisteners.md#serviceType) + to `LoadBalancer` to expose the EventListener with a public IP. + +1. Test by sending the sample payload. + + ```shell script + curl -v \ + -H 'Content-Type: application/json' \ + --data "{}" \ + http://localhost:8080 + ``` + + The response status code should be `201 Created` + +1. You should see a new TaskRun that got created: + + ```shell script + kubectl get taskruns | grep v1beta1-run- + ``` diff --git a/examples/v1beta1/v1beta1-listener.yaml b/examples/v1beta1/v1beta1-listener.yaml new file mode 100644 index 0000000000..20f7881c25 --- /dev/null +++ b/examples/v1beta1/v1beta1-listener.yaml @@ -0,0 +1,29 @@ +--- +apiVersion: tekton.dev/v1alpha1 +kind: TriggerTemplate +metadata: + name: v1beta1-task-template +spec: + resourcetemplates: + - apiVersion: tekton.dev/v1beta1 + kind: TaskRun + metadata: + generateName: v1beta1-run- + spec: + taskSpec: + steps: + - name: "hellothere" + image: ubuntu + script: echo "hello there" +--- +apiVersion: tekton.dev/v1alpha1 +kind: EventListener +metadata: + name: v1beta1-task-listener +spec: + # from examples/role-resources/servicaccount.yaml + serviceAccountName: tekton-triggers-example-sa + triggers: + - name: v1beta1-task-trigger + template: + name: v1beta1-task-template diff --git a/pkg/apis/triggers/v1alpha1/trigger_template_types.go b/pkg/apis/triggers/v1alpha1/trigger_template_types.go index 54165cab8b..d24eb22bb2 100644 --- a/pkg/apis/triggers/v1alpha1/trigger_template_types.go +++ b/pkg/apis/triggers/v1alpha1/trigger_template_types.go @@ -17,7 +17,8 @@ limitations under the License. package v1alpha1 import ( - pipelinev1 "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1alpha1" + pipelinev1alpha1 "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1alpha1" + pipelinev1beta1 "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/serializer" @@ -33,15 +34,19 @@ var Decoder runtime.Decoder func init() { scheme := runtime.NewScheme() - utilruntime.Must(pipelinev1.AddToScheme(scheme)) + utilruntime.Must(pipelinev1alpha1.AddToScheme(scheme)) + utilruntime.Must(pipelinev1beta1.AddToScheme(scheme)) codec := serializer.NewCodecFactory(scheme) - Decoder = codec.UniversalDecoder(pipelinev1.SchemeGroupVersion) + Decoder = codec.UniversalDecoder( + pipelinev1alpha1.SchemeGroupVersion, + pipelinev1beta1.SchemeGroupVersion, + ) } // TriggerTemplateSpec holds the desired state of TriggerTemplate type TriggerTemplateSpec struct { - Params []pipelinev1.ParamSpec `json:"params,omitempty"` - ResourceTemplates []TriggerResourceTemplate `json:"resourcetemplates,omitempty"` + Params []pipelinev1alpha1.ParamSpec `json:"params,omitempty"` + ResourceTemplates []TriggerResourceTemplate `json:"resourcetemplates,omitempty"` } // TriggerResourceTemplate describes a resource to create diff --git a/pkg/apis/triggers/v1alpha1/trigger_template_validation_test.go b/pkg/apis/triggers/v1alpha1/trigger_template_validation_test.go index 0626fa66bb..7c4a80f892 100644 --- a/pkg/apis/triggers/v1alpha1/trigger_template_validation_test.go +++ b/pkg/apis/triggers/v1alpha1/trigger_template_validation_test.go @@ -32,6 +32,9 @@ import ( var simpleResourceTemplate = runtime.RawExtension{ Raw: []byte(`{"kind":"PipelineRun","apiVersion":"tekton.dev/v1alpha1","metadata":{"creationTimestamp":null},"spec":{},"status":{}}`), } +var v1beta1ResourceTemplate = runtime.RawExtension{ + Raw: []byte(`{"kind":"PipelineRun","apiVersion":"tekton.dev/v1beta1","metadata":{"creationTimestamp":null},"spec":{},"status":{}}`), +} var paramResourceTemplate = runtime.RawExtension{ Raw: []byte(`{"kind":"PipelineRun","apiVersion":"tekton.dev/v1alpha1","metadata":{"creationTimestamp":null},"spec": "$(params.foo)","status":{}}`), } @@ -70,6 +73,12 @@ func TestTriggerTemplate_Validate(t *testing.T) { b.TriggerTemplateParam("foo", "desc", "val"), b.TriggerResourceTemplate(simpleResourceTemplate))), want: nil, + }, { + name: "valid v1beta1 template", + template: b.TriggerTemplate("tt", "foo", b.TriggerTemplateSpec( + b.TriggerTemplateParam("foo", "desc", "val"), + b.TriggerResourceTemplate(v1beta1ResourceTemplate))), + want: nil, }, { name: "missing resource template", template: b.TriggerTemplate("tt", "foo", b.TriggerTemplateSpec( diff --git a/pkg/client/dynamic/clientset/tekton/tekton.go b/pkg/client/dynamic/clientset/tekton/tekton.go index b8c6414f00..09d7cc7008 100644 --- a/pkg/client/dynamic/clientset/tekton/tekton.go +++ b/pkg/client/dynamic/clientset/tekton/tekton.go @@ -9,6 +9,7 @@ import ( var allowedTektonTypes = map[string][]string{ "v1alpha1": {"pipelineresources", "pipelineruns", "taskruns", "pipelines", "clustertasks", "tasks", "conditions"}, + "v1beta1": {"pipelineruns", "taskruns", "pipelines", "clustertasks", "tasks"}, } // WithClient adds Tekton related clients to the Dynamic client.