https://github.com/k-cloud-labs/pidalio
A transport middleware for client-go to mutate k8s resource before send to kube-apiserver
https://github.com/k-cloud-labs/pidalio
hook middleware mutate
Last synced: 6 months ago
JSON representation
A transport middleware for client-go to mutate k8s resource before send to kube-apiserver
- Host: GitHub
- URL: https://github.com/k-cloud-labs/pidalio
- Owner: k-cloud-labs
- License: apache-2.0
- Created: 2022-04-23T03:43:52.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2023-01-17T08:00:30.000Z (over 3 years ago)
- Last Synced: 2024-06-20T15:01:43.394Z (about 2 years ago)
- Topics: hook, middleware, mutate
- Language: Go
- Homepage:
- Size: 107 KB
- Stars: 9
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# pidalio

[](https://github.com/k-cloud-labs/pidalio/actions?query=workflow%3Abuild)
[](https://codecov.io/gh/k-cloud-labs/pidalio)
[](https://goreportcard.com/report/github.com/k-cloud-labs/pidalio)
[](https://pkg.go.dev/github.com/k-cloud-labs/pidalio)
A transport middleware working in clientside for client-go to mutate any k8s resource via (Cluster)OverridePolicy.
If you want to use it in serverside as a webhook, please use https://github.com/k-cloud-labs/kinitiras.
## Quick Start
### Apply crd files to your cluster
```shell
kubectl apply -f https://raw.githubusercontent.com/k-cloud-labs/pkg/main/charts/_crds/bases/policy.kcloudlabs.io_overridepolicies.yaml
kubectl apply -f https://raw.githubusercontent.com/k-cloud-labs/pkg/main/charts/_crds/bases/policy.kcloudlabs.io_clusteroverridepolicies.yaml
```
OverridePolicy is used to mutate object in the same namespace.
ClusterOverridePolicy can mutate object in any namespace.
For cluster scoped resource:
- Apply ClusterOverridePolicy by policies name in ascending;
For namespaced scoped resource, apply order is:
- First apply ClusterOverridePolicy;
- Then apply OverridePolicy;
### Add transport middleware
What you need to do is just call `RegisterPolicyTransport` func after `rest.Config` initialized and before client to initialize.
```go
import(
"github.com/k-cloud-labs/pidalio"
)
// the black magic code
pidalio.RegisterPolicyTransport(config, make(chan struct{}))
```
## Feature
- [x] Support mutate k8s resource by (Cluster)OverridePolicy via plaintext jsonpatch.
- [x] Support mutate k8s resource by (Cluster)OverridePolicy programmable via [CUE](https://cuelang.org/).
- [x] Support render template to cue in transport(even policy is not created by others)