mirror of
https://github.com/imjasonh/client-go2
synced 2026-07-16 12:12:07 +00:00
update readme
Signed-off-by: Jason Hall <jason@chainguard.dev>
This commit is contained in:
parent
4675498f7c
commit
63505cf9fd
1 changed files with 13 additions and 56 deletions
69
README.md
69
README.md
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
[](https://github.com/imjasonh/client-go2/actions/workflows/build.yaml)
|
[](https://github.com/imjasonh/client-go2/actions/workflows/build.yaml)
|
||||||
|
|
||||||
This is an experimental type-parameter-aware client that wraps [`k8s.io/client-go/rest`](https://pkg.go.dev/k8s.io/client-go/rest).
|
This is an experimental type-parameter-aware client that wraps [`k8s.io/client-go/rest`](https://pkg.go.dev/k8s.io/client-go/rest), in [about 500 lines of mostly-vibe-coded Go](./generic/client.go).
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
|
|
@ -14,67 +14,24 @@ This is an experimental type-parameter-aware client that wraps [`k8s.io/client-g
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
```go
|
See [the example](./main.go)
|
||||||
// Create a client that automatically infers the GVR from the type
|
|
||||||
podClient, err := generic.NewClient[*corev1.Pod](config)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// List pods in a namespace
|
|
||||||
pods, err := podClient.List(ctx, "kube-system")
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create a ConfigMap
|
|
||||||
cmClient, err := generic.NewClient[*corev1.ConfigMap](config)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
cm, err = cmClient.Create(ctx, "default", &corev1.ConfigMap{
|
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
|
||||||
Name: "my-config",
|
|
||||||
},
|
|
||||||
Data: map[string]string{
|
|
||||||
"key": "value",
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
// If you need to specify a custom GVR, use NewClientGVR
|
|
||||||
customClient := generic.NewClientGVR[*corev1.Pod](customGVR, config)
|
|
||||||
```
|
|
||||||
|
|
||||||
## Running the Example
|
|
||||||
|
|
||||||
```
|
|
||||||
$ go run ./
|
|
||||||
2025/07/23 11:23:10 LISTING PODS
|
|
||||||
2025/07/23 11:23:10 - coredns-674b8bbfcf-ddcww
|
|
||||||
2025/07/23 11:23:10 - coredns-674b8bbfcf-dqqx5
|
|
||||||
2025/07/23 11:23:10 - etcd-kind-control-plane
|
|
||||||
2025/07/23 11:23:10 - kindnet-tkf6l
|
|
||||||
2025/07/23 11:23:10 - kube-apiserver-kind-control-plane
|
|
||||||
2025/07/23 11:23:10 - kube-controller-manager-kind-control-plane
|
|
||||||
2025/07/23 11:23:10 - kube-proxy-76tcd
|
|
||||||
2025/07/23 11:23:10 - kube-scheduler-kind-control-plane
|
|
||||||
...
|
|
||||||
```
|
|
||||||
|
|
||||||
## Testing
|
## Testing
|
||||||
|
|
||||||
Run unit tests:
|
Unit tests against a mock REST client:
|
||||||
```bash
|
|
||||||
go test ./generic
|
```
|
||||||
|
make test
|
||||||
```
|
```
|
||||||
|
|
||||||
Run e2e tests (requires a Kubernetes cluster):
|
End-to-end tests against a real K8s cluster:
|
||||||
```bash
|
|
||||||
go test ./generic -tags=e2e
|
```
|
||||||
|
make e2e
|
||||||
```
|
```
|
||||||
|
|
||||||
# THIS IS AN EXPERIMENT
|
# ⚠️ THIS IS AN EXPERIMENT
|
||||||
|
|
||||||
|
This is just for demo purposes.
|
||||||
|
|
||||||
None of this is anywhere near set in stone.
|
|
||||||
The name `client-go2` is a placeholder, and a joke.
|
The name `client-go2` is a placeholder, and a joke.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue