added snippet upload

This commit is contained in:
ston1th 2020-10-25 11:58:48 +01:00
commit 861ca4edf7
7 changed files with 281 additions and 81 deletions

View file

@ -3,40 +3,51 @@
package pve
import (
"encoding/base64"
//"encoding/base64"
//"net/url"
"gopkg.in/yaml.v2"
"net/url"
)
var cloudConfig = []byte("#cloud-config\n")
func parseUserData(s string) (u *UserData, err error) {
s, err = url.QueryUnescape(s)
if err != nil {
return
}
b, err := base64.StdEncoding.DecodeString(s)
if err != nil {
return
}
return UnmarshalUserData(b)
}
const (
minBytes = 87
pad = "########################################################################\n"
)
//TODO
//func parseUserData(s string) (u *UserData, err error) {
// s, err = url.QueryUnescape(s)
// if err != nil {
// return
// }
// b, err := base64.StdEncoding.DecodeString(s)
// if err != nil {
// return
// }
// return UnmarshalUserData(b)
//}
func UnmarshalUserData(b []byte) (u *UserData, err error) {
u = new(UserData)
err = yaml.Unmarshal(b, u)
return
}
func MarshalUserData(u *UserData) ([]byte, error) {
if u == nil {
return nil, nil
}
b, err := yaml.Marshal(u)
if err == nil {
b = append(cloudConfig, b...)
}
return b, err
}
//TODO
//func MarshalUserData(u *UserData) ([]byte, error) {
// if u == nil {
// return nil, nil
// }
// b, err := yaml.Marshal(u)
// if err == nil {
// if len(b)+len(cloudConfig) < minBytes {
// b = append([]byte(pad[len(b):]), b...)
// }
// b = append(cloudConfig, b...)
// }
// return b, err
//}
type UserData struct {
Hostname string `yaml:"hostname"`
@ -53,12 +64,33 @@ type UserData struct {
WriteFiles []File `yaml:"write_files,omitempty"`
}
// TODO
// func (u *UserData) String() (s string, err error) {
// b, err := MarshalUserData(u)
// if err != nil {
// return
// }
// s = url.QueryEscape(base64.StdEncoding.EncodeToString(b))
// return
// }
func (u *UserData) String() (s string, err error) {
b, err := MarshalUserData(u)
b, err := u.Bytes()
if err != nil {
return
}
s = url.QueryEscape(base64.StdEncoding.EncodeToString(b))
s = string(b)
return
}
func (u *UserData) Bytes() (b []byte, err error) {
b, err = yaml.Marshal(u)
if err == nil {
if len(b)+len(cloudConfig) < minBytes {
b = append([]byte(pad[len(b):]), b...)
}
b = append(cloudConfig, b...)
}
return
}