diff --git a/cmd/config/config.go b/cmd/config/config.go index e45637a..38c9a38 100644 --- a/cmd/config/config.go +++ b/cmd/config/config.go @@ -54,6 +54,14 @@ type SourceJob struct { Pruning PruningLocal `yaml:"pruning"` } +type LocalJob struct { + Type string `yaml:"type"` + Name string `yaml:"name"` + Replication LocalReplication `yaml:"replication"` + Snapshotting Snapshotting `yaml:"snapshotting"` + Pruning PruningSenderReceiver `yaml:"pruning"` +} + type PushReplication struct { Connect ConnectEnum `yaml:"connect"` Filesystems map[string]bool `yaml:"filesystems"` @@ -69,6 +77,11 @@ type SourceReplication struct { Filesystems map[string]bool `yaml:"filesystems"` } +type LocalReplication struct { + Filesystems map[string]bool `yaml:"filesystems"` + RootDataset string `yaml:"root_dataset"` +} + type Snapshotting struct { SnapshotPrefix string `yaml:"snapshot_prefix"` Interval time.Duration `yaml:"interval"` @@ -220,6 +233,7 @@ func (t *JobEnum) UnmarshalYAML(u func(interface{}, bool) error) (err error) { "sink": &SinkJob{}, "pull": &PullJob{}, "source": &SourceJob{}, + "local": &LocalJob{}, }) return } diff --git a/cmd/config/samples/local.yml b/cmd/config/samples/local.yml new file mode 100644 index 0000000..5473b42 --- /dev/null +++ b/cmd/config/samples/local.yml @@ -0,0 +1,42 @@ + +jobs: +- name: mirror_local + type: local + # snapshot the filesystems matched by the left-hand-side of the mapping + # every 10m with zrepl_ as prefix + replication: + filesystems: { + "pool1/var/db<": true, + "pool1/usr/home<": true, + "pool1/usr/home/paranoid": false, #don't backup paranoid user + "pool1/poudriere/ports<": false #don't backup the ports trees + } + # TODO FIXME enforce that the tree under root_dataset and the trees allowed (true) by filesystems are non-overlapping + root_dataset: "pool2/backups/pool1" + + snapshotting: + snapshot_prefix: zrepl_ + interval: 10m + + pruning: + keep_sender: + - type: not_replicated + keep_receiver: + - type: grid + grid: 1x1h(keep=all) | 24x1h | 35x1d | 6x30d + keep_bookmarks: all + +global: + logging: + - type: "stdout" + time: true + level: "warn" + format: "human" + monitoring: + - type: "prometheus" + listen: ":9091" + control: + sockpath: /var/run/zrepl/control + serve: + stdinserver: + sockdir: /var/run/zrepl/stdinserver