Categorygithub.com/minio/madmin-go
2.2.1
Repository: https://github.com/minio/madmin-go.git
Documentation: pkg.go.dev

# README

Golang Admin Client API Reference Slack

The MinIO Admin Golang Client SDK provides APIs to manage MinIO services.

This quickstart guide will show you how to install the MinIO Admin client SDK, connect to MinIO admin service, and provide a walkthrough of a simple file uploader.

This document assumes that you have a working Golang setup.

Initialize MinIO Admin Client object.

MinIO


package main

import (
    "fmt"

    "github.com/minio/madmin-go/v2"
)

func main() {
    // Use a secure connection.
    ssl := true

    // Initialize minio client object.
    mdmClnt, err := madmin.New("your-minio.example.com:9000", "YOUR-ACCESSKEYID", "YOUR-SECRETKEY", ssl)
    if err != nil {
        fmt.Println(err)
        return
    }

    // Fetch service status.
    st, err := mdmClnt.ServerInfo()
    if err != nil {
        fmt.Println(err)
        return
    }
	for _, peerInfo := range serversInfo {
		log.Printf("Node: %s, Info: %v\n", peerInfo.Addr, peerInfo.Data)
	}
}

Service operationsInfo operationsHealing operationsConfig operations
ServiceTraceServerInfoHealGetConfig
ServiceStopStorageInfoSetConfig
ServiceRestartAccountInfo
Top operationsIAM operationsMiscKMS
TopLocksAddUserStartProfilingGetKeyStatus
SetPolicyDownloadProfilingData
ListUsersServerUpdate
AddCannedPolicy

1. Constructor

New(endpoint string, accessKeyID string, secretAccessKey string, ssl bool) (*AdminClient, error)

Initializes a new admin client object.

Parameters

ParamTypeDescription
endpointstringMinIO endpoint.
accessKeyIDstringAccess key for the object storage endpoint.
secretAccessKeystringSecret key for the object storage endpoint.
sslboolSet this value to 'true' to enable secure (HTTPS) access.

2. Service operations

ServiceStatus(ctx context.Context) (ServiceStatusMetadata, error)

Fetch service status, replies disk space used, backend type and total disks offline/online (applicable in distributed mode).

ParamTypeDescription
serviceStatusServiceStatusMetadataRepresents current server status info in following format:
ParamTypeDescription
st.ServerVersion.VersionstringServer version.
st.ServerVersion.CommitIDstringServer commit id.
st.Uptimetime.DurationServer uptime duration in seconds.

Example


   st, err := madmClnt.ServiceStatus(context.Background())
   if err != nil {
   	log.Fatalln(err)
   }
   log.Printf("%#v\n", st)

ServiceRestart(ctx context.Context) error

Sends a service action restart command to MinIO server.

Example

   // To restart the service, restarts all servers in the cluster.
   err := madmClnt.ServiceRestart(context.Background())
   if err != nil {
       log.Fatalln(err)
   }
   log.Println("Success")

ServiceStop(ctx context.Context) error

Sends a service action stop command to MinIO server.

Example

   // To stop the service, stops all servers in the cluster.
   err := madmClnt.ServiceStop(context.Background())
   if err != nil {
       log.Fatalln(err)
   }
   log.Println("Success")

ServiceTrace(ctx context.Context, allTrace bool, doneCh <-chan struct{}) <-chan TraceInfo

Enable HTTP request tracing on all nodes in a MinIO cluster

Example

    doneCh := make(chan struct{})
    defer close(doneCh)
    // listen to all trace including internal API calls
    allTrace := true
    // Start listening on all trace activity.
    traceCh := madmClnt.ServiceTrace(context.Background(), allTrace, doneCh)
    for traceInfo := range traceCh {
        fmt.Println(traceInfo.String())
    }

3. Info operations

ServerInfo(ctx context.Context) ([]ServerInfo, error)

Fetches information for all cluster nodes, such as server properties, storage information, network statistics, etc.

