use cluster endpoint API to detect erasure coded setup (#1057)
This commit is contained in:
@@ -20,6 +20,7 @@ import (
|
||||
"crypto/x509"
|
||||
"io/ioutil"
|
||||
"net"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -59,27 +60,19 @@ func GetMinIORegion() string {
|
||||
}
|
||||
|
||||
func getMinIOEndpoint() string {
|
||||
server := getMinIOServer()
|
||||
if strings.Contains(server, "://") {
|
||||
parts := strings.Split(server, "://")
|
||||
if len(parts) > 1 {
|
||||
server = parts[1]
|
||||
}
|
||||
u, err := url.Parse(getMinIOServer())
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return server
|
||||
return u.Host
|
||||
}
|
||||
|
||||
func getMinIOEndpointIsSecure() bool {
|
||||
server := getMinIOServer()
|
||||
if strings.Contains(server, "://") {
|
||||
parts := strings.Split(server, "://")
|
||||
if len(parts) > 1 {
|
||||
if parts[0] == "https" {
|
||||
return true
|
||||
}
|
||||
}
|
||||
u, err := url.Parse(getMinIOServer())
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return false
|
||||
return u.Scheme == "https"
|
||||
}
|
||||
|
||||
// GetHostname gets console hostname set on env variable,
|
||||
|
||||
@@ -58,7 +58,6 @@ func configureFlags(api *operations.ConsoleAPI) {
|
||||
}
|
||||
|
||||
func configureAPI(api *operations.ConsoleAPI) http.Handler {
|
||||
|
||||
// Applies when the "x-token" header is set
|
||||
api.KeyAuth = func(token string, scopes []string) (*models.Principal, error) {
|
||||
// we are validating the session token by decrypting the claims inside, if the operation succeed that means the jwt
|
||||
|
||||
@@ -287,11 +287,11 @@ func getBucketVersionedResponse(session *models.Principal, bucketName string) (*
|
||||
return bucketVResponse, nil
|
||||
}
|
||||
|
||||
var serverBackend madmin.BackendInfo
|
||||
var serverBackendType madmin.BackendType
|
||||
var serverBackendOnce sync.Once
|
||||
|
||||
func isErasureBackend() bool {
|
||||
return serverBackend.Type == madmin.Erasure
|
||||
return serverBackendType == madmin.Erasure
|
||||
}
|
||||
|
||||
// getAccountInfo fetches a list of all buckets allowed to that particular client from MinIO Servers
|
||||
@@ -302,7 +302,7 @@ func getAccountInfo(ctx context.Context, client MinioAdmin) ([]*models.Bucket, e
|
||||
}
|
||||
|
||||
serverBackendOnce.Do(func() {
|
||||
serverBackend = info.Server
|
||||
serverBackendType = info.Server.Type
|
||||
})
|
||||
|
||||
var bucketInfos []*models.Bucket
|
||||
|
||||
@@ -17,38 +17,39 @@
|
||||
package restapi
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
||||
"github.com/go-openapi/runtime/middleware"
|
||||
"github.com/minio/console/models"
|
||||
"github.com/minio/console/pkg/acl"
|
||||
"github.com/minio/console/restapi/operations"
|
||||
"github.com/minio/console/restapi/operations/user_api"
|
||||
"github.com/minio/madmin-go"
|
||||
)
|
||||
|
||||
func validateDistributedMode(session *models.Principal) bool {
|
||||
ctx := context.Background()
|
||||
mAdmin, err := NewMinioAdminClient(session)
|
||||
|
||||
// We couldn't create the client, return false
|
||||
func isErasureMode() bool {
|
||||
u, err := url.Parse(getMinIOServer())
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
u.Path = "/minio/health/cluster"
|
||||
|
||||
req, err := http.NewRequest(http.MethodGet, u.String(), nil)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
clnt := GetConsoleHTTPClient()
|
||||
resp, err := clnt.Do(req)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return false
|
||||
}
|
||||
// create a minioClient interface implementation
|
||||
client := AdminClient{Client: mAdmin}
|
||||
|
||||
info, err := client.AccountInfo(ctx)
|
||||
|
||||
// We couldn't retrieve admin information, default to true for legacy reasons
|
||||
// TODO: Revert to false after August 15th 2021
|
||||
if err != nil {
|
||||
return true
|
||||
}
|
||||
|
||||
backendInfo := info.Server
|
||||
|
||||
return backendInfo.Type == madmin.Erasure
|
||||
return resp.Header.Get("x-minio-write-quorum") != ""
|
||||
}
|
||||
|
||||
func registerSessionHandlers(api *operations.ConsoleAPI) {
|
||||
@@ -74,7 +75,7 @@ func getSessionResponse(session *models.Principal) (*models.SessionResponse, *mo
|
||||
Features: getListOfEnabledFeatures(),
|
||||
Status: models.SessionResponseStatusOk,
|
||||
Operator: false,
|
||||
DistributedMode: validateDistributedMode(session),
|
||||
DistributedMode: isErasureMode(),
|
||||
}
|
||||
return sessionResp, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user