mirror of
https://github.com/minio/minio.git
synced 2025-11-20 18:06:10 -05:00
Add admin get/set config keys API (#6113)
This PR adds two new admin APIs in Minio server and madmin package: - GetConfigKeys(keys []string) ([]byte, error) - SetConfigKeys(params map[string]string) (err error) A key is a path in Minio configuration file, (e.g. notify.webhook.1) The user will always send a string value when setting it in the config file, the API will know how to convert the value to the appropriate type. The user is also able to set a raw json. Before setting a new config, Minio will validate all fields and try to connect to notification targets if available.
This commit is contained in:
committed by
Nitish Tiwari
parent
fd1b8491db
commit
3099af70a3
@@ -20,12 +20,14 @@ package madmin
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/rand"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
||||
"github.com/minio/minio/pkg/quick"
|
||||
"github.com/minio/sio"
|
||||
@@ -90,6 +92,36 @@ func (adm *AdminClient) GetConfig() ([]byte, error) {
|
||||
return DecryptServerConfigData(adm.secretAccessKey, resp.Body)
|
||||
}
|
||||
|
||||
// GetConfigKeys - returns partial json or json value from config.json of a minio setup.
|
||||
func (adm *AdminClient) GetConfigKeys(keys []string) ([]byte, error) {
|
||||
// No TLS?
|
||||
if !adm.secure {
|
||||
// return nil, fmt.Errorf("credentials/configuration cannot be retrieved over an insecure connection")
|
||||
}
|
||||
|
||||
queryVals := make(url.Values)
|
||||
for _, k := range keys {
|
||||
queryVals.Add(k, "")
|
||||
}
|
||||
|
||||
// Execute GET on /minio/admin/v1/config-keys to get config of a setup.
|
||||
resp, err := adm.executeMethod("GET",
|
||||
requestData{
|
||||
relPath: "/v1/config-keys",
|
||||
queryValues: queryVals,
|
||||
})
|
||||
defer closeResponse(resp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return nil, httpRespToErrorResponse(resp)
|
||||
}
|
||||
|
||||
return DecryptServerConfigData(adm.secretAccessKey, resp.Body)
|
||||
}
|
||||
|
||||
// SetConfig - set config supplied as config.json for the setup.
|
||||
func (adm *AdminClient) SetConfig(config io.Reader) (err error) {
|
||||
const maxConfigJSONSize = 256 * 1024 // 256KiB
|
||||
@@ -148,3 +180,35 @@ func (adm *AdminClient) SetConfig(config io.Reader) (err error) {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetConfigKeys - set config keys supplied as config.json for the setup.
|
||||
func (adm *AdminClient) SetConfigKeys(params map[string]string) error {
|
||||
queryVals := make(url.Values)
|
||||
for k, v := range params {
|
||||
encryptedVal, err := EncryptServerConfigData(adm.secretAccessKey, []byte(v))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
encodedVal := base64.StdEncoding.EncodeToString(encryptedVal)
|
||||
queryVals.Add(k, string(encodedVal))
|
||||
}
|
||||
|
||||
reqData := requestData{
|
||||
relPath: "/v1/config-keys",
|
||||
queryValues: queryVals,
|
||||
}
|
||||
|
||||
// Execute PUT on /minio/admin/v1/config-keys to set config.
|
||||
resp, err := adm.executeMethod("PUT", reqData)
|
||||
|
||||
defer closeResponse(resp)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return httpRespToErrorResponse(resp)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user