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.
59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
package backup
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io"
|
|
"os"
|
|
|
|
"github.com/rqlite/rqlite/v8/auto"
|
|
"github.com/rqlite/rqlite/v8/aws"
|
|
)
|
|
|
|
// Config is the config file format for the upload service
|
|
type Config struct {
|
|
Version int `json:"version"`
|
|
Type auto.StorageType `json:"type"`
|
|
NoCompress bool `json:"no_compress,omitempty"`
|
|
Vacuum bool `json:"vacuum,omitempty"`
|
|
Interval auto.Duration `json:"interval"`
|
|
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
|
|
}
|
|
|
|
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 := io.ReadAll(f)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
data = []byte(os.ExpandEnv(string(data)))
|
|
return data, nil
|
|
}
|