mirror of
https://github.com/containers/podman.git
synced 2025-09-14 03:21:12 +08:00
Initial checkin from CRI-O repo
Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
This commit is contained in:
105
vendor/github.com/mistifyio/go-zfs/zpool.go
generated
vendored
Normal file
105
vendor/github.com/mistifyio/go-zfs/zpool.go
generated
vendored
Normal file
@ -0,0 +1,105 @@
|
||||
package zfs
|
||||
|
||||
// ZFS zpool states, which can indicate if a pool is online, offline,
|
||||
// degraded, etc. More information regarding zpool states can be found here:
|
||||
// https://docs.oracle.com/cd/E19253-01/819-5461/gamno/index.html.
|
||||
const (
|
||||
ZpoolOnline = "ONLINE"
|
||||
ZpoolDegraded = "DEGRADED"
|
||||
ZpoolFaulted = "FAULTED"
|
||||
ZpoolOffline = "OFFLINE"
|
||||
ZpoolUnavail = "UNAVAIL"
|
||||
ZpoolRemoved = "REMOVED"
|
||||
)
|
||||
|
||||
// Zpool is a ZFS zpool. A pool is a top-level structure in ZFS, and can
|
||||
// contain many descendent datasets.
|
||||
type Zpool struct {
|
||||
Name string
|
||||
Health string
|
||||
Allocated uint64
|
||||
Size uint64
|
||||
Free uint64
|
||||
}
|
||||
|
||||
// zpool is a helper function to wrap typical calls to zpool.
|
||||
func zpool(arg ...string) ([][]string, error) {
|
||||
c := command{Command: "zpool"}
|
||||
return c.Run(arg...)
|
||||
}
|
||||
|
||||
// GetZpool retrieves a single ZFS zpool by name.
|
||||
func GetZpool(name string) (*Zpool, error) {
|
||||
out, err := zpool("get", "all", "-p", name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// there is no -H
|
||||
out = out[1:]
|
||||
|
||||
z := &Zpool{Name: name}
|
||||
for _, line := range out {
|
||||
if err := z.parseLine(line); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return z, nil
|
||||
}
|
||||
|
||||
// Datasets returns a slice of all ZFS datasets in a zpool.
|
||||
func (z *Zpool) Datasets() ([]*Dataset, error) {
|
||||
return Datasets(z.Name)
|
||||
}
|
||||
|
||||
// Snapshots returns a slice of all ZFS snapshots in a zpool.
|
||||
func (z *Zpool) Snapshots() ([]*Dataset, error) {
|
||||
return Snapshots(z.Name)
|
||||
}
|
||||
|
||||
// CreateZpool creates a new ZFS zpool with the specified name, properties,
|
||||
// and optional arguments.
|
||||
// A full list of available ZFS properties and command-line arguments may be
|
||||
// found here: https://www.freebsd.org/cgi/man.cgi?zfs(8).
|
||||
func CreateZpool(name string, properties map[string]string, args ...string) (*Zpool, error) {
|
||||
cli := make([]string, 1, 4)
|
||||
cli[0] = "create"
|
||||
if properties != nil {
|
||||
cli = append(cli, propsSlice(properties)...)
|
||||
}
|
||||
cli = append(cli, name)
|
||||
cli = append(cli, args...)
|
||||
_, err := zpool(cli...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &Zpool{Name: name}, nil
|
||||
}
|
||||
|
||||
// Destroy destroys a ZFS zpool by name.
|
||||
func (z *Zpool) Destroy() error {
|
||||
_, err := zpool("destroy", z.Name)
|
||||
return err
|
||||
}
|
||||
|
||||
// ListZpools list all ZFS zpools accessible on the current system.
|
||||
func ListZpools() ([]*Zpool, error) {
|
||||
args := []string{"list", "-Ho", "name"}
|
||||
out, err := zpool(args...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var pools []*Zpool
|
||||
|
||||
for _, line := range out {
|
||||
z, err := GetZpool(line[0])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
pools = append(pools, z)
|
||||
}
|
||||
return pools, nil
|
||||
}
|
Reference in New Issue
Block a user