Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 1 addition & 9 deletions clients/ui/bff/internal/api/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -178,14 +178,6 @@ func NewApp(cfg config.EnvConfig, logger *slog.Logger) (*App, error) {
return nil, fmt.Errorf("failed to create ModelRegistry Catalog client: %w", err)
}

var modelCatalogSettingsRepository repositories.ModelCatalogSettingsRepositoryInterface

if cfg.MockK8Client {
modelCatalogSettingsRepository, err = mocks.NewModelCatalogSettingsRepository(logger)
} else {
modelCatalogSettingsRepository, err = repositories.NewModelCatalogSettingsRepository(logger)
}

if err != nil {
return nil, fmt.Errorf("failed to create ModelCatalogSettings client: %w", err)
}
Expand All @@ -194,7 +186,7 @@ func NewApp(cfg config.EnvConfig, logger *slog.Logger) (*App, error) {
config: cfg,
logger: logger,
kubernetesClientFactory: k8sFactory,
repositories: repositories.NewRepositories(mrClient, modelCatalogClient, modelCatalogSettingsRepository),
repositories: repositories.NewRepositories(mrClient, modelCatalogClient),
testEnv: testEnv,
rootCAs: rootCAs,
}
Expand Down
2 changes: 1 addition & 1 deletion clients/ui/bff/internal/api/app_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ var _ = Describe("Static File serving Test", func() {
}
app := &App{
kubernetesClientFactory: kubernetesMockedStaticClientFactory,
repositories: repositories.NewRepositories(mockMRClient, mockModelCatalogClient, modelCatalogSettingsRepository),
repositories: repositories.NewRepositories(mockMRClient, mockModelCatalogClient),
logger: logger,
config: envConfig,
}
Expand Down
2 changes: 1 addition & 1 deletion clients/ui/bff/internal/api/healthcheck__handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ func TestHealthCheckHandler(t *testing.T) {
app := App{config: config.EnvConfig{
Port: 4000,
},
repositories: repositories.NewRepositories(mockMRClient, mockModelCatalogClient, modelCatalogSettingsRepository),
repositories: repositories.NewRepositories(mockMRClient, mockModelCatalogClient),
}

rr := httptest.NewRecorder()
Expand Down
77 changes: 20 additions & 57 deletions clients/ui/bff/internal/api/model_catalog_settings_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"encoding/json"
"errors"
"fmt"
"github.com/kubeflow/model-registry/ui/bff/internal/mocks"
"net/http"

"github.com/julienschmidt/httprouter"
Expand Down Expand Up @@ -56,26 +57,15 @@ func (app *App) GetCatalogSourceConfigHandler(w http.ResponseWriter, r *http.Req
return
}

client, err := app.kubernetesClientFactory.GetClient(ctx)
if err != nil {
app.serverErrorResponse(w, r, errors.New("catalog client not found"))
return
}

catalogSourceId := ps.ByName(CatalogSourceId)

catalogSourceConfig, err := app.repositories.ModelCatalogSettingsRepository.GetCatalogSourceConfig(ctx, client, namespace, catalogSourceId)

if err != nil {
app.serverErrorResponse(w, r, err)
return
}
// TODO ppadti write the real implementation here
catalogSourceConfig := mocks.CreateSampleCatalogSource(catalogSourceId, "catalog-source-1", "yaml")

modelCatalogSource := ModelCatalogSettingsSourceConfigEnvelope{
Data: catalogSourceConfig,
Data: &catalogSourceConfig,
}

err = app.WriteJSON(w, http.StatusOK, modelCatalogSource, nil)
err := app.WriteJSON(w, http.StatusOK, modelCatalogSource, nil)

if err != nil {
app.serverErrorResponse(w, r, err)
Expand All @@ -92,27 +82,20 @@ func (app *App) CreateCatalogSourceConfigHandler(w http.ResponseWriter, r *http.
return
}

client, err := app.kubernetesClientFactory.GetClient(ctx)
if err != nil {
app.serverErrorResponse(w, r, errors.New("catalog client not found"))
return
}

var envelope ModelCatalogSourcePayloadEnvelope
if err := json.NewDecoder(r.Body).Decode(&envelope); err != nil {
app.serverErrorResponse(w, r, fmt.Errorf("error decoding JSON:: %v", err.Error()))
return
}

newCatalogSource, err := app.repositories.ModelCatalogSettingsRepository.CreateCatalogSourceConfig(ctx, client, namespace, *envelope.Data)

if err != nil {
app.serverErrorResponse(w, r, err)
return
}
var sourceName = envelope.Data.Name
var sourceId = envelope.Data.Id
var sourceType = envelope.Data.Type
// TODO ppadti write the real implementation here
newCatalogSource := mocks.CreateSampleCatalogSource(sourceId, sourceName, sourceType)

modelCatalogSource := ModelCatalogSettingsSourceConfigEnvelope{
Data: newCatalogSource,
Data: &newCatalogSource,
}

w.Header().Set("Location", r.URL.JoinPath(modelCatalogSource.Data.Id).String())
Expand All @@ -133,30 +116,21 @@ func (app *App) UpdateCatalogSourceConfigHandler(w http.ResponseWriter, r *http.
return
}

client, err := app.kubernetesClientFactory.GetClient(ctx)
if err != nil {
app.serverErrorResponse(w, r, errors.New("catalog client not found"))
return
}

var envelope ModelCatalogSourcePayloadEnvelope
if err := json.NewDecoder(r.Body).Decode(&envelope); err != nil {
app.serverErrorResponse(w, r, fmt.Errorf("error decoding JSON:: %v", err.Error()))
return
}

newCatalogSource, err := app.repositories.ModelCatalogSettingsRepository.UpdateCatalogSourceConfig(ctx, client, namespace, *envelope.Data)

if err != nil {
app.serverErrorResponse(w, r, err)
return
}
catalogSourceId := envelope.Data.Id
// TODO ppadti write the real implementation here
newCatalogSource := mocks.CreateSampleCatalogSource(catalogSourceId, "Updated Catalog", "yaml")

modelCatalogSource := ModelCatalogSettingsSourceConfigEnvelope{
Data: newCatalogSource,
Data: &newCatalogSource,
}

err = app.WriteJSON(w, http.StatusOK, modelCatalogSource, nil)
err := app.WriteJSON(w, http.StatusOK, modelCatalogSource, nil)

if err != nil {
app.serverErrorResponse(w, r, err)
Expand All @@ -172,27 +146,16 @@ func (app *App) DeleteCatalogSourceConfigHandler(w http.ResponseWriter, r *http.
return
}

client, err := app.kubernetesClientFactory.GetClient(ctx)
if err != nil {
app.serverErrorResponse(w, r, errors.New("catalog client not found"))
return
}

// this is the temoprary fix to start fronetend development
// TODO ppadti write the real implementation here
catalogSourceId := ps.ByName(CatalogSourceId)

newCatalogSource, err := app.repositories.ModelCatalogSettingsRepository.DeleteCatalogSourceConfig(ctx, client, namespace, catalogSourceId)

if err != nil {
app.serverErrorResponse(w, r, err)
return
}
deletedCatalogSource := mocks.CreateSampleCatalogSource(catalogSourceId, "Updated Catalog", "yaml")

modelCatalogSource := ModelCatalogSettingsSourceConfigEnvelope{
Data: newCatalogSource,
Data: &deletedCatalogSource,
}

err = app.WriteJSON(w, http.StatusOK, modelCatalogSource, nil)
err := app.WriteJSON(w, http.StatusOK, modelCatalogSource, nil)

if err != nil {
app.serverErrorResponse(w, r, err)
Expand Down
2 changes: 1 addition & 1 deletion clients/ui/bff/internal/api/model_registry_handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ var _ = Describe("TestModelRegistryHandler", func() {
By("creating the test app")
testApp := App{
kubernetesClientFactory: kubernetesMockedStaticClientFactory,
repositories: repositories.NewRepositories(mockMRClient, mockModelCatalogClient, modelCatalogSettingsRepository),
repositories: repositories.NewRepositories(mockMRClient, mockModelCatalogClient),
logger: logger,
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ var _ = Describe("TestGroupsHandler", func() {
testApp = App{
config: config.EnvConfig{DeploymentMode: config.DeploymentModeStandalone},
kubernetesClientFactory: kubernetesMockedStaticClientFactory,
repositories: repositories.NewRepositories(mockMRClient, mockModelCatalogClient, modelCatalogSettingsRepository),
repositories: repositories.NewRepositories(mockMRClient, mockModelCatalogClient),
logger: logger,
}
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ var _ = Describe("TestRoleBindingHandlers", func() {
testApp = App{
config: config.EnvConfig{DeploymentMode: config.DeploymentModeStandalone},
kubernetesClientFactory: kubernetesMockedStaticClientFactory,
repositories: repositories.NewRepositories(mockMRClient, mockModelCatalogClient, modelCatalogSettingsRepository),
repositories: repositories.NewRepositories(mockMRClient, mockModelCatalogClient),
logger: logger,
}
})
Expand Down
4 changes: 2 additions & 2 deletions clients/ui/bff/internal/api/namespaces_handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ var _ = Describe("TestNamespacesHandler", func() {
testApp = App{
config: config.EnvConfig{DevMode: true},
kubernetesClientFactory: kubernetesMockedStaticClientFactory,
repositories: repositories.NewRepositories(mockMRClient, mockModelCatalogClient, modelCatalogSettingsRepository),
repositories: repositories.NewRepositories(mockMRClient, mockModelCatalogClient),
logger: logger,
}
})
Expand Down Expand Up @@ -137,7 +137,7 @@ var _ = Describe("TestNamespacesHandler", func() {
testApp = App{
config: config.EnvConfig{DevMode: true},
kubernetesClientFactory: kubernetesMockedTokenClientFactory,
repositories: repositories.NewRepositories(mockMRClient, mockModelCatalogClient, modelCatalogSettingsRepository),
repositories: repositories.NewRepositories(mockMRClient, mockModelCatalogClient),
logger: logger,
}
})
Expand Down
3 changes: 0 additions & 3 deletions clients/ui/bff/internal/api/suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ var (
kubernetesMockedStaticClientFactory k8s.KubernetesClientFactory
mockMRClient *mocks.ModelRegistryClientMock
mockModelCatalogClient *mocks.ModelCatalogClientMock
modelCatalogSettingsRepository *mocks.ModelCatalogSettingsRepositoryMock
ctx context.Context
cancel context.CancelFunc
logger *slog.Logger
Expand Down Expand Up @@ -70,8 +69,6 @@ var _ = BeforeSuite(func() {
mockModelCatalogClient, err = mocks.NewModelCatalogClientMock(nil)
Expect(err).NotTo(HaveOccurred())

modelCatalogSettingsRepository, err = mocks.NewModelCatalogSettingsRepository(nil)
Expect(err).NotTo(HaveOccurred())
})

var _ = AfterSuite(func() {
Expand Down
6 changes: 1 addition & 5 deletions clients/ui/bff/internal/api/test_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,6 @@ func setupApiTest[T any](method string, url string, body interface{}, k8Factory
if err != nil {
return *new(T), nil, err
}
modelCatalogSettingsRepository, err := mocks.NewModelCatalogSettingsRepository(nil)
if err != nil {
return *new(T), nil, err
}

mockClient := new(mocks.MockHTTPClient)

Expand All @@ -44,7 +40,7 @@ func setupApiTest[T any](method string, url string, body interface{}, k8Factory
cfg.AuthMethod = config.AuthMethodUser
}
testApp := App{
repositories: repositories.NewRepositories(mockMRClient, mockModelCatalogClient, modelCatalogSettingsRepository),
repositories: repositories.NewRepositories(mockMRClient, mockModelCatalogClient),
kubernetesClientFactory: k8Factory,
logger: slog.Default(),
config: cfg,
Expand Down
2 changes: 1 addition & 1 deletion clients/ui/bff/internal/api/user_handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ var _ = Describe("TestUserHandler", func() {
By("creating the test app")
testApp = App{
kubernetesClientFactory: kubernetesMockedStaticClientFactory,
repositories: repositories.NewRepositories(mockMRClient, mockModelCatalogClient, modelCatalogSettingsRepository),
repositories: repositories.NewRepositories(mockMRClient, mockModelCatalogClient),
logger: logger,
}
})
Expand Down
10 changes: 9 additions & 1 deletion clients/ui/bff/internal/integrations/kubernetes/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,17 @@ package kubernetes

import (
"context"

corev1 "k8s.io/api/core/v1"
)

const ComponentLabelValue = "model-registry"
const ComponentLabelValueCatalog = "model-catalog"

// TODO ppadti double check if the config map key is indeed sources.yaml
const CatalogSourceKey = "sources.yaml"
const CatalogSourceDefaultConfigMapName = "model-catalog-source-config"
const CatalogSourceUserConfigMapName = "model-catalog-sources"

type KubernetesClientInterface interface {
// Service discovery
GetServiceNames(ctx context.Context, namespace string) ([]string, error)
Expand All @@ -30,4 +34,8 @@ type KubernetesClientInterface interface {

// Model Registry Settings
GetGroups(ctx context.Context) ([]string, error)

//Model Catalog Settings
GetAllCatalogSourceConfigs(ctx context.Context, namespace string) (corev1.ConfigMap, corev1.ConfigMap, error)
//TODO ppadti add other methods here
}
Loading
Loading