Skip to content

Commit 1bd7c5d

Browse files
committed
fix: api token check for AzureOpenAI provider
Signed-off-by: Haoyu Sun <[email protected]>
1 parent c602c0a commit 1bd7c5d

File tree

2 files changed

+43
-4
lines changed

2 files changed

+43
-4
lines changed

internal/controller/ols_app_server_assets.go

+12-3
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,18 @@ func (r *OLSConfigReconciler) checkLLMCredentials(ctx context.Context, cr *olsv1
120120
}
121121
return fmt.Errorf("failed to get LLM provider %s credential secret %s: %w", provider.Name, provider.CredentialsSecretRef.Name, err)
122122
}
123-
// secret must contain a key named "apitoken"
124-
if _, ok := secret.Data["apitoken"]; !ok {
125-
return fmt.Errorf("LLM provider %s credential secret %s missing key 'apitoken'", provider.Name, provider.CredentialsSecretRef.Name)
123+
if provider.Type == AzureOpenAIType {
124+
// Azure OpenAI secret must contain 3 keys named "client_id", "tenant_id", "client_secret"
125+
for _, key := range []string{"client_id", "tenant_id", "client_secret"} {
126+
if _, ok := secret.Data[key]; !ok {
127+
return fmt.Errorf("LLM provider %s credential secret %s missing key '%s'", provider.Name, provider.CredentialsSecretRef.Name, key)
128+
}
129+
}
130+
} else {
131+
// Other providers (e.g. WatsonX, OpenAI) must contain a key named "apikey"
132+
if _, ok := secret.Data["apitoken"]; !ok {
133+
return fmt.Errorf("LLM provider %s credential secret %s missing key 'apitoken'", provider.Name, provider.CredentialsSecretRef.Name)
134+
}
126135
}
127136
}
128137
return nil

internal/controller/ols_app_server_reconciliator_test.go

+31-1
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ var _ = Describe("App server reconciliator", Ordered, func() {
419419
})
420420

421421
It("should return error when the LLM provider token secret does not have required keys", func() {
422-
By("Reconcile after modifying the token secret")
422+
By("General provider: the token secret miss 'apitoken' key")
423423
secret, _ := generateRandomSecret()
424424
// delete the required key "apitoken"
425425
delete(secret.Data, "apitoken")
@@ -428,6 +428,36 @@ var _ = Describe("App server reconciliator", Ordered, func() {
428428
err = reconciler.reconcileAppServer(ctx, cr)
429429
Expect(err).To(HaveOccurred())
430430
Expect(err.Error()).To(ContainSubstring("missing key 'apitoken'"))
431+
432+
By("AzureOpenAI provider: the token secret miss 'clientid', 'tenantid', 'client_secret' key")
433+
secret, _ = generateRandomSecret()
434+
delete(secret.Data, "client_id")
435+
delete(secret.Data, "tenant_id")
436+
delete(secret.Data, "client_secret")
437+
err = k8sClient.Update(ctx, secret)
438+
Expect(err).NotTo(HaveOccurred())
439+
crAzure := cr.DeepCopy()
440+
crAzure.Spec.LLMConfig.Providers[0].Type = AzureOpenAIType
441+
err = reconciler.reconcileAppServer(ctx, crAzure)
442+
Expect(err).To(HaveOccurred())
443+
Expect(err.Error()).To(ContainSubstring("missing key 'client_id'"))
444+
secret.Data["client_id"] = []byte("test-client-id")
445+
err = k8sClient.Update(ctx, secret)
446+
Expect(err).NotTo(HaveOccurred())
447+
err = reconciler.reconcileAppServer(ctx, crAzure)
448+
Expect(err).To(HaveOccurred())
449+
Expect(err.Error()).To(ContainSubstring("missing key 'tenant_id'"))
450+
secret.Data["tenant_id"] = []byte("test-tenant-id")
451+
err = k8sClient.Update(ctx, secret)
452+
Expect(err).NotTo(HaveOccurred())
453+
err = reconciler.reconcileAppServer(ctx, crAzure)
454+
Expect(err).To(HaveOccurred())
455+
Expect(err.Error()).To(ContainSubstring("missing key 'client_secret'"))
456+
secret.Data["client_secret"] = []byte("test-client-secret")
457+
err = k8sClient.Update(ctx, secret)
458+
Expect(err).NotTo(HaveOccurred())
459+
err = reconciler.reconcileAppServer(ctx, crAzure)
460+
Expect(err).NotTo(HaveOccurred())
431461
})
432462

433463
})

0 commit comments

Comments
 (0)