github.com/minio/madmin-go/v2@v2.2.1/README.md (about) 1 # Golang Admin Client API Reference [](https://slack.min.io) 2 The MinIO Admin Golang Client SDK provides APIs to manage MinIO services. 3 4 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. 5 6 This document assumes that you have a working [Golang setup](https://golang.org/doc/install). 7 8 ## Initialize MinIO Admin Client object. 9 10 ## MinIO 11 12 ```go 13 14 package main 15 16 import ( 17 "fmt" 18 19 "github.com/minio/madmin-go/v2" 20 ) 21 22 func main() { 23 // Use a secure connection. 24 ssl := true 25 26 // Initialize minio client object. 27 mdmClnt, err := madmin.New("your-minio.example.com:9000", "YOUR-ACCESSKEYID", "YOUR-SECRETKEY", ssl) 28 if err != nil { 29 fmt.Println(err) 30 return 31 } 32 33 // Fetch service status. 34 st, err := mdmClnt.ServerInfo() 35 if err != nil { 36 fmt.Println(err) 37 return 38 } 39 for _, peerInfo := range serversInfo { 40 log.Printf("Node: %s, Info: %v\n", peerInfo.Addr, peerInfo.Data) 41 } 42 } 43 44 ``` 45 46 | Service operations | Info operations | Healing operations | Config operations | 47 |:------------------------------------|:-----------------------------------------|:-------------------|:--------------------------| 48 | [`ServiceTrace`](#ServiceTrace) | [`ServerInfo`](#ServerInfo) | [`Heal`](#Heal) | [`GetConfig`](#GetConfig) | 49 | [`ServiceStop`](#ServiceStop) | [`StorageInfo`](#StorageInfo) | | [`SetConfig`](#SetConfig) | 50 | [`ServiceRestart`](#ServiceRestart) | [`AccountInfo`](#AccountInfo) | | | 51 52 53 54 | Top operations | IAM operations | Misc | KMS | 55 |:------------------------|:--------------------------------------|:--------------------------------------------------|:--------------------------------| 56 | [`TopLocks`](#TopLocks) | [`AddUser`](#AddUser) | [`StartProfiling`](#StartProfiling) | [`GetKeyStatus`](#GetKeyStatus) | 57 | | [`SetPolicy`](#SetPolicy) | [`DownloadProfilingData`](#DownloadProfilingData) | | 58 | | [`ListUsers`](#ListUsers) | [`ServerUpdate`](#ServerUpdate) | | 59 | | [`AddCannedPolicy`](#AddCannedPolicy) | | | 60 61 ## 1. Constructor 62 <a name="MinIO"></a> 63 64 ### New(endpoint string, accessKeyID string, secretAccessKey string, ssl bool) (*AdminClient, error) 65 Initializes a new admin client object. 66 67 __Parameters__ 68 69 | Param | Type | Description | 70 |:------------------|:---------|:----------------------------------------------------------| 71 | `endpoint` | _string_ | MinIO endpoint. | 72 | `accessKeyID` | _string_ | Access key for the object storage endpoint. | 73 | `secretAccessKey` | _string_ | Secret key for the object storage endpoint. | 74 | `ssl` | _bool_ | Set this value to 'true' to enable secure (HTTPS) access. | 75 76 ## 2. Service operations 77 78 <a name="ServiceStatus"></a> 79 ### ServiceStatus(ctx context.Context) (ServiceStatusMetadata, error) 80 Fetch service status, replies disk space used, backend type and total disks offline/online (applicable in distributed mode). 81 82 | Param | Type | Description | 83 |-----------------|-------------------------|------------------------------------------------------------| 84 | `serviceStatus` | _ServiceStatusMetadata_ | Represents current server status info in following format: | 85 86 87 | Param | Type | Description | 88 |-----------------------------|-----------------|------------------------------------| 89 | `st.ServerVersion.Version` | _string_ | Server version. | 90 | `st.ServerVersion.CommitID` | _string_ | Server commit id. | 91 | `st.Uptime` | _time.Duration_ | Server uptime duration in seconds. | 92 93 __Example__ 94 95 ```go 96 97 st, err := madmClnt.ServiceStatus(context.Background()) 98 if err != nil { 99 log.Fatalln(err) 100 } 101 log.Printf("%#v\n", st) 102 103 ``` 104 105 <a name="ServiceRestart"></a> 106 ### ServiceRestart(ctx context.Context) error 107 Sends a service action restart command to MinIO server. 108 109 __Example__ 110 111 ```go 112 // To restart the service, restarts all servers in the cluster. 113 err := madmClnt.ServiceRestart(context.Background()) 114 if err != nil { 115 log.Fatalln(err) 116 } 117 log.Println("Success") 118 ``` 119 120 <a name="ServiceStop"></a> 121 ### ServiceStop(ctx context.Context) error 122 Sends a service action stop command to MinIO server. 123 124 __Example__ 125 126 ```go 127 // To stop the service, stops all servers in the cluster. 128 err := madmClnt.ServiceStop(context.Background()) 129 if err != nil { 130 log.Fatalln(err) 131 } 132 log.Println("Success") 133 ``` 134 135 <a name="ServiceTrace"></a> 136 ### ServiceTrace(ctx context.Context, allTrace bool, doneCh <-chan struct{}) <-chan TraceInfo 137 Enable HTTP request tracing on all nodes in a MinIO cluster 138 139 __Example__ 140 141 ``` go 142 doneCh := make(chan struct{}) 143 defer close(doneCh) 144 // listen to all trace including internal API calls 145 allTrace := true 146 // Start listening on all trace activity. 147 traceCh := madmClnt.ServiceTrace(context.Background(), allTrace, doneCh) 148 for traceInfo := range traceCh { 149 fmt.Println(traceInfo.String()) 150 } 151 ``` 152 153 ## 3. Info operations 154 155 <a name="ServerInfo"></a> 156 ### ServerInfo(ctx context.Context) ([]ServerInfo, error) 157 Fetches information for all cluster nodes, such as server properties, storage information, network statistics, etc. 158 159 | Param | Type | Description | 160 |----------------------------------|--------------------|--------------------------------------------------------------------| 161 | `si.Addr` | _string_ | Address of the server the following information is retrieved from. | 162 | `si.ConnStats` | _ServerConnStats_ | Connection statistics from the given server. | 163 | `si.HTTPStats` | _ServerHTTPStats_ | HTTP connection statistics from the given server. | 164 | `si.Properties` | _ServerProperties_ | Server properties such as region, notification targets. | 165 166 | Param | Type | Description | 167 |-----------------------------|-----------------|----------------------------------------------------| 168 | `ServerProperties.Uptime` | _time.Duration_ | Total duration in seconds since server is running. | 169 | `ServerProperties.Version` | _string_ | Current server version. | 170 | `ServerProperties.CommitID` | _string_ | Current server commitID. | 171 | `ServerProperties.Region` | _string_ | Configured server region. | 172 | `ServerProperties.SQSARN` | _[]string_ | List of notification target ARNs. | 173 174 | Param | Type | Description | 175 |------------------------------------|----------|-------------------------------------| 176 | `ServerConnStats.TotalInputBytes` | _uint64_ | Total bytes received by the server. | 177 | `ServerConnStats.TotalOutputBytes` | _uint64_ | Total bytes sent by the server. | 178 179 | Param | Type | Description | 180 |--------------------------------------|-------------------------|---------------------------------------------------------| 181 | `ServerHTTPStats.TotalHEADStats` | _ServerHTTPMethodStats_ | Total statistics regarding HEAD operations | 182 | `ServerHTTPStats.SuccessHEADStats` | _ServerHTTPMethodStats_ | Total statistics regarding successful HEAD operations | 183 | `ServerHTTPStats.TotalGETStats` | _ServerHTTPMethodStats_ | Total statistics regarding GET operations | 184 | `ServerHTTPStats.SuccessGETStats` | _ServerHTTPMethodStats_ | Total statistics regarding successful GET operations | 185 | `ServerHTTPStats.TotalPUTStats` | _ServerHTTPMethodStats_ | Total statistics regarding PUT operations | 186 | `ServerHTTPStats.SuccessPUTStats` | _ServerHTTPMethodStats_ | Total statistics regarding successful PUT operations | 187 | `ServerHTTPStats.TotalPOSTStats` | _ServerHTTPMethodStats_ | Total statistics regarding POST operations | 188 | `ServerHTTPStats.SuccessPOSTStats` | _ServerHTTPMethodStats_ | Total statistics regarding successful POST operations | 189 | `ServerHTTPStats.TotalDELETEStats` | _ServerHTTPMethodStats_ | Total statistics regarding DELETE operations | 190 | `ServerHTTPStats.SuccessDELETEStats` | _ServerHTTPMethodStats_ | Total statistics regarding successful DELETE operations | 191 192 | Param | Type | Description | 193 |-------------------------------------|----------|-------------------------------------------------| 194 | `ServerHTTPMethodStats.Count` | _uint64_ | Total number of operations. | 195 | `ServerHTTPMethodStats.AvgDuration` | _string_ | Average duration of Count number of operations. | 196 197 | Param | Type | Description | 198 |----------------------|----------|-------------------------------------------------------| 199 | `DriveInfo.UUID` | _string_ | Unique ID for each disk provisioned by server format. | 200 | `DriveInfo.Endpoint` | _string_ | Endpoint location of the remote/local disk. | 201 | `DriveInfo.State` | _string_ | Current state of the disk at endpoint. | 202 203 __Example__ 204 205 ```go 206 207 serversInfo, err := madmClnt.ServerInfo(context.Background()) 208 if err != nil { 209 log.Fatalln(err) 210 } 211 212 for _, peerInfo := range serversInfo { 213 log.Printf("Node: %s, Info: %v\n", peerInfo.Addr, peerInfo.Data) 214 } 215 216 ``` 217 218 <a name="StorageInfo"></a> 219 ### StorageInfo(ctx context.Context) (StorageInfo, error) 220 221 Fetches Storage information for all cluster nodes. 222 223 | Param | Type | Description | 224 |-------------------------|------------|---------------------------------------------| 225 | `storageInfo.Used` | _[]int64_ | Used disk spaces. | 226 | `storageInfo.Total` | _[]int64_ | Total disk spaces. | 227 | `storageInfo.Available` | _[]int64_ | Available disk spaces. | 228 | `StorageInfo.Backend` | _struct{}_ | Represents backend type embedded structure. | 229 230 | Param | Type | Description | 231 |----------------------------|-----------------|--------------------------------------------------------------------------------------------------------------------------| 232 | `Backend.Type` | _BackendType_ | Type of backend used by the server currently only FS or Erasure. | 233 | `Backend.OnlineDisks` | _BackendDisks_ | Total number of disks online per node (only applies to Erasure backend) represented in map[string]int, is empty for FS. | 234 | `Backend.OfflineDisks` | _BackendDisks_ | Total number of disks offline per node (only applies to Erasure backend) represented in map[string]int, is empty for FS. | 235 | `Backend.StandardSCParity` | _int_ | Parity disks set for standard storage class, is empty for FS. | 236 | `Backend.RRSCParity` | _int_ | Parity disks set for reduced redundancy storage class, is empty for FS. | 237 | `Backend.Sets` | _[][]DriveInfo_ | Represents topology of drives in erasure coded sets. | 238 239 __Example__ 240 241 ```go 242 243 storageInfo, err := madmClnt.StorageInfo(context.Background()) 244 if err != nil { 245 log.Fatalln(err) 246 } 247 248 log.Println(storageInfo) 249 250 ``` 251 252 <a name="AccountInfo"></a> 253 254 ### AccountInfo(ctx context.Context) (AccountInfo, error) 255 256 Fetches accounting usage information for the current authenticated user 257 258 | Param | Type | Description | 259 |--------------------------------|----------------------|-------------------------| 260 | `AccountInfo.AccountName` | _string_ | Account name. | 261 | `AccountInfo.Buckets` | _[]BucketAccessInfo_ | Bucket usage info. | 262 263 264 | Param | Type | Description | 265 |----------------------------|-----------------|-----------------------------------------| 266 | `BucketAccessInfo.Name` | _string_ | The name of the current bucket 267 | `BucketAccessInfo.Size` | _uint64_ | The total size of the current bucket 268 | `BucketAccessInfo.Created` | _time.Time_ | Bucket creation time 269 | `BucketAccessInfo.Access` | _AccountAccess_ | Type of access of the current account 270 271 272 | Param | Type | Description | 273 |------------------------|---------|------------------------------------------------------------------| 274 | `AccountAccess.Read` | _bool_ | Indicate if the bucket is readable by the current account name. | 275 | `AccountAccess.Write` | _bool_ | Indocate if the bucket is writable by the current account name. | 276 277 278 __Example__ 279 280 ```go 281 282 accountInfo, err := madmClnt.AccountInfo(context.Background()) 283 if err != nil { 284 log.Fatalln(err) 285 } 286 287 log.Println(accountInfo) 288 289 ``` 290 291 292 293 ## 5. Heal operations 294 295 <a name="Heal"></a> 296 ### Heal(ctx context.Context, bucket, prefix string, healOpts HealOpts, clientToken string, forceStart bool, forceStop bool) (start HealStartSuccess, status HealTaskStatus, err error) 297 298 Start a heal sequence that scans data under given (possible empty) 299 `bucket` and `prefix`. The `recursive` bool turns on recursive 300 traversal under the given path. `dryRun` does not mutate on-disk data, 301 but performs data validation. 302 303 Two heal sequences on overlapping paths may not be initiated. 304 305 The progress of a heal should be followed using the same API `Heal` 306 by providing the `clientToken` previously obtained from a `Heal` 307 API. The server accumulates results of the heal traversal and waits 308 for the client to receive and acknowledge them using the status 309 request by providing `clientToken`. 310 311 __Example__ 312 313 ``` go 314 315 opts := madmin.HealOpts{ 316 Recursive: true, 317 DryRun: false, 318 } 319 forceStart := false 320 forceStop := false 321 healPath, err := madmClnt.Heal(context.Background(), "", "", opts, "", forceStart, forceStop) 322 if err != nil { 323 log.Fatalln(err) 324 } 325 log.Printf("Heal sequence started at %s", healPath) 326 327 ``` 328 329 #### HealStartSuccess structure 330 331 | Param | Type | Description | 332 |-------------------|-------------|----------------------------------------------------------------------------------------------------------------------------------| 333 | `s.ClientToken` | _string_ | A unique token for a successfully started heal operation, this token is used to request realtime progress of the heal operation. | 334 | `s.ClientAddress` | _string_ | Address of the client which initiated the heal operation, the client address has the form "host:port". | 335 | `s.StartTime` | _time.Time_ | Time when heal was initially started. | 336 337 #### HealTaskStatus structure 338 339 | Param | Type | Description | 340 |-------------------|--------------------|---------------------------------------------------| 341 | `s.Summary` | _string_ | Short status of heal sequence | 342 | `s.FailureDetail` | _string_ | Error message in case of heal sequence failure | 343 | `s.HealSettings` | _HealOpts_ | Contains the booleans set in the `HealStart` call | 344 | `s.Items` | _[]HealResultItem_ | Heal records for actions performed by server | 345 346 #### HealResultItem structure 347 348 | Param | Type | Description | 349 |------------------------|----------------|-----------------------------------------------------------------| 350 | `ResultIndex` | _int64_ | Index of the heal-result record | 351 | `Type` | _HealItemType_ | Represents kind of heal operation in the heal record | 352 | `Bucket` | _string_ | Bucket name | 353 | `Object` | _string_ | Object name | 354 | `Detail` | _string_ | Details about heal operation | 355 | `DiskInfo.AvailableOn` | _[]int_ | List of disks on which the healed entity is present and healthy | 356 | `DiskInfo.HealedOn` | _[]int_ | List of disks on which the healed entity was restored | 357 l 358 ## 6. Config operations 359 360 <a name="GetConfig"></a> 361 ### GetConfig(ctx context.Context) ([]byte, error) 362 Get current `config.json` of a MinIO server. 363 364 __Example__ 365 366 ``` go 367 configBytes, err := madmClnt.GetConfig(context.Background()) 368 if err != nil { 369 log.Fatalf("failed due to: %v", err) 370 } 371 372 // Pretty-print config received as json. 373 var buf bytes.Buffer 374 err = json.Indent(buf, configBytes, "", "\t") 375 if err != nil { 376 log.Fatalf("failed due to: %v", err) 377 } 378 379 log.Println("config received successfully: ", string(buf.Bytes())) 380 ``` 381 382 383 <a name="SetConfig"></a> 384 ### SetConfig(ctx context.Context, config io.Reader) error 385 Set a new `config.json` for a MinIO server. 386 387 __Example__ 388 389 ``` go 390 config := bytes.NewReader([]byte(`config.json contents go here`)) 391 if err := madmClnt.SetConfig(context.Background(), config); err != nil { 392 log.Fatalf("failed due to: %v", err) 393 } 394 log.Println("SetConfig was successful") 395 ``` 396 397 ## 7. Top operations 398 399 <a name="TopLocks"></a> 400 ### TopLocks(ctx context.Context) (LockEntries, error) 401 Get the oldest locks from MinIO server. 402 403 __Example__ 404 405 ``` go 406 locks, err := madmClnt.TopLocks(context.Background()) 407 if err != nil { 408 log.Fatalf("failed due to: %v", err) 409 } 410 411 out, err := json.Marshal(locks) 412 if err != nil { 413 log.Fatalf("Marshal failed due to: %v", err) 414 } 415 416 log.Println("TopLocks received successfully: ", string(out)) 417 ``` 418 419 ## 8. IAM operations 420 421 <a name="AddCannedPolicy"></a> 422 ### AddCannedPolicy(ctx context.Context, policyName string, policy *iampolicy.Policy) error 423 Create a new canned policy on MinIO server. 424 425 __Example__ 426 427 ``` 428 policy, err := iampolicy.ParseConfig(strings.NewReader(`{"Version": "2012-10-17","Statement": [{"Action": ["s3:GetObject"],"Effect": "Allow","Resource": ["arn:aws:s3:::my-bucketname/*"],"Sid": ""}]}`)) 429 if err != nil { 430 log.Fatalln(err) 431 } 432 433 if err = madmClnt.AddCannedPolicy(context.Background(), "get-only", policy); err != nil { 434 log.Fatalln(err) 435 } 436 ``` 437 438 <a name="AddUser"></a> 439 ### AddUser(ctx context.Context, user string, secret string) error 440 Add a new user on a MinIO server. 441 442 __Example__ 443 444 ``` go 445 if err = madmClnt.AddUser(context.Background(), "newuser", "newstrongpassword"); err != nil { 446 log.Fatalln(err) 447 } 448 ``` 449 450 <a name="SetPolicy"></a> 451 ### SetPolicy(ctx context.Context, policyName, entityName string, isGroup bool) error 452 Enable a canned policy `get-only` for a given user or group on MinIO server. 453 454 __Example__ 455 456 ``` go 457 if err = madmClnt.SetPolicy(context.Background(), "get-only", "newuser", false); err != nil { 458 log.Fatalln(err) 459 } 460 ``` 461 462 <a name="ListUsers"></a> 463 ### ListUsers(ctx context.Context) (map[string]UserInfo, error) 464 Lists all users on MinIO server. 465 466 __Example__ 467 468 ``` go 469 users, err := madmClnt.ListUsers(context.Background()); 470 if err != nil { 471 log.Fatalln(err) 472 } 473 for k, v := range users { 474 fmt.Printf("User %s Status %s\n", k, v.Status) 475 } 476 ``` 477 478 ## 9. Misc operations 479 480 <a name="ServerUpdate"></a> 481 ### ServerUpdate(ctx context.Context, updateURL string) (ServerUpdateStatus, error) 482 Sends a update command to MinIO server, to update MinIO server to latest release. In distributed setup it updates all servers atomically. 483 484 __Example__ 485 486 ```go 487 // Updates all servers and restarts all the servers in the cluster. 488 // optionally takes an updateURL, which is used to update the binary. 489 us, err := madmClnt.ServerUpdate(context.Background(), updateURL) 490 if err != nil { 491 log.Fatalln(err) 492 } 493 if us.CurrentVersion != us.UpdatedVersion { 494 log.Printf("Updated server version from %s to %s successfully", us.CurrentVersion, us.UpdatedVersion) 495 } 496 ``` 497 498 <a name="StartProfiling"></a> 499 ### StartProfiling(ctx context.Context, profiler string) error 500 Ask all nodes to start profiling using the specified profiler mode 501 502 __Example__ 503 504 ``` go 505 startProfilingResults, err = madmClnt.StartProfiling(context.Background(), "cpu") 506 if err != nil { 507 log.Fatalln(err) 508 } 509 for _, result := range startProfilingResults { 510 if !result.Success { 511 log.Printf("Unable to start profiling on node `%s`, reason = `%s`\n", result.NodeName, result.Error) 512 } else { 513 log.Printf("Profiling successfully started on node `%s`\n", result.NodeName) 514 } 515 } 516 517 ``` 518 519 <a name="DownloadProfilingData"></a> 520 ### DownloadProfilingData(ctx context.Context) ([]byte, error) 521 Download profiling data of all nodes in a zip format. 522 523 __Example__ 524 525 ``` go 526 profilingData, err := madmClnt.DownloadProfilingData(context.Background()) 527 if err != nil { 528 log.Fatalln(err) 529 } 530 531 profilingFile, err := os.Create("/tmp/profiling-data.zip") 532 if err != nil { 533 log.Fatal(err) 534 } 535 536 if _, err := io.Copy(profilingFile, profilingData); err != nil { 537 log.Fatal(err) 538 } 539 540 if err := profilingFile.Close(); err != nil { 541 log.Fatal(err) 542 } 543 544 if err := profilingData.Close(); err != nil { 545 log.Fatal(err) 546 } 547 548 log.Println("Profiling data successfully downloaded.") 549 ``` 550 551 ## 11. KMS 552 553 <a name="GetKeyStatus"></a> 554 ### GetKeyStatus(ctx context.Context, keyID string) (*KMSKeyStatus, error) 555 Requests status information about one particular KMS master key 556 from a MinIO server. The keyID is optional and the server will 557 use the default master key (configured via `MINIO_KMS_VAULT_KEY_NAME` 558 or `MINIO_KMS_MASTER_KEY`) if the keyID is empty. 559 560 __Example__ 561 562 ``` go 563 keyInfo, err := madmClnt.GetKeyStatus(context.Background(), "my-minio-key") 564 if err != nil { 565 log.Fatalln(err) 566 } 567 if keyInfo.EncryptionErr != "" { 568 log.Fatalf("Failed to perform encryption operation using '%s': %v\n", keyInfo.KeyID, keyInfo.EncryptionErr) 569 } 570 if keyInfo.UpdateErr != "" { 571 log.Fatalf("Failed to perform key re-wrap operation using '%s': %v\n", keyInfo.KeyID, keyInfo.UpdateErr) 572 } 573 if keyInfo.DecryptionErr != "" { 574 log.Fatalf("Failed to perform decryption operation using '%s': %v\n", keyInfo.KeyID, keyInfo.DecryptionErr) 575 } 576 ``` 577 578 ## License 579 All versions of this SDK starting from [v2.0.0](https://github.com/minio/madmin-go/releases/tag/v2.0.0) are distributed under the GNU AGPLv3 license that can be found in the [LICENSE](https://github.com/minio/madmin-go/blob/master/LICENSE) file. 580