Refactor Admin UI to use unified IAM storage and add Shutdown hook

This commit is contained in:
Chris Lu
2026-01-23 20:27:53 -08:00
parent 81009c1a81
commit e559b8df37
2 changed files with 11 additions and 20 deletions

View File

@@ -1,7 +1,6 @@
package dash package dash
import ( import (
"bytes"
"context" "context"
"fmt" "fmt"
"net/http" "net/http"
@@ -14,11 +13,9 @@ import (
"github.com/seaweedfs/seaweedfs/weed/admin/maintenance" "github.com/seaweedfs/seaweedfs/weed/admin/maintenance"
"github.com/seaweedfs/seaweedfs/weed/cluster" "github.com/seaweedfs/seaweedfs/weed/cluster"
"github.com/seaweedfs/seaweedfs/weed/credential" "github.com/seaweedfs/seaweedfs/weed/credential"
"github.com/seaweedfs/seaweedfs/weed/filer"
"github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/glog"
"github.com/seaweedfs/seaweedfs/weed/pb" "github.com/seaweedfs/seaweedfs/weed/pb"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
"github.com/seaweedfs/seaweedfs/weed/pb/iam_pb"
"github.com/seaweedfs/seaweedfs/weed/pb/master_pb" "github.com/seaweedfs/seaweedfs/weed/pb/master_pb"
"github.com/seaweedfs/seaweedfs/weed/pb/mq_pb" "github.com/seaweedfs/seaweedfs/weed/pb/mq_pb"
"github.com/seaweedfs/seaweedfs/weed/pb/schema_pb" "github.com/seaweedfs/seaweedfs/weed/pb/schema_pb"
@@ -518,24 +515,11 @@ func (s *AdminServer) DeleteS3Bucket(bucketName string) error {
// GetObjectStoreUsers retrieves object store users from identity.json // GetObjectStoreUsers retrieves object store users from identity.json
func (s *AdminServer) GetObjectStoreUsers(ctx context.Context) ([]ObjectStoreUser, error) { func (s *AdminServer) GetObjectStoreUsers(ctx context.Context) ([]ObjectStoreUser, error) {
s3cfg := &iam_pb.S3ApiConfiguration{} if s.credentialManager == nil {
return []ObjectStoreUser{}, nil
// Load IAM configuration from filer }
err := s.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error {
var buf bytes.Buffer
if err := filer.ReadEntry(nil, client, filer.IamConfigDirectory, filer.IamIdentityFile, &buf); err != nil {
if err == filer_pb.ErrNotFound {
// If file doesn't exist, return empty configuration
return nil
}
return err
}
if buf.Len() > 0 {
return filer.ParseS3ConfigurationFromBytes(buf.Bytes(), s3cfg)
}
return nil
})
s3cfg, err := s.credentialManager.LoadConfiguration(ctx)
if err != nil { if err != nil {
glog.Errorf("Failed to load IAM configuration: %v", err) glog.Errorf("Failed to load IAM configuration: %v", err)
return []ObjectStoreUser{}, nil // Return empty list instead of error for UI return []ObjectStoreUser{}, nil // Return empty list instead of error for UI
@@ -1827,6 +1811,11 @@ func (s *AdminServer) Shutdown() {
glog.Errorf("Failed to stop worker gRPC server: %v", err) glog.Errorf("Failed to stop worker gRPC server: %v", err)
} }
// Shutdown credential manager
if s.credentialManager != nil {
s.credentialManager.Shutdown()
}
glog.V(1).Infof("Admin server shutdown complete") glog.V(1).Infof("Admin server shutdown complete")
} }

View File

@@ -368,6 +368,8 @@ func startAdminServer(ctx context.Context, options AdminOptions, enableUI bool)
return fmt.Errorf("admin server forced to shutdown: %w", err) return fmt.Errorf("admin server forced to shutdown: %w", err)
} }
adminServer.Shutdown()
return nil return nil
} }