use managed attribute
This commit is contained in:
parent
24a5e6676f
commit
b4d27e0867
61
addr.go
61
addr.go
@ -2,6 +2,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@ -50,7 +51,7 @@ func (a Addr) BoxExec(cmd string) (string, error) {
|
|||||||
|
|
||||||
if b, ok := cfg.box[a.Box()]; !ok {
|
if b, ok := cfg.box[a.Box()]; !ok {
|
||||||
err := errors.New("box doesn't exist")
|
err := errors.New("box doesn't exist")
|
||||||
log.WithFields(log.Fields{"addr": a, "box": a.Box()}).Errorf("")
|
log.WithFields(log.Fields{"addr": a, "box": a.Box(), "error": err}).Errorf("")
|
||||||
return "", err
|
return "", err
|
||||||
} else {
|
} else {
|
||||||
return b.Exec(cmd)
|
return b.Exec(cmd)
|
||||||
@ -70,26 +71,78 @@ func (a Addr) ValidSnapshots() ([]*ZfsSnapshot, error) {
|
|||||||
|
|
||||||
if b, ok := cfg.box[a.Box()]; !ok {
|
if b, ok := cfg.box[a.Box()]; !ok {
|
||||||
err := errors.New("box doesn't exist")
|
err := errors.New("box doesn't exist")
|
||||||
log.WithFields(log.Fields{"addr": a, "box": a.Box()}).Errorf("")
|
log.WithFields(log.Fields{"addr": a, "box": a.Box(), "error": err}).Errorf("")
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
if fs, ok := b.zfs.filesystems[a.Path()]; ok {
|
if fs, ok := b.zfs.filesystems[a.Path()]; ok {
|
||||||
return fs.ValidSnapshots(), nil
|
return fs.ValidSnapshots(), nil
|
||||||
} else {
|
} else {
|
||||||
err := errors.New("path doesn't exist")
|
err := errors.New("path doesn't exist")
|
||||||
log.WithFields(log.Fields{"addr": a}).Errorf("")
|
log.WithFields(log.Fields{"addr": a, "error": err}).Errorf("")
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a Addr) SetManaged(val bool) error {
|
||||||
|
log.WithFields(log.Fields{"addr": a}).Debugf("starting")
|
||||||
|
defer log.WithFields(log.Fields{"addr": a}).Debugf("done")
|
||||||
|
|
||||||
|
if b, ok := cfg.box[a.Box()]; !ok {
|
||||||
|
err := errors.New("box doesn't exist")
|
||||||
|
log.WithFields(log.Fields{"addr": a, "box": a.Box(), "error": err}).Errorf("")
|
||||||
|
return err
|
||||||
|
} else if fs, ok := b.zfs.filesystems[a.Path()]; !ok {
|
||||||
|
err := errors.New("path doesn't exist")
|
||||||
|
log.WithFields(log.Fields{"addr": a, "path": a.Path(), "error": err}).Errorf("")
|
||||||
|
return err
|
||||||
|
} else {
|
||||||
|
fs.mx.Lock()
|
||||||
|
defer fs.mx.Unlock()
|
||||||
|
if fs.managed != val {
|
||||||
|
var cmd string
|
||||||
|
if val {
|
||||||
|
cmd = fmt.Sprintf("zfs set %s=+ %s", zfsManagedPropertyName, a.Path())
|
||||||
|
} else {
|
||||||
|
cmd = fmt.Sprintf("zfs set %s=- %s", zfsManagedPropertyName, a.Path())
|
||||||
|
}
|
||||||
|
if _, err := b.Exec(cmd); err != nil {
|
||||||
|
log.WithFields(log.Fields{"addr": a, "call": "Exec", "attr": cmd, "error": err}).Errorf("")
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fs.managed = val
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a Addr) SetBackedUp(val bool) error {
|
||||||
|
log.WithFields(log.Fields{"addr": a}).Debugf("starting")
|
||||||
|
defer log.WithFields(log.Fields{"addr": a}).Debugf("done")
|
||||||
|
|
||||||
|
if b, ok := cfg.box[a.Box()]; !ok {
|
||||||
|
err := errors.New("box doesn't exist")
|
||||||
|
log.WithFields(log.Fields{"addr": a, "box": a.Box(), "error": err}).Errorf("")
|
||||||
|
return err
|
||||||
|
} else if fs, ok := b.zfs.filesystems[a.Path()]; !ok {
|
||||||
|
err := errors.New("path doesn't exist")
|
||||||
|
log.WithFields(log.Fields{"addr": a, "path": a.Path(), "error": err}).Errorf("")
|
||||||
|
return err
|
||||||
|
} else {
|
||||||
|
fs.mx.Lock()
|
||||||
|
defer fs.mx.Unlock()
|
||||||
|
fs.backedUp = val
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (a Addr) Mkdir() error {
|
func (a Addr) Mkdir() error {
|
||||||
log.WithFields(log.Fields{"addr": a}).Debugf("starting")
|
log.WithFields(log.Fields{"addr": a}).Debugf("starting")
|
||||||
defer log.WithFields(log.Fields{"addr": a}).Debugf("done")
|
defer log.WithFields(log.Fields{"addr": a}).Debugf("done")
|
||||||
|
|
||||||
if b, ok := cfg.box[a.Box()]; !ok {
|
if b, ok := cfg.box[a.Box()]; !ok {
|
||||||
err := errors.New("box doesn't exist")
|
err := errors.New("box doesn't exist")
|
||||||
log.WithFields(log.Fields{"addr": a, "box": a.Box()}).Errorf("")
|
log.WithFields(log.Fields{"addr": a, "box": a.Box(), "error": err}).Errorf("")
|
||||||
return err
|
return err
|
||||||
} else {
|
} else {
|
||||||
return b.zfs.Mkdir(a.Path())
|
return b.zfs.Mkdir(a.Path())
|
||||||
|
16
app.go
16
app.go
@ -302,6 +302,13 @@ func (a *App) Run(now time.Time) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, src := range a.sources {
|
||||||
|
if err := src.SetManaged(true); err != nil {
|
||||||
|
log.WithFields(log.Fields{"app": a.name, "call": "src.SetManaged", "error": err}).Errorf("")
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if err := a.Transfer(); err != nil {
|
if err := a.Transfer(); err != nil {
|
||||||
log.WithFields(log.Fields{"app": a.name, "call": "Transfer", "error": err}).Errorf("")
|
log.WithFields(log.Fields{"app": a.name, "call": "Transfer", "error": err}).Errorf("")
|
||||||
return err
|
return err
|
||||||
@ -481,9 +488,18 @@ func (a *App) Transfer() error {
|
|||||||
log.WithFields(log.Fields{"app": a.name, "call": "TransferZfs", "src": src, "dest": dest, "error": err}).Errorf("")
|
log.WithFields(log.Fields{"app": a.name, "call": "TransferZfs", "src": src, "dest": dest, "error": err}).Errorf("")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err := dest.SetManaged(true); err != nil {
|
||||||
|
log.WithFields(log.Fields{"app": a.name, "call": "SetManaged", "src": src, "dest": dest, "error": err}).Errorf("")
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if err := src.SetBackedUp(true); err != nil {
|
||||||
|
log.WithFields(log.Fields{"app": a.name, "call": "SetBackedUp", "src": src, "error": err}).Errorf("")
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -61,6 +61,12 @@ func main() {
|
|||||||
|
|
||||||
cfg.Run(e)
|
cfg.Run(e)
|
||||||
|
|
||||||
|
cfg.Cleanup(e)
|
||||||
|
|
||||||
|
if err := e.Send(); err != nil {
|
||||||
|
log.Printf("Cannot send email (%s)", err)
|
||||||
|
}
|
||||||
|
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
38
config.go
38
config.go
@ -202,6 +202,44 @@ func (c *Config) Run(e *Email) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Config) Cleanup(e *Email) {
|
||||||
|
log.WithFields(log.Fields{}).Debugf("starting")
|
||||||
|
defer log.WithFields(log.Fields{}).Debugf("done")
|
||||||
|
|
||||||
|
for _, a := range cfg.apps {
|
||||||
|
for _, src := range a.sources {
|
||||||
|
if b, ok := c.box[src.Box()]; ok {
|
||||||
|
if fs, ok := b.zfs.filesystems[src.Path()]; ok {
|
||||||
|
fs.srcApps = append(fs.srcApps, a)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, dest := range a.destinations {
|
||||||
|
if b, ok := c.box[src.Box()]; ok {
|
||||||
|
if fs, ok := b.zfs.filesystems[dest.Append("/"+src.Box()+"/"+src.Path()).Path()]; ok {
|
||||||
|
fs.destApps = append(fs.destApps, a)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, b := range cfg.box {
|
||||||
|
if b.online {
|
||||||
|
for _, fs := range b.zfs.filesystems {
|
||||||
|
if len(fs.srcApps) > 0 && !fs.backedUp {
|
||||||
|
log.WithFields(log.Fields{"box": b.name, "fs": fs.path}).Warnf("not backed up")
|
||||||
|
e.AddItem(fmt.Sprintf(" - Src : Folder not backed up (%s)", b.name+":"+fs.path))
|
||||||
|
}
|
||||||
|
if len(fs.destApps) == 0 && !fs.backedUp && fs.managed {
|
||||||
|
log.WithFields(log.Fields{"box": b.name, "fs": fs.path}).Warnf("managed")
|
||||||
|
e.AddItem(fmt.Sprintf(" - Dest : Folder managed (%s)", b.name+":"+fs.path))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Config) Stop(e *Email) {
|
func (c *Config) Stop(e *Email) {
|
||||||
log.WithFields(log.Fields{}).Debugf("starting")
|
log.WithFields(log.Fields{}).Debugf("starting")
|
||||||
defer log.WithFields(log.Fields{}).Debugf("done")
|
defer log.WithFields(log.Fields{}).Debugf("done")
|
||||||
|
4
email.go
4
email.go
@ -41,6 +41,10 @@ func (e *Email) Send() error {
|
|||||||
log.WithFields(log.Fields{}).Debugf("starting")
|
log.WithFields(log.Fields{}).Debugf("starting")
|
||||||
defer log.WithFields(log.Fields{}).Debugf("done")
|
defer log.WithFields(log.Fields{}).Debugf("done")
|
||||||
|
|
||||||
|
if len(e.items) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
body := " - " + e.items[0]
|
body := " - " + e.items[0]
|
||||||
for _, item := range e.items[1:] {
|
for _, item := range e.items[1:] {
|
||||||
body = body + "\r\n" + item
|
body = body + "\r\n" + item
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// Code generated by version.sh (@generated) DO NOT EDIT.
|
// Code generated by version.sh (@generated) DO NOT EDIT.
|
||||||
package main
|
package main
|
||||||
var githash = "e07c1c4"
|
var githash = "24a5e66"
|
||||||
var branch = "v2"
|
var branch = "v2"
|
||||||
var buildstamp = "2023-07-01_20:33:58"
|
var buildstamp = "2023-07-31_08:12:46"
|
||||||
var commits = "65"
|
var commits = "66"
|
||||||
var version = "e07c1c4-b65 - 2023-07-01_20:33:58"
|
var version = "24a5e66-b66 - 2023-07-31_08:12:46"
|
||||||
|
7
zfs.go
7
zfs.go
@ -23,9 +23,11 @@ type BoxZfs struct {
|
|||||||
type ZfsFs struct {
|
type ZfsFs struct {
|
||||||
path string
|
path string
|
||||||
managed bool
|
managed bool
|
||||||
|
backedUp bool
|
||||||
zfs *BoxZfs
|
zfs *BoxZfs
|
||||||
snapshots map[string]*ZfsSnapshot
|
snapshots map[string]*ZfsSnapshot
|
||||||
apps []*App
|
srcApps []*App
|
||||||
|
destApps []*App
|
||||||
mx sync.Mutex
|
mx sync.Mutex
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,7 +202,8 @@ func (z *BoxZfs) Mkdir(path string) error {
|
|||||||
managed: false,
|
managed: false,
|
||||||
zfs: z,
|
zfs: z,
|
||||||
snapshots: make(map[string]*ZfsSnapshot),
|
snapshots: make(map[string]*ZfsSnapshot),
|
||||||
apps: make([]*App, 0),
|
srcApps: make([]*App, 0),
|
||||||
|
destApps: make([]*App, 0),
|
||||||
}
|
}
|
||||||
z.filesystems[newPath] = fs
|
z.filesystems[newPath] = fs
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user