allow offline box

This commit is contained in:
shoopea
2022-04-16 20:57:45 +08:00
parent 762c538607
commit fd62711571
4 changed files with 196 additions and 109 deletions

View File

@@ -53,6 +53,7 @@ func (c *Config) Load() error {
for k, v := range c.Box {
v.Name = k
v.online = false
v.zfs = NewZFSConfig()
s := &SSHConfig{
logged: false,
@@ -97,31 +98,32 @@ func (c *Config) Load() error {
log.Printf("Config.Load : ssh.Dial(%s) : %s", k, err)
}
return err
}
session, err := s.client.NewSession()
if err != nil {
if *debugFlag {
log.Printf("Config.Load : client.NewSession(%s) : %s", k, err)
} else {
v.online = true
session, err := s.client.NewSession()
if err != nil {
if *debugFlag {
log.Printf("Config.Load : client.NewSession(%s) : %s", k, err)
}
return err
}
return err
}
var b bytes.Buffer
session.Stdout = &b
var b bytes.Buffer
session.Stdout = &b
err = session.Run("TZ=\"" + cfg.Timezone + "\" zfsnap --version")
if err != nil {
if *debugFlag {
log.Printf("Config.Load : client.NewSession(%s) : %s", k, err)
err = session.Run("TZ=\"" + cfg.Timezone + "\" zfsnap --version")
if err != nil {
if *debugFlag {
log.Printf("Config.Load : client.NewSession(%s) : %s", k, err)
}
return err
}
return err
if *debugFlag {
log.Printf("Config.Load : logged into %s : %s", k, b.String())
}
session.Close()
s.logged = true
}
if *debugFlag {
log.Printf("Config.Load : logged into %s : %s", k, b.String())
}
session.Close()
s.logged = true
}
for _, app := range c.Apps {
@@ -132,7 +134,11 @@ func (c *Config) Load() error {
if _, ok := cfg.Box[src.Box()]; !ok {
return fmt.Errorf("No box defined for source : %s", string(src))
}
if !cfg.Box[src.Box()].online {
return fmt.Errorf("Source box offline for app : %s", app.Name)
}
}
var allOffline bool = true
for _, dest := range app.Destinations {
if !dest.Valid() {
return fmt.Errorf("Destination not valid : %s", string(dest))
@@ -140,7 +146,14 @@ func (c *Config) Load() error {
if _, ok := cfg.Box[dest.Box()]; !ok {
return fmt.Errorf("No box defined for destination : %s", string(dest))
}
if cfg.Box[dest.Box()].online {
allOffline = false
}
}
if allOffline {
return fmt.Errorf("No online destination box for app : %s", app.Name)
}
for val, before := range app.Before {
_, err = regexp.Compile(val)
if err != nil {