summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2023-12-31 12:12:55 -0600
committerJeff Carr <[email protected]>2023-12-31 12:12:55 -0600
commit1e0773ad9e7b275da288dcb40a412d67cc3456e4 (patch)
tree4d9227f662e93fe4f823ae0aeb25ff14c04addce
parent519e428e2f5e10d31cce39dd9b98428479d5c994 (diff)
select memory size
Signed-off-by: Jeff Carr <[email protected]>
-rw-r--r--digitalocean/create.go75
-rw-r--r--digitalocean/structs.go5
2 files changed, 74 insertions, 6 deletions
diff --git a/digitalocean/create.go b/digitalocean/create.go
index b931ecf..8d3abed 100644
--- a/digitalocean/create.go
+++ b/digitalocean/create.go
@@ -2,6 +2,7 @@ package digitalocean
import (
"context"
+ "strings"
"golang.org/x/oauth2"
"github.com/digitalocean/godo"
@@ -145,14 +146,13 @@ func InitCreateWindow() *windowCreate {
}
}
- var zone godo.Region
myCreate.region.Custom = func() {
s := myCreate.region.Get()
log.Info("create droplet region changed to:", s)
for _, region := range regions {
if s == region.Name {
log.Info("Found region! slug =", region.Slug, region)
- zone = region
+ myCreate.regionSelected = region
log.Info("Found region! Now update all the sizes count =", len(region.Sizes))
for _, size := range region.Sizes {
log.Info("Size: ", size)
@@ -161,10 +161,34 @@ func InitCreateWindow() *windowCreate {
}
}
- myCreate.size = gadgets.NewBasicDropdown(myCreate.grid, "Size")
+ myCreate.size = gadgets.NewBasicCombobox(myCreate.grid, "Size")
myCreate.size.Add("s-1vcpu-1gb")
myCreate.size.Add("s-1vcpu-1gb-amd")
myCreate.size.Add("s-1vcpu-1gb-intel")
+ myCreate.size.Custom = func() {
+ size := myCreate.size.Get()
+ log.Info("Create() need to verify size exists in region. Digital Ocean size.Slug =", size)
+ }
+
+ myCreate.memory = gadgets.NewBasicDropdown(myCreate.grid, "Memory")
+ myCreate.memory.Add("1 GB")
+ myCreate.memory.Add("2 GB")
+ myCreate.memory.Add("4 GB")
+ myCreate.memory.Add("8 GB")
+ myCreate.memory.Add("16 GB")
+ myCreate.memory.Add("32 GB")
+ myCreate.memory.Add("64 GB")
+ myCreate.memory.Add("96 GB")
+ myCreate.memory.Add("128 GB")
+ myCreate.memory.Add("256 GB")
+ myCreate.memory.Custom = func() {
+ for _, size := range myCreate.regionSelected.Sizes {
+ log.Info("Size: ", size)
+ }
+ myCreate.UpdateSize()
+ }
+
+ // myCreate.nvme = gadgets.NewBasicCheckbox(myCreate.grid, "NVMe")
myCreate.group.NewLabel("Create Droplet")
@@ -176,8 +200,9 @@ func InitCreateWindow() *windowCreate {
box.NewButton("Create", func () {
name := myCreate.name.Get()
size := myCreate.size.Get()
- log.Info("create droplet name =", name, "region =", zone.Slug, "size =", size)
- myDo.Create(name, zone.Slug, size)
+ region := myCreate.regionSelected.Slug
+ log.Info("create droplet name =", name, "region =", region, "size =", size)
+ myDo.Create(name, region, size)
myCreate.Hide()
})
@@ -186,6 +211,46 @@ func InitCreateWindow() *windowCreate {
return myCreate
}
+// Find the size
+func (d *windowCreate) UpdateSize() {
+ if ! d.Ready() {return}
+ log.Info("Now find the size. sizes count =", len(myCreate.regionSelected.Sizes))
+ var s string
+ m := myCreate.memory.Get()
+ switch m {
+ case "1 GB":
+ s = "cpu-1gb-"
+ case "2 GB":
+ s = "cpu-2gb-"
+ case "4 GB":
+ s = "cpu-4gb-"
+ case "8 GB":
+ s = "cpu-8gb-"
+ case "16 GB":
+ s = "cpu-16gb-"
+ case "32 GB":
+ s = "cpu-32gb-"
+ case "64 GB":
+ s = "cpu-64gb-"
+ case "96 GB":
+ s = "cpu-96gb-"
+ case "128 GB":
+ s = "cpu-128gb-"
+ case "256 GB":
+ s = "cpu-256gb-"
+ default:
+ s = "cpu-4gb-"
+ }
+ for _, size := range myCreate.regionSelected.Sizes {
+ if strings.Contains(size, s) {
+ log.Info("Found Size! size.Slug =", size, "contains", s)
+ myCreate.size.Set(size)
+ return
+ }
+ }
+ log.Info("memory =", myCreate.memory.Get())
+}
+
// Returns true if the status is valid
func (d *windowCreate) Ready() bool {
if d == nil {return false}
diff --git a/digitalocean/structs.go b/digitalocean/structs.go
index 4f948fe..04e7b61 100644
--- a/digitalocean/structs.go
+++ b/digitalocean/structs.go
@@ -47,10 +47,13 @@ type windowCreate struct {
group *gui.Node
grid *gui.Node
+ regionSelected godo.Region
tag *gadgets.OneLiner
name *gadgets.BasicEntry
region *gadgets.BasicDropdown
- size *gadgets.BasicDropdown
+ size *gadgets.BasicCombobox
+ memory *gadgets.BasicDropdown
+ // nvme *gadgets.BasicCheckbox
}
type ipButton struct {