Skip to content

Commit

Permalink
Allow creating v1beta1 resources
Browse files Browse the repository at this point in the history
Fixes tektoncd#481

Signed-off-by: Dibyo Mukherjee <dibyo@google.com>
  • Loading branch information
dibyom committed Mar 19, 2020
1 parent 0ea7560 commit 3ac7278
Show file tree
Hide file tree
Showing 5 changed files with 96 additions and 5 deletions.
47 changes: 47 additions & 0 deletions examples/v1beta1/README.md
Original file line number Diff line number Diff line change
@@ -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-
```
29 changes: 29 additions & 0 deletions examples/v1beta1/v1beta1-listener.yaml
Original file line number Diff line number Diff line change
@@ -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
15 changes: 10 additions & 5 deletions pkg/apis/triggers/v1alpha1/trigger_template_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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":{}}`),
}
Expand Down Expand Up @@ -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(
Expand Down
1 change: 1 addition & 0 deletions pkg/client/dynamic/clientset/tekton/tekton.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 3ac7278

Please sign in to comment.