Skip to content

Commit ed4b45f

Browse files
authored
Merge pull request #29 from kahirokunn/add-controller-runtime-example
Add controller-runtime client example and rename credentialProviders to accessProviders
2 parents 2e3fabb + f64e992 commit ed4b45f

File tree

4 files changed

+33
-11
lines changed

4 files changed

+33
-11
lines changed

cmd/secretreader-plugin/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ Use the following provider config to exec the secret-reader plugin.
5757
}
5858
```
5959

60-
### Note: `ClusterProfile.status.credentialProviders[].cluster.extensions`
60+
### Note: `ClusterProfile.status.accessProviders[].cluster.extensions`
6161

6262
- Required: set `extensions[].name` to `client.authentication.k8s.io/exec`.
6363
- The library reads only the `extension` field of that entry and passes it through to `ExecCredential.Spec.Cluster.Config`.
@@ -67,7 +67,7 @@ Example:
6767

6868
```yaml
6969
status:
70-
credentialProviders:
70+
accessProviders:
7171
- name: secretreader
7272
cluster:
7373
server: https://<spoke-server>

examples/controller-example/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ This example automatically sets up the following, stores the spoke cluster token
55
- Create a hub cluster and a spoke cluster with kind
66
- On the spoke, create a ServiceAccount and ClusterRole/Binding that can list Pods and issue a token
77
- On the hub, create a Secret with the token in `data.token`
8-
- On the hub, create a `ClusterProfile` with spoke information (set `secretreader` in `status.credentialProviders`)
8+
- On the hub, create a `ClusterProfile` with spoke information (set `secretreader` in `status.accessProviders`)
99

1010
## Prerequisites
1111

@@ -43,15 +43,15 @@ KUBECONFIG=./examples/controller-example/hub.kubeconfig ./examples/controller-ex
4343

4444
## Note: ClusterProfile extensions
4545

46-
- Required: set `status.credentialProviders[].cluster.extensions[].name` to `client.authentication.k8s.io/exec`.
46+
- Required: set `status.accessProviders[].cluster.extensions[].name` to `client.authentication.k8s.io/exec`.
4747
- The library reads only the `extension` field of that entry (arbitrary JSON). Other `extensions` entries are ignored.
4848
- That `extension` is passed through to `ExecCredential.Spec.Cluster.Config`. The `secretreader` plugin uses `clusterName` in that object.
4949

5050
Example (to be merged into `ClusterProfile.status`):
5151

5252
```yaml
5353
status:
54-
credentialProviders:
54+
accessProviders:
5555
- name: secretreader
5656
cluster:
5757
server: https://<spoke-server>

examples/controller-example/main.go

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,20 @@ import (
55
"flag"
66
"log"
77

8+
corev1 "k8s.io/api/core/v1"
89
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
10+
"k8s.io/apimachinery/pkg/runtime"
911
k8sclient "k8s.io/client-go/kubernetes"
12+
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
1013
"k8s.io/client-go/tools/clientcmd"
1114
ciaclient "sigs.k8s.io/cluster-inventory-api/client/clientset/versioned"
1215
"sigs.k8s.io/cluster-inventory-api/pkg/credentials"
16+
crclient "sigs.k8s.io/controller-runtime/pkg/client"
1317
)
1418

1519
func main() {
1620
// Flags
17-
credentialsProviders := credentials.SetupProviderFileFlag()
21+
accessProviders := credentials.SetupProviderFileFlag()
1822
namespace := flag.String("namespace", "default", "Namespace of the ClusterProfile on the hub cluster")
1923
clusterProfileName := flag.String("clusterprofile", "", "Name of the ClusterProfile to target (required)")
2024
flag.Parse()
@@ -24,7 +28,7 @@ func main() {
2428
}
2529

2630
// Load providers file
27-
cpCreds, err := credentials.NewFromFile(*credentialsProviders)
31+
cpCreds, err := credentials.NewFromFile(*accessProviders)
2832
if err != nil {
2933
log.Fatalf("Got error reading credentials providers: %v", err)
3034
}
@@ -52,7 +56,7 @@ func main() {
5256
log.Fatalf("Got error generating spoke rest.Config: %v", err)
5357
}
5458

55-
// Create a Kubernetes client for the spoke cluster and list pods
59+
// Example using client-go: Create a Kubernetes client for the spoke cluster and list pods
5660
mclient, err := k8sclient.NewForConfig(spokeConfig)
5761
if err != nil {
5862
log.Fatalf("failed to create spoke client: %v", err)
@@ -61,8 +65,26 @@ func main() {
6165
if err != nil {
6266
log.Fatalf("failed to list pods on spoke: %v", err)
6367
}
64-
log.Printf("Listed %d pods on spoke cluster", len(plist.Items))
68+
log.Printf("[client-go] Listed %d pods on spoke cluster", len(plist.Items))
6569
for _, p := range plist.Items {
66-
log.Printf("pod: %s/%s", p.Namespace, p.Name)
70+
log.Printf("[client-go] pod: %s/%s", p.Namespace, p.Name)
71+
}
72+
73+
// Example using controller-runtime client
74+
scheme := runtime.NewScheme()
75+
if err := clientgoscheme.AddToScheme(scheme); err != nil {
76+
log.Fatalf("failed to add core scheme: %v", err)
77+
}
78+
crc, err := crclient.New(spokeConfig, crclient.Options{Scheme: scheme})
79+
if err != nil {
80+
log.Fatalf("failed to create controller-runtime client: %v", err)
81+
}
82+
var crPodList corev1.PodList
83+
if err := crc.List(context.Background(), &crPodList); err != nil {
84+
log.Fatalf("failed to list pods with controller-runtime: %v", err)
85+
}
86+
log.Printf("[controller-runtime] Listed %d pods on spoke cluster", len(crPodList.Items))
87+
for _, p := range crPodList.Items {
88+
log.Printf("[controller-runtime] pod: %s/%s", p.Namespace, p.Name)
6789
}
6890
}

examples/controller-example/setup-kind-demo.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ EOF
125125
STATUS_PATCH=$(cat <<EOF
126126
{
127127
"status": {
128-
"credentialProviders": [
128+
"accessProviders": [
129129
{
130130
"name": "secretreader",
131131
"cluster": {

0 commit comments

Comments
 (0)