func main() { p := FSPlugin{ Name: "FS Plugin", Author: "Stark & Wayne", Version: "1.0.0", Features: plugin.PluginFeatures{ Target: "yes", Store: "yes", }, } plugin.DEBUG("fs plugin starting up...") plugin.Run(p) }
func (p FSPlugin) Restore(endpoint plugin.ShieldEndpoint) error { cfg, err := getFSConfig(endpoint) if err != nil { return err } cmd := fmt.Sprintf("%s -x -C %s", cfg.BsdTar, cfg.BasePath) plugin.DEBUG("Executing `%s`", cmd) err = plugin.Exec(cmd, plugin.STDIN) if err != nil { return err } return nil }
func (p S3Plugin) Store(endpoint plugin.ShieldEndpoint) (string, error) { s3, err := getS3ConnInfo(endpoint) if err != nil { return "", err } client, err := s3.Connect() if err != nil { return "", err } path := s3.genBackupPath() plugin.DEBUG("Storing data in %s", path) // FIXME: should we do something with the size of the write performed? _, err = client.PutObject(s3.Bucket, path, os.Stdin, "application/x-gzip") if err != nil { return "", err } return path, nil }
func (p S3Plugin) Store(endpoint plugin.ShieldEndpoint) (string, error) { s3, err := getS3ConnInfo(endpoint) if err != nil { return "", err } client, err := s3.Connect() if err != nil { return "", err } path := s3.genBackupPath() plugin.DEBUG("Storing data in %s", path) // FIXME: should we do something with the size of the write performed? // Removing leading slash until https://github.com/minio/minio/issues/3256 is fixed _, err = client.PutObject(s3.Bucket, strings.TrimPrefix(path, "/"), os.Stdin, "application/x-gzip") if err != nil { return "", err } return path, nil }
func (p ScalityPlugin) Store(endpoint plugin.ShieldEndpoint) (string, error) { scal, err := getScalityConnInfo(endpoint) if err != nil { return "", err } client, err := scal.Connect() if err != nil { return "", err } path := scal.genBackupPath() plugin.DEBUG("Storing data in %s", path) minio.SetMaxPartSize(1024 * 1024 * 75) // FIXME: should we do something with the size of the write performed? _, err = client.PutObject(scal.Bucket, path, os.Stdin, "application/x-gzip") if err != nil { return "", err } return path, nil }
func makeRequest(method string, url string, body io.Reader, username string, password string, skipSSLValidation bool) (*http.Response, error) { req, err := http.NewRequest(method, url, body) if err != nil { return nil, err } req.SetBasicAuth(username, password) req.Header.Add("Content-Type", "application/json") httpClient := http.Client{} httpClient.Transport = &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: skipSSLValidation}} resp, err := httpClient.Do(req) if err != nil { return nil, err } if resp.StatusCode >= 300 { plugin.DEBUG("%#v", resp) return nil, fmt.Errorf("Got '%d' response while retrieving RMQ definitions", resp.StatusCode) } return resp, nil }
func (p FSPlugin) Backup(endpoint plugin.ShieldEndpoint) error { cfg, err := getFSConfig(endpoint) if err != nil { return err } //FIXME: drop include and exclude if they were not specified var flags string if cfg.Include != "" { flags = fmt.Sprintf("%s --include '%s'", flags, cfg.Include) } if cfg.Exclude != "" { flags = fmt.Sprintf("%s --exclude '%s'", flags, cfg.Exclude) } cmd := fmt.Sprintf("%s -c -C %s %s .", cfg.BsdTar, cfg.BasePath, flags) plugin.DEBUG("Executing `%s`", cmd) err = plugin.Exec(cmd, plugin.STDOUT) if err != nil { return err } return nil }