ParamTypeDescription
si.AddrstringAddress of the server the following information is retrieved from.
si.ConnStatsServerConnStatsConnection statistics from the given server.
si.HTTPStatsServerHTTPStatsHTTP connection statistics from the given server.
si.PropertiesServerPropertiesServer properties such as region, notification targets.
ParamTypeDescription
ServerProperties.Uptimetime.DurationTotal duration in seconds since server is running.
ServerProperties.VersionstringCurrent server version.
ServerProperties.CommitIDstringCurrent server commitID.
ServerProperties.RegionstringConfigured server region.
ServerProperties.SQSARN[]stringList of notification target ARNs.
ParamTypeDescription
ServerConnStats.TotalInputBytesuint64Total bytes received by the server.
ServerConnStats.TotalOutputBytesuint64Total bytes sent by the server.
ParamTypeDescription
ServerHTTPStats.TotalHEADStatsServerHTTPMethodStatsTotal statistics regarding HEAD operations
ServerHTTPStats.SuccessHEADStatsServerHTTPMethodStatsTotal statistics regarding successful HEAD operations
ServerHTTPStats.TotalGETStatsServerHTTPMethodStatsTotal statistics regarding GET operations
ServerHTTPStats.SuccessGETStatsServerHTTPMethodStatsTotal statistics regarding successful GET operations
ServerHTTPStats.TotalPUTStatsServerHTTPMethodStatsTotal statistics regarding PUT operations
ServerHTTPStats.SuccessPUTStatsServerHTTPMethodStatsTotal statistics regarding successful PUT operations
ServerHTTPStats.TotalPOSTStatsServerHTTPMethodStatsTotal statistics regarding POST operations
ServerHTTPStats.SuccessPOSTStatsServerHTTPMethodStatsTotal statistics regarding successful POST operations
ServerHTTPStats.TotalDELETEStatsServerHTTPMethodStatsTotal statistics regarding DELETE operations
ServerHTTPStats.SuccessDELETEStatsServerHTTPMethodStatsTotal statistics regarding successful DELETE operations
ParamTypeDescription
ServerHTTPMethodStats.Countuint64Total number of operations.
ServerHTTPMethodStats.AvgDurationstringAverage duration of Count number of operations.
ParamTypeDescription
DriveInfo.UUIDstringUnique ID for each disk provisioned by server format.
DriveInfo.EndpointstringEndpoint location of the remote/local disk.
DriveInfo.StatestringCurrent state of the disk at endpoint.

Example


   serversInfo, err := madmClnt.ServerInfo(context.Background())
   if err != nil {
   	log.Fatalln(err)
   }

   for _, peerInfo := range serversInfo {
   	log.Printf("Node: %s, Info: %v\n", peerInfo.Addr, peerInfo.Data)
   }

StorageInfo(ctx context.Context) (StorageInfo, error)

Fetches Storage information for all cluster nodes.

ParamTypeDescription
storageInfo.Used[]int64Used disk spaces.
storageInfo.Total[]int64Total disk spaces.
storageInfo.Available[]int64Available disk spaces.
StorageInfo.Backendstruct{}Represents backend type embedded structure.
ParamTypeDescription
Backend.TypeBackendTypeType of backend used by the server currently only FS or Erasure.
Backend.OnlineDisksBackendDisksTotal number of disks online per node (only applies to Erasure backend) represented in map[string]int, is empty for FS.
Backend.OfflineDisksBackendDisksTotal number of disks offline per node (only applies to Erasure backend) represented in map[string]int, is empty for FS.
Backend.StandardSCParityintParity disks set for standard storage class, is empty for FS.
Backend.RRSCParityintParity disks set for reduced redundancy storage class, is empty for FS.
Backend.Sets[][]DriveInfoRepresents topology of drives in erasure coded sets.

Example


   storageInfo, err := madmClnt.StorageInfo(context.Background())
   if err != nil {
   	log.Fatalln(err)
   }

   log.Println(storageInfo)

AccountInfo(ctx context.Context) (AccountInfo, error)

Fetches accounting usage information for the current authenticated user

ParamTypeDescription
AccountInfo.AccountNamestringAccount name.
AccountInfo.Buckets[]BucketAccessInfoBucket usage info.
ParamTypeDescription
BucketAccessInfo.NamestringThe name of the current bucket
BucketAccessInfo.Sizeuint64The total size of the current bucket
BucketAccessInfo.Createdtime.TimeBucket creation time
BucketAccessInfo.AccessAccountAccessType of access of the current account
ParamTypeDescription
AccountAccess.ReadboolIndicate if the bucket is readable by the current account name.
AccountAccess.WriteboolIndocate if the bucket is writable by the current account name.

