diff --git a/backup/source/consul/vault.go b/backup/source/consul/vault.go new file mode 100644 index 0000000..bb9fc63 --- /dev/null +++ b/backup/source/consul/vault.go @@ -0,0 +1,28 @@ +package consul + +import ( + "fmt" + + "github.com/sikalabs/tergum/backup_output" + "github.com/sikalabs/tergum/backup_process_utils" +) + +type ConsulSource struct { + Addr string `yaml:"Addr"` + Token string `yaml:"Token"` +} + +func (s ConsulSource) Validate() error { + if s.Addr == "" { + return fmt.Errorf("ConsulSource need to have a Addr") + } + return nil +} + +func (s ConsulSource) Backup() (backup_output.BackupOutput, error) { + return backup_process_utils.BackupProcessHttpGetWithToken( + s.Addr+"/v1/snapshot", + "X-Consul-Token", + s.Token, + ) +} diff --git a/backup/source/source.go b/backup/source/source.go index b97c198..0928033 100644 --- a/backup/source/source.go +++ b/backup/source/source.go @@ -3,6 +3,7 @@ package source import ( "fmt" + "github.com/sikalabs/tergum/backup/source/consul" "github.com/sikalabs/tergum/backup/source/dir" "github.com/sikalabs/tergum/backup/source/dummy" "github.com/sikalabs/tergum/backup/source/ftp" @@ -37,6 +38,7 @@ type Source struct { Vault *vault.VaultSource `yaml:"Vault"` Dummy *dummy.DummySource `yaml:"Dummy"` Gitlab *gitlab.GitlabSource `yaml:"Gitlab"` + Consul *consul.ConsulSource `yaml:"Consul"` } func (s Source) Validate() error { @@ -115,6 +117,11 @@ func (s Source) Validate() error { return p.Validate() } + if s.Consul != nil { + p := *s.Consul + return p.Validate() + } + return fmt.Errorf("source/validate: no source detected") } @@ -194,6 +201,11 @@ func (s Source) Backup() (backup_output.BackupOutput, error) { return p.Backup() } + if s.Consul != nil { + p := *s.Consul + return p.Backup() + } + return backup_output.BackupOutput{}, fmt.Errorf("source/backup: no source detected") } @@ -258,5 +270,9 @@ func (s Source) Name() string { return "Gitlab" } + if s.Consul != nil { + return "Consul" + } + return "" }