Files
zeekay b61441f7d7 Volume: node-local persistent volumes, under our own name
A fork of Rancher's local-path-provisioner at v0.0.36. The behaviour is
unchanged and deliberately so — a directory on the node a pod lands on is
the right thing for a disk. What changes is identity.

The provisioner answers to hanzo.ai/volume rather than rancher.io/local-path.
That is not branding: two provisioners sharing one name race for the same
claims, and a stock k3s carries the upstream one, so a cluster running both
would settle our storage by chance. Data lives at /var/lib/hanzo/volume, so
reading a Hanzo cluster does not mean learning another vendor's directory.

Apache-2.0 as published, unaltered, with Rancher's attribution in NOTICE.

The README says what this is not: durability. A volume here dies with its
node. That is hanzoai/replicate's question, one layer up, and keeping the
two apart is what lets the disk stay this simple.
2026-09-07 17:30:01 -07:00

64 lines
1.1 KiB
Go

package main
import (
"flag"
"fmt"
"os"
"syscall"
)
var (
dirMode string
path string
sizeInBytes string
action string
)
const (
SETUP = "create"
TEARDOWN = "delete"
)
func init() {
flag.StringVar(&path, "p", "", "Absolute path")
flag.StringVar(&sizeInBytes, "s", "", "Size in bytes")
flag.StringVar(&dirMode, "m", "", "Dir mode")
flag.StringVar(&action, "a", "", fmt.Sprintf("Action name. Can be '%s' or '%s'", SETUP, TEARDOWN))
}
func main() {
flag.Parse()
if action != SETUP && action != TEARDOWN {
fmt.Fprintf(os.Stderr, "Incorrect action: %s\n", action)
os.Exit(1)
}
if path == "" {
fmt.Fprintf(os.Stderr, "Path is empty\n")
os.Exit(1)
}
if path == "/" {
fmt.Fprintf(os.Stderr, "Path cannot be '/'\n")
os.Exit(1)
}
if action == TEARDOWN {
err := os.RemoveAll(path)
if err != nil {
fmt.Fprintf(os.Stderr, "Cannot remove directory %s: %s\n", path, err)
os.Exit(1)
}
return
}
syscall.Umask(0)
err := os.MkdirAll(path, 0777)
if err != nil {
fmt.Fprintf(os.Stderr, "Cannot create directory %s: %s\n", path, err)
os.Exit(1)
}
}