Example


   accountInfo, err := madmClnt.AccountInfo(context.Background())
   if err != nil {
	log.Fatalln(err)
   }

   log.Println(accountInfo)

5. Heal operations

Heal(ctx context.Context, bucket, prefix string, healOpts HealOpts, clientToken string, forceStart bool, forceStop bool) (start HealStartSuccess, status HealTaskStatus, err error)

Start a heal sequence that scans data under given (possible empty) bucket and prefix. The recursive bool turns on recursive traversal under the given path. dryRun does not mutate on-disk data, but performs data validation.

Two heal sequences on overlapping paths may not be initiated.

The progress of a heal should be followed using the same API Heal by providing the clientToken previously obtained from a Heal API. The server accumulates results of the heal traversal and waits for the client to receive and acknowledge them using the status request by providing clientToken.

Example


    opts := madmin.HealOpts{
            Recursive: true,
            DryRun:    false,
    }
    forceStart := false
    forceStop := false
    healPath, err := madmClnt.Heal(context.Background(), "", "", opts, "", forceStart, forceStop)
    if err != nil {
        log.Fatalln(err)
    }
    log.Printf("Heal sequence started at %s", healPath)

HealStartSuccess structure

ParamTypeDescription
s.ClientTokenstringA unique token for a successfully started heal operation, this token is used to request realtime progress of the heal operation.
s.ClientAddressstringAddress of the client which initiated the heal operation, the client address has the form "host:port".
s.StartTimetime.TimeTime when heal was initially started.

HealTaskStatus structure

ParamTypeDescription
s.SummarystringShort status of heal sequence
s.FailureDetailstringError message in case of heal sequence failure
s.HealSettingsHealOptsContains the booleans set in the HealStart call
s.Items[]HealResultItemHeal records for actions performed by server

HealResultItem structure

ParamTypeDescription
ResultIndexint64Index of the heal-result record
TypeHealItemTypeRepresents kind of heal operation in the heal record
BucketstringBucket name
ObjectstringObject name
DetailstringDetails about heal operation
DiskInfo.AvailableOn[]intList of disks on which the healed entity is present and healthy
DiskInfo.HealedOn[]intList of disks on which the healed entity was restored
l

6. Config operations

GetConfig(ctx context.Context) ([]byte, error)

Get current config.json of a MinIO server.

Example

    configBytes, err := madmClnt.GetConfig(context.Background())
    if err != nil {
        log.Fatalf("failed due to: %v", err)
    }

    // Pretty-print config received as json.
    var buf bytes.Buffer
    err = json.Indent(buf, configBytes, "", "\t")
    if err != nil {
        log.Fatalf("failed due to: %v", err)
    }

    log.Println("config received successfully: ", string(buf.Bytes()))

SetConfig(ctx context.Context, config io.Reader) error

Set a new config.json for a MinIO server.

Example

    config := bytes.NewReader([]byte(`config.json contents go here`))
    if err := madmClnt.SetConfig(context.Background(), config); err != nil {
        log.Fatalf("failed due to: %v", err)
    }
    log.Println("SetConfig was successful")

7. Top operations

TopLocks(ctx context.Context) (LockEntries, error)

Get the oldest locks from MinIO server.

Example

    locks, err := madmClnt.TopLocks(context.Background())
    if err != nil {
        log.Fatalf("failed due to: %v", err)
    }

    out, err := json.Marshal(locks)
    if err != nil {
        log.Fatalf("Marshal failed due to: %v", err)
    }

    log.Println("TopLocks received successfully: ", string(out))

8. IAM operations

AddCannedPolicy(ctx context.Context, policyName string, policy *iampolicy.Policy) error

Create a new canned policy on MinIO server.

Example

	policy, err := iampolicy.ParseConfig(strings.NewReader(`{"Version": "2012-10-17","Statement": [{"Action": ["s3:GetObject"],"Effect": "Allow","Resource": ["arn:aws:s3:::my-bucketname/*"],"Sid": ""}]}`))
    if err != nil {
        log.Fatalln(err)
    }

    if err = madmClnt.AddCannedPolicy(context.Background(), "get-only", policy); err != nil {
		log.Fatalln(err)
	}

