Browse Source

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

pull/8103/head
Chris Lu 2 days ago
parent
commit
e559b8df37
  1. 29
      weed/admin/dash/admin_server.go
  2. 2
      weed/command/admin.go

29
weed/admin/dash/admin_server.go

@ -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{}
// 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
})
if s.credentialManager == nil {
return []ObjectStoreUser{}, 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")
} }

2
weed/command/admin.go

@ -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
} }

Loading…
Cancel
Save