use cluster endpoint API to detect erasure coded setup (#1057)

This commit is contained in:
Harshavardhana
2021-09-17 23:11:28 -07:00
committed by GitHub
parent 4cc57fe440
commit 00752d2bb1
4 changed files with 34 additions and 41 deletions

View File

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

View File

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

View File

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

View File

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