summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2023-12-30 09:49:30 -0600
committerJeff Carr <[email protected]>2023-12-30 09:49:30 -0600
commit7532fb5ff5d0178bb9b1cf0a1cd6ba7c30bb7c2b (patch)
tree9cd3f1fbbbe9393ccec871258f5e6e8522b6cc04
parentec5cbbe203596327d42ac626dcc9c55c604b9139 (diff)
create a basic digitalocean gui object
Signed-off-by: Jeff Carr <[email protected]>
-rw-r--r--digitalocean/mainWindow.go65
-rw-r--r--digitalocean/structs.go28
-rw-r--r--examples/control-panel-digitalocean/Makefile2
-rw-r--r--examples/control-panel-digitalocean/main.go131
-rw-r--r--examples/control-panel-digitalocean/old.go115
5 files changed, 230 insertions, 111 deletions
diff --git a/digitalocean/mainWindow.go b/digitalocean/mainWindow.go
index 78f2d03..6bffaf5 100644
--- a/digitalocean/mainWindow.go
+++ b/digitalocean/mainWindow.go
@@ -1,18 +1,65 @@
package digitalocean
import (
- "log"
-
+ "os"
+ "go.wit.com/log"
"go.wit.com/gui"
)
-func MakeWindow(n *gui.Node) *gui.Node {
- log.Println("digitalocean MakeWindow() START")
+var myDo *DigitalOcean
+
+// This is initializes the main DO object
+// You can only have one of these
+func New(p *gui.Node) *DigitalOcean {
+ if myDo != nil {return myDo}
+ myDo = new(DigitalOcean)
+ myDo.parent = p
+
+ myDo.ready = false
+
+ // Your personal API token from DigitalOcean.
+ myDo.token = os.Getenv("DIGITALOCEAN_TOKEN")
- win := n.NewWindow("DigitalOcean Control Panel")
+ myDo.window = p.NewWindow("DigitalOcean Control Panel")
+
+ // make a group label and a grid
+ myDo.group = myDo.window.NewGroup("data").Pad()
+ myDo.grid = myDo.group.NewGrid("grid", 2, 1).Pad()
+
+ myDo.ready = true
+ return myDo
+}
+
+// Returns true if the status is valid
+func (d *DigitalOcean) Ready() bool {
+ if d == nil {return false}
+ return d.ready
+}
+
+func (d *DigitalOcean) Show() {
+ if ! d.Ready() {return}
+ log.Info("digitalocean.Show() window")
+ if d.hidden {
+ d.window.Show()
+ }
+ d.hidden = false
+}
+
+func (d *DigitalOcean) Hide() {
+ if ! d.Ready() {return}
+ log.Info("digitalocean.Hide() window")
+ if ! d.hidden {
+ d.window.Hide()
+ }
+ d.hidden = true
+}
- // box := g1.NewGroup("data")
- group := win.NewGroup("data")
- log.Println("digitalocean MakeWindow() END", group)
- return win
+func (d *DigitalOcean) Update() bool {
+ if ! d.Ready() {return false}
+ err := ListDroplets(d.token)
+ if err != nil {
+ log.Error(err, "Error listing droplets")
+ return false
+ }
+ return true
}
diff --git a/digitalocean/structs.go b/digitalocean/structs.go
new file mode 100644
index 0000000..2c1fc55
--- /dev/null
+++ b/digitalocean/structs.go
@@ -0,0 +1,28 @@
+/*
+ The Digital Ocean Struct
+*/
+
+package digitalocean
+
+import (
+ "go.wit.com/gui"
+ "go.wit.com/gui/gadgets"
+)
+
+type DigitalOcean struct {
+ ready bool
+ hidden bool
+
+ token string // You're Digital Ocean API key
+
+ parent *gui.Node // should be the root of the 'gui' package binary tree
+ window *gui.Node // our window for displaying digital ocean droplets
+ group *gui.Node // our window for displaying digital ocean droplets
+ grid *gui.Node // our window for displaying digital ocean droplets
+
+ // Primary Directives
+ status *gadgets.OneLiner
+ summary *gadgets.OneLiner
+ statusIPv4 *gadgets.OneLiner
+ statusIPv6 *gadgets.OneLiner
+}
diff --git a/examples/control-panel-digitalocean/Makefile b/examples/control-panel-digitalocean/Makefile
index dc158f8..39a387a 100644
--- a/examples/control-panel-digitalocean/Makefile
+++ b/examples/control-panel-digitalocean/Makefile
@@ -1,6 +1,6 @@
# export GO111MODULE="off"
run: build
- ./control-panel-digitalocean
+ ./control-panel-digitalocean --gui-debug
build-release:
go get -v -u -x .
diff --git a/examples/control-panel-digitalocean/main.go b/examples/control-panel-digitalocean/main.go
index b1228f7..b8170ca 100644
--- a/examples/control-panel-digitalocean/main.go
+++ b/examples/control-panel-digitalocean/main.go
@@ -1,124 +1,53 @@
package main
import (
- "context"
- "fmt"
- "os"
-
- "golang.org/x/oauth2"
-
- "go.wit.com/log"
+ // "go.wit.com/log"
"go.wit.com/gui"
- "github.com/digitalocean/godo"
"go.wit.com/control-panel-dns/digitalocean"
)
-var title string = "Digital Ocean Control Panel"
-
-/*
-// createDroplet creates a new droplet in the specified region with the given name.
-func createDroplet(token, name, region, size, image string) (*godo.Droplet, error) {
- // Create an OAuth2 token.
- tokenSource := &oauth2.Token{
- AccessToken: token,
- }
-
- // Create an OAuth2 client.
- oauthClient := oauth2.NewClient(context.Background(), tokenSource)
-
- // Create a DigitalOcean client with the OAuth2 client.
- client := godo.NewClient(oauthClient)
-
- // Define the create request.
- createRequest := &godo.DropletCreateRequest{
- Name: name,
- Region: region,
- Size: size,
- Image: godo.DropletCreateImage{
- Slug: image,
- },
- }
-
- // Create the droplet.
- ctx := context.TODO()
- newDroplet, _, err := client.Droplets.Create(ctx, createRequest)
- if err != nil {
- return nil, err
- }
-
- return newDroplet, nil
-}
-*/
+var title string = "Cloud App"
+var myGui *gui.Node
+var myDo *digitalocean.DigitalOcean
func main() {
- // Your personal API token from DigitalOcean.
- token := os.Getenv("DIGITALOCEAN_TOKEN")
- if token == "" {
- log.Fatal("Please set your DigitalOcean API token in the DIGITALOCEAN_TOKEN environment variable")
- }
-
- // List droplets and their IP addresses.
- err := digitalocean.ListDroplets(token)
- if err != nil {
- log.Fatalf("Error listing droplets: %s\n", err)
- }
-
// initialize a new GO GUI instance
- myGui := gui.New().Default()
+ myGui = gui.New().Default()
- // draw the cloudflare control panel window
- win := digitalocean.MakeWindow(myGui)
- win.SetText(title)
+ // draw the main window
+ cloudApp(myGui)
// This is just a optional goroutine to watch that things are alive
gui.Watchdog()
gui.StandardExit()
-
- os.Exit(0)
-
- // Parameters for the droplet you wish to create.
- name := "ipv6.wit.com"
- region := "nyc1" // New York City region.
- size := "s-1vcpu-1gb" // Size of the droplet.
- image := "ubuntu-20-04-x64" // Image slug for Ubuntu 20.04 (LTS) x64.
-
- // Create a new droplet.
- droplet, err := createDropletNew(token, name, region, size, image)
- if err != nil {
- log.Fatalf("Something went wrong: %s\n", err)
- }
-
- fmt.Printf("Created droplet ID %d with name %s\n", droplet.ID, droplet.Name)
}
-// createDroplet creates a new droplet in the specified region with the given name.
-func createDropletNew(token, name, region, size, image string) (*godo.Droplet, error) {
- // Create an OAuth2 token.
- tokenSource := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: token})
+func cloudApp(n *gui.Node) *gui.Node {
+ win := n.NewWindow(title)
+
+ // make a group label and a grid
+ group := win.NewGroup("data").Pad()
+ grid := group.NewGrid("grid", 2, 1).Pad()
- // Create an OAuth2 client.
- oauthClient := oauth2.NewClient(context.Background(), tokenSource)
+ grid.NewButton("New()", func () {
+ myDo = digitalocean.New(myGui)
+ })
+ grid.NewLabel("initializes the DO golang gui package")
- // Create a DigitalOcean client with the OAuth2 client.
- client := godo.NewClient(oauthClient)
+ grid.NewButton("Show", func () {
+ myDo.Show()
+ })
+ grid.NewLabel("will show the DO window")
- // Define the create request.
- createRequest := &godo.DropletCreateRequest{
- Name: name,
- Region: region,
- Size: size,
- Image: godo.DropletCreateImage{
- Slug: image,
- },
- IPv6: true, // Enable IPv6
- }
+ grid.NewButton("Hide", func () {
+ myDo.Hide()
+ })
+ grid.NewLabel("will hide the DO window")
- // Create the droplet.
- ctx := context.TODO()
- newDroplet, _, err := client.Droplets.Create(ctx, createRequest)
- if err != nil {
- return nil, err
- }
+ grid.NewButton("Update", func () {
+ myDo.Update()
+ })
+ grid.NewLabel("polls DO via the API to find the state of all your droplets")
- return newDroplet, nil
+ return win
}
diff --git a/examples/control-panel-digitalocean/old.go b/examples/control-panel-digitalocean/old.go
new file mode 100644
index 0000000..f2709ad
--- /dev/null
+++ b/examples/control-panel-digitalocean/old.go
@@ -0,0 +1,115 @@
+package main
+
+import (
+ "context"
+ "fmt"
+ "os"
+
+ "golang.org/x/oauth2"
+
+ "go.wit.com/log"
+ "go.wit.com/gui"
+ "github.com/digitalocean/godo"
+ "go.wit.com/control-panel-dns/digitalocean"
+)
+
+/*
+// createDroplet creates a new droplet in the specified region with the given name.
+func createDroplet(token, name, region, size, image string) (*godo.Droplet, error) {
+ // Create an OAuth2 token.
+ tokenSource := &oauth2.Token{
+ AccessToken: token,
+ }
+
+ // Create an OAuth2 client.
+ oauthClient := oauth2.NewClient(context.Background(), tokenSource)
+
+ // Create a DigitalOcean client with the OAuth2 client.
+ client := godo.NewClient(oauthClient)
+
+ // Define the create request.
+ createRequest := &godo.DropletCreateRequest{
+ Name: name,
+ Region: region,
+ Size: size,
+ Image: godo.DropletCreateImage{
+ Slug: image,
+ },
+ }
+
+ // Create the droplet.
+ ctx := context.TODO()
+ newDroplet, _, err := client.Droplets.Create(ctx, createRequest)
+ if err != nil {
+ return nil, err
+ }
+
+ return newDroplet, nil
+}
+*/
+
+func oldMain() {
+ // Your personal API token from DigitalOcean.
+ token := os.Getenv("DIGITALOCEAN_TOKEN")
+ if token == "" {
+ log.Fatal("Please set your DigitalOcean API token in the DIGITALOCEAN_TOKEN environment variable")
+ }
+
+ // List droplets and their IP addresses.
+ err := digitalocean.ListDroplets(token)
+ if err != nil {
+ log.Fatalf("Error listing droplets: %s\n", err)
+ }
+
+ // This is just a optional goroutine to watch that things are alive
+ gui.Watchdog()
+ gui.StandardExit()
+
+ os.Exit(0)
+
+ // Parameters for the droplet you wish to create.
+ name := "ipv6.wit.com"
+ region := "nyc1" // New York City region.
+ size := "s-1vcpu-1gb" // Size of the droplet.
+ image := "ubuntu-20-04-x64" // Image slug for Ubuntu 20.04 (LTS) x64.
+
+ // Create a new droplet.
+ droplet, err := createDropletNew(token, name, region, size, image)
+ if err != nil {
+ log.Fatalf("Something went wrong: %s\n", err)
+ }
+
+ fmt.Printf("Created droplet ID %d with name %s\n", droplet.ID, droplet.Name)
+}
+
+// createDroplet creates a new droplet in the specified region with the given name.
+func createDropletNew(token, name, region, size, image string) (*godo.Droplet, error) {
+ // Create an OAuth2 token.
+ tokenSource := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: token})
+
+ // Create an OAuth2 client.
+ oauthClient := oauth2.NewClient(context.Background(), tokenSource)
+
+ // Create a DigitalOcean client with the OAuth2 client.
+ client := godo.NewClient(oauthClient)
+
+ // Define the create request.
+ createRequest := &godo.DropletCreateRequest{
+ Name: name,
+ Region: region,
+ Size: size,
+ Image: godo.DropletCreateImage{
+ Slug: image,
+ },
+ IPv6: true, // Enable IPv6
+ }
+
+ // Create the droplet.
+ ctx := context.TODO()
+ newDroplet, _, err := client.Droplets.Create(ctx, createRequest)
+ if err != nil {
+ return nil, err
+ }
+
+ return newDroplet, nil
+}