AddUser(ctx context.Context, user string, secret string) error

Add a new user on a MinIO server.

Example

	if err = madmClnt.AddUser(context.Background(), "newuser", "newstrongpassword"); err != nil {
		log.Fatalln(err)
	}

SetPolicy(ctx context.Context, policyName, entityName string, isGroup bool) error

Enable a canned policy get-only for a given user or group on MinIO server.

Example

	if err = madmClnt.SetPolicy(context.Background(), "get-only", "newuser", false); err != nil {
		log.Fatalln(err)
	}

ListUsers(ctx context.Context) (map[string]UserInfo, error)

Lists all users on MinIO server.

Example

	users, err := madmClnt.ListUsers(context.Background());
    if err != nil {
		log.Fatalln(err)
	}
    for k, v := range users {
        fmt.Printf("User %s Status %s\n", k, v.Status)
    }

9. Misc operations

ServerUpdate(ctx context.Context, updateURL string) (ServerUpdateStatus, error)

Sends a update command to MinIO server, to update MinIO server to latest release. In distributed setup it updates all servers atomically.

Example

   // Updates all servers and restarts all the servers in the cluster.
   // optionally takes an updateURL, which is used to update the binary.
   us, err := madmClnt.ServerUpdate(context.Background(), updateURL)
   if err != nil {
       log.Fatalln(err)
   }
   if us.CurrentVersion != us.UpdatedVersion {
       log.Printf("Updated server version from %s to %s successfully", us.CurrentVersion, us.UpdatedVersion)
   }

StartProfiling(ctx context.Context, profiler string) error

Ask all nodes to start profiling using the specified profiler mode

Example

    startProfilingResults, err = madmClnt.StartProfiling(context.Background(), "cpu")
    if err != nil {
            log.Fatalln(err)
    }
    for _, result := range startProfilingResults {
        if !result.Success {
            log.Printf("Unable to start profiling on node `%s`, reason = `%s`\n", result.NodeName, result.Error)
        } else {
            log.Printf("Profiling successfully started on node `%s`\n", result.NodeName)
        }
    }

DownloadProfilingData(ctx context.Context) ([]byte, error)

Download profiling data of all nodes in a zip format.

Example

    profilingData, err := madmClnt.DownloadProfilingData(context.Background())
    if err != nil {
            log.Fatalln(err)
    }

    profilingFile, err := os.Create("/tmp/profiling-data.zip")
    if err != nil {
            log.Fatal(err)
    }

    if _, err := io.Copy(profilingFile, profilingData); err != nil {
            log.Fatal(err)
    }

    if err := profilingFile.Close(); err != nil {
            log.Fatal(err)
    }

    if err := profilingData.Close(); err != nil {
            log.Fatal(err)
    }

    log.Println("Profiling data successfully downloaded.")

11. KMS

GetKeyStatus(ctx context.Context, keyID string) (*KMSKeyStatus, error)

Requests status information about one particular KMS master key from a MinIO server. The keyID is optional and the server will use the default master key (configured via MINIO_KMS_VAULT_KEY_NAME or MINIO_KMS_MASTER_KEY) if the keyID is empty.

Example

    keyInfo, err := madmClnt.GetKeyStatus(context.Background(), "my-minio-key")
    if err != nil {
       log.Fatalln(err)
    }
    if keyInfo.EncryptionErr != "" {
       log.Fatalf("Failed to perform encryption operation using '%s': %v\n", keyInfo.KeyID, keyInfo.EncryptionErr)
    }
    if keyInfo.UpdateErr != "" {
       log.Fatalf("Failed to perform key re-wrap operation using '%s': %v\n", keyInfo.KeyID, keyInfo.UpdateErr)
    }
    if keyInfo.DecryptionErr != "" {
       log.Fatalf("Failed to perform decryption operation using '%s': %v\n", keyInfo.KeyID, keyInfo.DecryptionErr)
    }

License

All versions of this SDK starting from v2.0.0 are distributed under the GNU AGPLv3 license that can be found in the LICENSE file.

# Packages

No description provided by the author