change zfs list handling
This commit is contained in:
131
ssh.go
131
ssh.go
@@ -5,7 +5,6 @@ import (
|
||||
"encoding/csv"
|
||||
"fmt"
|
||||
"log"
|
||||
"strings"
|
||||
|
||||
"golang.org/x/crypto/ssh"
|
||||
)
|
||||
@@ -145,82 +144,7 @@ func (s *SSHConfig) getSnapshotList() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *SSHConfig) getZFSList() error {
|
||||
if *debugFlag {
|
||||
log.Printf("SSHConfig.getZFSList : %s : Start", s.name)
|
||||
}
|
||||
if !s.logged {
|
||||
return fmt.Errorf("Client %s not logged in.", s.name)
|
||||
}
|
||||
|
||||
session, err := s.client.NewSession()
|
||||
if err != nil {
|
||||
if *debugFlag {
|
||||
log.Printf("SSHConfig.getZFSList : %s : client.NewSession() : %s", s.name, err)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
var b bytes.Buffer
|
||||
session.Stdout = &b
|
||||
|
||||
err = session.Run("TZ=\"" + cfg.Timezone + "\" zfs list -H -o name,mountpoint")
|
||||
if err != nil {
|
||||
if *debugFlag {
|
||||
log.Printf("SSHConfig.getZFSList : %s : session.Run() : %s", s.name, err)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
s.zfs = make(map[string]string)
|
||||
|
||||
csvReader := csv.NewReader(&b)
|
||||
csvReader.Comma = '\t'
|
||||
csvReader.FieldsPerRecord = 2
|
||||
|
||||
csvData, err := csvReader.ReadAll()
|
||||
if err != nil {
|
||||
if *debugFlag {
|
||||
log.Printf("SSHConfig.getZFSList : %s : csvReader.ReadAll() : %s", s.name, err)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
for _, rec := range csvData {
|
||||
s.zfs[rec[0]] = rec[1]
|
||||
}
|
||||
|
||||
if *debugFlag {
|
||||
log.Printf("SSHConfig.getZFSList : %s : read %d zfs file systems", s.name, len(s.zfs))
|
||||
}
|
||||
|
||||
session.Close()
|
||||
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func (s *SSHConfig) isZFS(path string) bool {
|
||||
if *debugFlag {
|
||||
log.Printf("SSHConfig.isZFS : Start %s:%s", s.name, path)
|
||||
}
|
||||
if len(s.zfs) == 0 {
|
||||
err := s.getZFSList()
|
||||
if err != nil {
|
||||
if *debugFlag {
|
||||
log.Printf("SSHConfig.isZFS : s.getZFSList(%s) : %s", s.name, err)
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
_, ok := s.zfs[path]
|
||||
if ok {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (s *SSHConfig) exec(cmd string) error {
|
||||
func (s *SSHConfig) exec(cmd string) (b *bytes.Buffer, err error) {
|
||||
if *debugFlag {
|
||||
log.Printf("SSHConfig.exec : %s : Start %s", s.name, cmd)
|
||||
}
|
||||
@@ -230,61 +154,22 @@ func (s *SSHConfig) exec(cmd string) error {
|
||||
if *debugFlag {
|
||||
log.Printf("SSHConfig.exec : %s : client().NewSession(%s) : %s", s.name, cmd, err)
|
||||
}
|
||||
return err
|
||||
return
|
||||
}
|
||||
|
||||
var buf bytes.Buffer
|
||||
b = &buf
|
||||
session.Stdout = b
|
||||
|
||||
err = session.Run("TZ=\"" + cfg.Timezone + "\" " + cmd)
|
||||
if err != nil {
|
||||
if *debugFlag {
|
||||
log.Printf("SSHConfig.exec : session(%s).Run(%s) : %s", s.name, cmd, err)
|
||||
}
|
||||
return err
|
||||
return
|
||||
}
|
||||
|
||||
session.Close()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *SSHConfig) createZFS(path string) error {
|
||||
if *debugFlag {
|
||||
log.Printf("SSHConfig.createZFS : Start %s:%s", s.name, path)
|
||||
}
|
||||
if len(s.zfs) == 0 {
|
||||
err := s.getZFSList()
|
||||
if err != nil {
|
||||
if *debugFlag {
|
||||
log.Printf("SSHConfig.createZFS : s.getZFSList(%s) : %s", s.name, err)
|
||||
}
|
||||
return err
|
||||
}
|
||||
}
|
||||
p := strings.Split(path, `/`)
|
||||
var base string
|
||||
for _, d := range p {
|
||||
if base == "" {
|
||||
base = d
|
||||
} else {
|
||||
base = base + `/` + d
|
||||
}
|
||||
if _, ok := s.zfs[base]; !ok {
|
||||
|
||||
if *debugFlag {
|
||||
log.Printf("SSHConfig.createZFS : Creating %s:%s", s.name, base)
|
||||
}
|
||||
|
||||
err := s.exec("zfs create -o mountpoint=none " + base)
|
||||
if err != nil {
|
||||
if *debugFlag {
|
||||
log.Printf("SSHConfig.createZFS : s.exec(%s) : %s", s.name, err)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
s.zfs[base] = "none"
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user