Skip to content

Commit 85e3c06

Browse files
authored
Merge pull request #50 from aifoundry-org/clientset-passthrough
pass clientset through and keep it
2 parents 402cfa2 + a1b4835 commit 85e3c06

File tree

3 files changed

+20
-19
lines changed

3 files changed

+20
-19
lines changed

pkg/cluster/cluster.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"time"
1111

1212
"github.com/aifoundry-org/oxide-controller/pkg/util"
13+
"k8s.io/client-go/kubernetes"
1314
"tailscale.com/client/tailscale/v2"
1415

1516
"github.com/oxidecomputer/oxide.go/oxide"
@@ -35,6 +36,7 @@ type Cluster struct {
3536
imageParallelism int
3637
tailscaleAPIKey string
3738
tailscaleTailnet string
39+
clientset *kubernetes.Clientset
3840
}
3941

4042
// New creates a new Cluster instance
@@ -309,15 +311,22 @@ func (c *Cluster) ensureClusterExists(ctx context.Context) (newKubeconfig []byte
309311
secrets[secretKeyWorkerCount] = []byte(fmt.Sprintf("%d", c.workerCount))
310312
}
311313

314+
// get a Kubernetes client
315+
clientset, err := getClientset(kubeconfig)
316+
if err != nil {
317+
return nil, fmt.Errorf("unable to get Kubernetes clientset: %w", err)
318+
}
319+
c.clientset = clientset
320+
312321
// ensure we have the namespace we need
313322
namespace := c.namespace
314-
if err := createNamespace(ctx, namespace, c.kubeconfig); err != nil {
323+
if err := createNamespace(ctx, clientset, namespace); err != nil {
315324
return nil, fmt.Errorf("failed to create namespace: %w", err)
316325
}
317326

318327
// save the join token, system ssh key pair, user ssh key to the Kubernetes secret
319328
c.logger.Debugf("Saving secret %s/%s to Kubernetes", namespace, secretName)
320-
if err := saveSecret(ctx, c.logger, namespace, secretName, c.kubeconfig, secrets); err != nil {
329+
if err := saveSecret(ctx, clientset, c.logger, namespace, secretName, secrets); err != nil {
321330
return nil, fmt.Errorf("failed to save secret: %w", err)
322331
}
323332

pkg/cluster/namespace.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,15 @@ import (
77
v1 "k8s.io/api/core/v1"
88
k8serrors "k8s.io/apimachinery/pkg/api/errors"
99
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
10+
"k8s.io/client-go/kubernetes"
1011
)
1112

1213
// createNamespace ensures a namespace exists or creates it.
13-
func createNamespace(ctx context.Context, namespace string, kubeconfig []byte) error {
14-
clientset, err := getClientset(kubeconfig)
15-
if err != nil {
16-
return fmt.Errorf("failed to get clientset: %w", err)
17-
}
18-
14+
func createNamespace(ctx context.Context, clientset *kubernetes.Clientset, namespace string) error {
1915
nsClient := clientset.CoreV1().Namespaces()
2016

2117
// Check if the namespace already exists
22-
_, err = nsClient.Get(ctx, namespace, metav1.GetOptions{})
18+
_, err := nsClient.Get(ctx, namespace, metav1.GetOptions{})
2319
if err == nil {
2420
// Already exists
2521
return nil

pkg/cluster/secret.go

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
v1 "k8s.io/api/core/v1"
1111
"k8s.io/apimachinery/pkg/api/errors"
1212
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
13+
"k8s.io/client-go/kubernetes"
1314
)
1415

1516
// getSecretValue retrieves a specific value from the secret
@@ -73,7 +74,7 @@ func (c *Cluster) SetWorkerCount(ctx context.Context, count int) error {
7374
return fmt.Errorf("failed to get secret: %w", err)
7475
}
7576
secretMap[secretKeyWorkerCount] = []byte(fmt.Sprintf("%d", count))
76-
if err := saveSecret(ctx, c.logger, c.namespace, c.secretName, c.kubeconfig, secretMap); err != nil {
77+
if err := saveSecret(ctx, c.clientset, c.logger, c.namespace, c.secretName, secretMap); err != nil {
7778
return fmt.Errorf("failed to save secret: %w", err)
7879
}
7980
return nil
@@ -103,13 +104,10 @@ func getSecret(ctx context.Context, logger *log.Entry, kubeconfigRaw []byte, sec
103104
}
104105

105106
// saveSecret save a secret to the Kubernetes cluster
106-
func saveSecret(ctx context.Context, logger *log.Entry, namespace, name string, kubeconfig []byte, data map[string][]byte) error {
107-
logger.Debugf("Saving secret %s with kubeconfig size %d and keymap size %d", name, len(kubeconfig), len(data))
107+
func saveSecret(ctx context.Context, clientset *kubernetes.Clientset, logger *log.Entry, namespace, name string, data map[string][]byte) error {
108+
logger.Debugf("Saving secret %s with keymap size %d", name, len(data))
108109

109-
clientset, err := getClientset(kubeconfig)
110-
if err != nil {
111-
return err
112-
}
110+
secretsClient := clientset.CoreV1().Secrets(namespace)
113111

114112
// Prepare the secret object
115113
secret := &v1.Secret{
@@ -121,10 +119,8 @@ func saveSecret(ctx context.Context, logger *log.Entry, namespace, name string,
121119
Type: v1.SecretTypeOpaque,
122120
}
123121

124-
secretsClient := clientset.CoreV1().Secrets(namespace)
125-
126122
// Check if the secret exists
127-
_, err = secretsClient.Get(context.TODO(), name, metav1.GetOptions{})
123+
_, err := secretsClient.Get(context.TODO(), name, metav1.GetOptions{})
128124
if err != nil {
129125
if errors.IsNotFound(err) {
130126
// Create new secret

0 commit comments

Comments
 (0)