Add gocage list snapshot myjail
This commit is contained in:
parent
910be4ea31
commit
ef78245902
87
cmd/snapshots.go
Normal file
87
cmd/snapshots.go
Normal file
@ -0,0 +1,87 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
"strings"
|
||||
)
|
||||
|
||||
/********************************************************************************
|
||||
* List all snapshots jails have
|
||||
*******************************************************************************/
|
||||
func ListJailsSnapshots(args []string) {
|
||||
var jailNames []string
|
||||
|
||||
if len(args) > 0 {
|
||||
for _, a := range args {
|
||||
jailNames = append(jailNames, a)
|
||||
}
|
||||
}
|
||||
|
||||
if len(jailNames) == 0 || len(args) == 0 {
|
||||
for _, j := range gJails {
|
||||
listJailSnapshots(j)
|
||||
}
|
||||
} else {
|
||||
for _, cj := range gJails {
|
||||
for _, jn := range jailNames {
|
||||
if strings.EqualFold(cj.Name, jn) {
|
||||
listJailSnapshots(cj)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/********************************************************************************
|
||||
* List all snapshots a jail have
|
||||
*******************************************************************************/
|
||||
func listJailSnapshots(jail Jail) {
|
||||
var snapshots []Snapshot
|
||||
|
||||
// 1. List all datasets
|
||||
// TODO : Include mounted filesystems?
|
||||
rs := strings.Split(jail.RootPath, "/")
|
||||
rootDataset := strings.Join(rs[:len(rs)-1], "/")
|
||||
cmd := fmt.Sprintf("zfs list -r -H -o name,mountpoint,used,referenced,creation -t snapshot %s", rootDataset)
|
||||
out, err := executeCommand(cmd)
|
||||
if err != nil {
|
||||
fmt.Printf("Error: %s\n", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Printf(out)
|
||||
|
||||
dateLayout := "Mon Jan _2 15:04 2006"
|
||||
loc, _ := time.LoadLocation(gTimeZone)
|
||||
|
||||
for _, line := range strings.Split(out, "\n") {
|
||||
if len(line) > 0 {
|
||||
ls := strings.Split(line, "\t")
|
||||
// Parse creation date so we can use it to sort snapshots
|
||||
creationts, err := time.ParseInLocation(dateLayout, ls[4], loc)
|
||||
if err != nil {
|
||||
fmt.Println("Error while parsing date %s:", ls[4], err)
|
||||
return
|
||||
}
|
||||
// Get subdir to append to snapshot name
|
||||
subdir := strings.Replace(strings.Split(ls[0], "@")[0], rootDataset, "", 1)
|
||||
|
||||
snapshots = append(snapshots, Snapshot{Dsname: ls[0],
|
||||
Name: fmt.Sprintf("%s%s", strings.Split(ls[0], "@")[1], subdir),
|
||||
Mountpoint: ls[1],
|
||||
Used: ls[2],
|
||||
Referenced: ls[3],
|
||||
Creation: creationts})
|
||||
}
|
||||
}
|
||||
|
||||
// Sort snapshots by creation date
|
||||
ss := initSnapshotSortStruct()
|
||||
SnapshotsOrderedBy(ss.CreationInc).Sort(snapshots)
|
||||
|
||||
for _, s := range snapshots {
|
||||
fmt.Printf("| %s | %s | %s | %s |\n", s.Name, s.Creation.String(), s.Referenced, s.Used)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user