diff options
| author | Jeff Carr <[email protected]> | 2023-12-31 12:12:55 -0600 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2023-12-31 12:12:55 -0600 |
| commit | 1e0773ad9e7b275da288dcb40a412d67cc3456e4 (patch) | |
| tree | 4d9227f662e93fe4f823ae0aeb25ff14c04addce | |
| parent | 519e428e2f5e10d31cce39dd9b98428479d5c994 (diff) | |
select memory size
Signed-off-by: Jeff Carr <[email protected]>
| -rw-r--r-- | digitalocean/create.go | 75 | ||||
| -rw-r--r-- | digitalocean/structs.go | 5 |
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 { |
