mirror of
https://github.com/minio/minio.git
synced 2025-11-20 18:06:10 -05:00
Implement SetConfig admin API handler. (#3792)
This commit is contained in:
committed by
Harshavardhana
parent
dce0345f8f
commit
c9619673fb
@@ -18,15 +18,36 @@
|
||||
package madmin
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
const (
|
||||
configQueryParam = "config"
|
||||
)
|
||||
|
||||
// NodeSummary - represents the result of an operation part of
|
||||
// set-config on a node.
|
||||
type NodeSummary struct {
|
||||
Name string `json:"name"`
|
||||
Err string `json:"err"`
|
||||
}
|
||||
|
||||
// SetConfigResult - represents detailed results of a set-config
|
||||
// operation.
|
||||
type SetConfigResult struct {
|
||||
NodeResults []NodeSummary `json:"nodeResults"`
|
||||
Status bool `json:"status"`
|
||||
}
|
||||
|
||||
// GetConfig - returns the config.json of a minio setup.
|
||||
func (adm *AdminClient) GetConfig() ([]byte, error) {
|
||||
queryVal := make(url.Values)
|
||||
queryVal.Set("config", "")
|
||||
queryVal.Set(configQueryParam, "")
|
||||
|
||||
hdrs := make(http.Header)
|
||||
hdrs.Set(minioAdminOpHeader, "get")
|
||||
@@ -36,7 +57,7 @@ func (adm *AdminClient) GetConfig() ([]byte, error) {
|
||||
customHeaders: hdrs,
|
||||
}
|
||||
|
||||
// Execute GET on /?lock to list locks.
|
||||
// Execute GET on /?config to get config of a setup.
|
||||
resp, err := adm.executeMethod("GET", reqData)
|
||||
|
||||
defer closeResponse(resp)
|
||||
@@ -44,6 +65,59 @@ func (adm *AdminClient) GetConfig() ([]byte, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return nil, httpRespToErrorResponse(resp)
|
||||
}
|
||||
|
||||
// Return the JSON marshalled bytes to user.
|
||||
return ioutil.ReadAll(resp.Body)
|
||||
}
|
||||
|
||||
// SetConfig - set config supplied as config.json for the setup.
|
||||
func (adm *AdminClient) SetConfig(config io.Reader) (SetConfigResult, error) {
|
||||
queryVal := url.Values{}
|
||||
queryVal.Set(configQueryParam, "")
|
||||
|
||||
// Set x-minio-operation to set.
|
||||
hdrs := make(http.Header)
|
||||
hdrs.Set(minioAdminOpHeader, "set")
|
||||
|
||||
// Read config bytes to calculate MD5, SHA256 and content length.
|
||||
configBytes, err := ioutil.ReadAll(config)
|
||||
if err != nil {
|
||||
return SetConfigResult{}, err
|
||||
}
|
||||
|
||||
reqData := requestData{
|
||||
queryValues: queryVal,
|
||||
customHeaders: hdrs,
|
||||
contentBody: bytes.NewReader(configBytes),
|
||||
contentMD5Bytes: sumMD5(configBytes),
|
||||
contentSHA256Bytes: sum256(configBytes),
|
||||
}
|
||||
|
||||
// Execute PUT on /?config to set config.
|
||||
resp, err := adm.executeMethod("PUT", reqData)
|
||||
|
||||
defer closeResponse(resp)
|
||||
if err != nil {
|
||||
return SetConfigResult{}, err
|
||||
}
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return SetConfigResult{}, httpRespToErrorResponse(resp)
|
||||
}
|
||||
|
||||
var result SetConfigResult
|
||||
jsonBytes, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return SetConfigResult{}, err
|
||||
}
|
||||
|
||||
err = json.Unmarshal(jsonBytes, &result)
|
||||
if err != nil {
|
||||
return SetConfigResult{}, err
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user