added snippet upload
This commit is contained in:
parent
349afa60e1
commit
861ca4edf7
7 changed files with 281 additions and 81 deletions
82
userdata.go
82
userdata.go
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue