// Copyright (C) 2020 Marius Schellenberger package pve import ( "errors" "fmt" "net/url" "strings" ) const PVEScheme = "pve" var ( ErrInvalidPVEURL = errors.New("invalid pve url scheme") ErrNoID = errors.New("missing id in url") ) func ParseURL(s string) (pool, node, id string, err error) { u, err := url.Parse(s) if err != nil { return } if u.Scheme != PVEScheme { err = ErrInvalidPVEURL return } a := strings.Split(u.Path, "/") if len(a) != 3 { err = ErrInvalidPVEURL return } if a[2] == "" { err = ErrNoID return } return u.Host, a[1], a[2], nil } func NewURL(pool, node, id string) string { return fmt.Sprintf("%s://%s/%s/%s", PVEScheme, pool, node, id) } func K8sURL(url string) (string, error) { pool, _, id, err := ParseURL(url) if err != nil { return "", nil } return NewURL(pool, "", id), nil }