From 3d68cef8ba4d94823f8e491e3290e08cf6e92573 Mon Sep 17 00:00:00 2001 From: ston1th Date: Sun, 25 Oct 2020 18:26:14 +0100 Subject: [PATCH] added resources --- server.go | 57 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/server.go b/server.go index beedb94..3e37662 100644 --- a/server.go +++ b/server.go @@ -40,8 +40,8 @@ func (s *Server) UserDataSnippet(storage string) string { func (s *Server) body() (b httpbody) { b = httpbody{ - "memory": strconv.FormatInt(s.Resources.Memory, 10), - "cores": strconv.FormatInt(s.Resources.Cores, 10), + "memory": s.Resources.Memory.String(), + "cores": s.Resources.Cores.String(), "name": s.Name, "nameserver": s.Nameserver.String(), "searchdomain": s.SearchDomain, @@ -76,10 +76,31 @@ func (s *Server) K8sID() string { } type Resources struct { - Memory int64 - Cores int64 - BootDisk string - BootDiskSize string + Cores Cores `json:"cores"` + Memory Memory `json:"memory"` + Disk Disk `json:"disk"` +} + +type Cores uint64 + +func (c Cores) String() string { + return strconv.FormatUint(uint64(c), 10) +} + +type Memory uint64 + +func (m Memory) String() string { + return strconv.FormatUint(uint64(m)*1024, 10) +} + +type Disk struct { + Storage string `json:"storage"` + Name string `json:"name"` + Size uint64 `json:"size"` +} + +func (d Disk) String() string { + return strconv.FormatUint(d.Size, 10) + "G" } type Nameserver []string @@ -117,19 +138,27 @@ func (sc serverConfig) Server(node, id string) (s *Server, err error) { // } case "memory": if v, ok := sc[k].(float64); ok { - s.Resources.Memory = int64(v) + s.Resources.Memory = Memory(uint64(v) / 1024) } case "cores": if v, ok := sc[k].(float64); ok { - s.Resources.Cores = int64(v) + s.Resources.Cores = Cores(uint64(v)) } case "bootdisk": if v, ok := sc[k].(string); ok { - s.Resources.BootDisk = v + s.Resources.Disk.Name = v if val, ok := sc[v].(string); ok { - for _, o := range strings.Split(val, ",") { + vals := strings.Split(val, ",") + if len(vals) > 0 { + storage := strings.Split(vals[0], ":") + if len(storage) > 0 { + s.Resources.Disk.Storage = storage[0] + } + } + for _, o := range vals { if strings.HasPrefix(o, "size=") { - s.Resources.BootDiskSize = o[5:] + size, _ := strconv.ParseUint(o[5:], 10, 64) + s.Resources.Disk.Size = size break } } @@ -388,8 +417,8 @@ func (c *ServerClient) updateConfig(ctx context.Context, s *Server, body httpbod func (c *ServerClient) resizeDisk(ctx context.Context, s *Server) (err error) { body := httpbody{ - "disk": s.Resources.BootDisk, - "size": s.Resources.BootDiskSize, + "disk": s.Resources.Disk.Name, + "size": s.Resources.Disk.String(), } req, err := c.client.NewRequest(ctx, "PUT", fmt.Sprintf("/nodes/%s/qemu/%s/resize", s.Node, s.ID), body.Reader()) if err != nil { @@ -421,7 +450,7 @@ func (c *ServerClient) Update(ctx context.Context, s *Server) (t *Task, err erro e = append(e, fmt.Sprintf("config: %s", cfg)) } } - if cur.Resources.BootDiskSize != s.Resources.BootDiskSize { + if cur.Resources.Disk.Size != s.Resources.Disk.Size { resize := c.resizeDisk(ctx, s) if resize != nil { e = append(e, fmt.Sprintf("resize: %s", resize))