You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.4 KiB
Go
63 lines
1.4 KiB
Go
package restore
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io/ioutil"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/rqlite/rqlite/auto"
|
|
"github.com/rqlite/rqlite/aws"
|
|
)
|
|
|
|
// Config is the config file format for the upload service
|
|
type Config struct {
|
|
Version int `json:"version"`
|
|
Type auto.StorageType `json:"type"`
|
|
Timeout auto.Duration `json:"timeout,omitempty"`
|
|
ContinueOnFailure bool `json:"continue_on_failure,omitempty"`
|
|
Sub json.RawMessage `json:"sub"`
|
|
}
|
|
|
|
// Unmarshal unmarshals the config file and returns the config and subconfig
|
|
func Unmarshal(data []byte) (*Config, *aws.S3Config, error) {
|
|
cfg := &Config{}
|
|
err := json.Unmarshal(data, cfg)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
if cfg.Version > auto.Version {
|
|
return nil, nil, auto.ErrInvalidVersion
|
|
}
|
|
|
|
if cfg.Timeout == 0 {
|
|
cfg.Timeout = auto.Duration(30 * time.Second)
|
|
}
|
|
|
|
s3cfg := &aws.S3Config{}
|
|
err = json.Unmarshal(cfg.Sub, s3cfg)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
return cfg, s3cfg, nil
|
|
}
|
|
|
|
// ReadConfigFile reads the config file and returns the data. It also expands
|
|
// any environment variables in the config file.
|
|
func ReadConfigFile(filename string) ([]byte, error) {
|
|
f, err := os.Open(filename)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer f.Close()
|
|
|
|
data, err := ioutil.ReadAll(f)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
data = []byte(os.ExpandEnv(string(data)))
|
|
return data, nil
|
|
}
|