mirror of https://github.com/knative/caching.git
Auto-update dependencies (#146)
Produced via: `dep ensure -update knative.dev/test-infra knative.dev/pkg` /assign n3wscott
This commit is contained in:
parent
cf0d28345f
commit
c97a7bc3ee
|
@ -933,7 +933,7 @@
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
digest = "1:bfb453e78558b31d99d1335840a7d92328fc85fe35c58d4c5179caddb28f7416"
|
digest = "1:34e554f20eb006126d25432770ceb39b1d21940e38fd3a1e443b04e1dc8ea52d"
|
||||||
name = "knative.dev/pkg"
|
name = "knative.dev/pkg"
|
||||||
packages = [
|
packages = [
|
||||||
"apis",
|
"apis",
|
||||||
|
@ -952,7 +952,7 @@
|
||||||
"metrics/metricskey",
|
"metrics/metricskey",
|
||||||
]
|
]
|
||||||
pruneopts = "T"
|
pruneopts = "T"
|
||||||
revision = "c259ed6f2e751582d4586c2d3a4e1cb98e526068"
|
revision = "3444316bdeef6a0533db7cabcc1a5152b8b7311d"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
|
@ -963,7 +963,7 @@
|
||||||
"tools/dep-collector",
|
"tools/dep-collector",
|
||||||
]
|
]
|
||||||
pruneopts = "UT"
|
pruneopts = "UT"
|
||||||
revision = "9363d2f4cafd2ad3c1bfc925f447c91a1776be00"
|
revision = "98a7b3bbed2dda25a17c14d1d59d24dab3b15e41"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
digest = "1:8730e0150dfb2b7e173890c8b9868e7a273082ef8e39f4940e3506a481cf895c"
|
digest = "1:8730e0150dfb2b7e173890c8b9868e7a273082ef8e39f4940e3506a481cf895c"
|
||||||
|
|
|
@ -1296,14 +1296,14 @@
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
digest = "1:85fe0cadd6ab83f3d7f948c60b6d422dc9cd16664246249968dab5d828ae8dfd"
|
digest = "1:6e839a9b4183b0fbf0df609fe9a6d226c941fa9221052ba0075b25cb353588a5"
|
||||||
name = "knative.dev/test-infra"
|
name = "knative.dev/test-infra"
|
||||||
packages = [
|
packages = [
|
||||||
"scripts",
|
"scripts",
|
||||||
"tools/dep-collector",
|
"tools/dep-collector",
|
||||||
]
|
]
|
||||||
pruneopts = "UT"
|
pruneopts = "UT"
|
||||||
revision = "2c4cd9df33c648a86d95bdd4119386cba04cde56"
|
revision = "9363d2f4cafd2ad3c1bfc925f447c91a1776be00"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
digest = "1:8730e0150dfb2b7e173890c8b9868e7a273082ef8e39f4940e3506a481cf895c"
|
digest = "1:8730e0150dfb2b7e173890c8b9868e7a273082ef8e39f4940e3506a481cf895c"
|
||||||
|
|
|
@ -1,28 +1,48 @@
|
||||||
# "Pod Spec"-able Bindings
|
# "Pod Spec"-able Bindings
|
||||||
|
|
||||||
The `psbinding` package provides facilities to make authoring [Bindings](https://docs.google.com/document/d/1t5WVrj2KQZ2u5s0LvIUtfHnSonBv5Vcv8Gl2k5NXrCQ/edit) whose subjects adhere to [`duckv1.PodSpecable`](https://github.com/knative/pkg/blob/master/apis/duck/v1/podspec_types.go#L32) easier. The Bindings doc mentions two key elements of the controller architecture:
|
The `psbinding` package provides facilities to make authoring
|
||||||
|
[Bindings](https://docs.google.com/document/d/1t5WVrj2KQZ2u5s0LvIUtfHnSonBv5Vcv8Gl2k5NXrCQ/edit)
|
||||||
|
whose subjects adhere to
|
||||||
|
[`duckv1.PodSpecable`](https://github.com/knative/pkg/blob/master/apis/duck/v1/podspec_types.go#L32)
|
||||||
|
easier. The Bindings doc mentions two key elements of the controller
|
||||||
|
architecture:
|
||||||
|
|
||||||
1. The standard controller,
|
1. The standard controller,
|
||||||
1. The mutating webhook (or "admission controller")
|
1. The mutating webhook (or "admission controller")
|
||||||
|
|
||||||
This package provides facilities for bootstrapping both of these elements. To leverage the `psbinding` package, folks should adjust their Binding types to implement `psbinding.Bindable`, which contains a variety of methods that will look familiar to Knative controller authors with two new key methods: `Do` and `Undo` (aka the "mutation" methods).
|
This package provides facilities for bootstrapping both of these elements. To
|
||||||
|
leverage the `psbinding` package, folks should adjust their Binding types to
|
||||||
|
implement `psbinding.Bindable`, which contains a variety of methods that will
|
||||||
|
look familiar to Knative controller authors with two new key methods: `Do` and
|
||||||
|
`Undo` (aka the "mutation" methods).
|
||||||
|
|
||||||
The mutation methods on the Binding take in `(context.Context, *duckv1.WithPod)`, and are expected to alter the `*duckv1.WithPod` appropriately to achieve the semantics of the Binding. So for example, if the Binding's runtime contract is the inclusion of a new environment variable `FOO` with some value extracted from the Binding's `spec` then in `Do()` the `duckv1.WithPod` would be altered so that each of the `containers:` contains:
|
The mutation methods on the Binding take in
|
||||||
|
`(context.Context, *duckv1.WithPod)`, and are expected to alter the
|
||||||
|
`*duckv1.WithPod` appropriately to achieve the semantics of the Binding. So for
|
||||||
|
example, if the Binding's runtime contract is the inclusion of a new environment
|
||||||
|
variable `FOO` with some value extracted from the Binding's `spec` then in
|
||||||
|
`Do()` the `duckv1.WithPod` would be altered so that each of the `containers:`
|
||||||
|
contains:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
env:
|
env:
|
||||||
- name: "FOO"
|
- name: "FOO"
|
||||||
value: "<from Binding spec>"
|
value: "<from Binding spec>"
|
||||||
```
|
```
|
||||||
|
|
||||||
... and `Undo()` would remove these variables. `Do` is invoked for active Bindings, and `Undo` is invoked when they are being deleted, but their subjects remain.
|
... and `Undo()` would remove these variables. `Do` is invoked for active
|
||||||
|
Bindings, and `Undo` is invoked when they are being deleted, but their subjects
|
||||||
|
remain.
|
||||||
|
|
||||||
|
We will walk through a simple example Binding whose runtime contract is to mount
|
||||||
We will walk through a simple example Binding whose runtime contract is to mount secrets for talking to Github under `/var/bindings/github`.
|
secrets for talking to Github under `/var/bindings/github`.
|
||||||
[See also](https://github.com/mattmoor/bindings#githubbinding) on which this is based.
|
[See also](https://github.com/mattmoor/bindings#githubbinding) on which this is
|
||||||
|
based.
|
||||||
|
|
||||||
### `Do` and `Undo`
|
### `Do` and `Undo`
|
||||||
|
|
||||||
The `Undo` method itself is simply: remove the named secret volume and any mounts of it:
|
The `Undo` method itself is simply: remove the named secret volume and any
|
||||||
|
mounts of it:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
func (fb *GithubBinding) Undo(ctx context.Context, ps *duckv1.WithPod) {
|
func (fb *GithubBinding) Undo(ctx context.Context, ps *duckv1.WithPod) {
|
||||||
|
@ -56,7 +76,8 @@ func (fb *GithubBinding) Undo(ctx context.Context, ps *duckv1.WithPod) {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
The `Do` method is the dual of this: ensure that the volume exists, and all containers have it mounted.
|
The `Do` method is the dual of this: ensure that the volume exists, and all
|
||||||
|
containers have it mounted.
|
||||||
|
|
||||||
```go
|
```go
|
||||||
func (fb *GithubBinding) Do(ctx context.Context, ps *duckv1.WithPod) {
|
func (fb *GithubBinding) Do(ctx context.Context, ps *duckv1.WithPod) {
|
||||||
|
@ -91,11 +112,14 @@ func (fb *GithubBinding) Do(ctx context.Context, ps *duckv1.WithPod) {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
> Note: if additional context is needed to perform the mutation, then it may be attached-to / extracted-from the supplied `context.Context`.
|
> Note: if additional context is needed to perform the mutation, then it may be
|
||||||
|
> attached-to / extracted-from the supplied `context.Context`.
|
||||||
|
|
||||||
### The standard controller
|
### The standard controller
|
||||||
|
|
||||||
For simple Bindings (such as our `GithubBinding`), we should be able to implement our `*controller.Impl` by directly leveraging `*psbinding.BaseReconciler` to fully implement reconciliation.
|
For simple Bindings (such as our `GithubBinding`), we should be able to
|
||||||
|
implement our `*controller.Impl` by directly leveraging
|
||||||
|
`*psbinding.BaseReconciler` to fully implement reconciliation.
|
||||||
|
|
||||||
```go
|
```go
|
||||||
// NewController returns a new GithubBinding reconciler.
|
// NewController returns a new GithubBinding reconciler.
|
||||||
|
@ -142,7 +166,10 @@ func NewController(
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
> Note: if customized reconciliation logic is needed (e.g. synthesizing additional resources), then the `psbinding.BaseReconciler` may be embedded and a custom `Reconcile()` defined, which can still take advantage of the shared `Finalizer` handling, `Status` manipulation or `Subject`-reconciliation.
|
> Note: if customized reconciliation logic is needed (e.g. synthesizing
|
||||||
|
> additional resources), then the `psbinding.BaseReconciler` may be embedded and
|
||||||
|
> a custom `Reconcile()` defined, which can still take advantage of the shared
|
||||||
|
> `Finalizer` handling, `Status` manipulation or `Subject`-reconciliation.
|
||||||
|
|
||||||
### The mutating webhook
|
### The mutating webhook
|
||||||
|
|
||||||
|
@ -192,7 +219,8 @@ func ListAll(ctx context.Context, handler cache.ResourceEventHandler) psbinding.
|
||||||
|
|
||||||
### Putting it together
|
### Putting it together
|
||||||
|
|
||||||
With the above defined, then in our webhook's `main.go` we invoke `sharedmain.MainWithContext` passing the additional controller constructors:
|
With the above defined, then in our webhook's `main.go` we invoke
|
||||||
|
`sharedmain.MainWithContext` passing the additional controller constructors:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
sharedmain.MainWithContext(ctx, "webhook",
|
sharedmain.MainWithContext(ctx, "webhook",
|
||||||
|
|
Loading…
Reference in New Issue