summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--digitalocean/droplet.go3
-rw-r--r--digitalocean/listKeys.go25
-rw-r--r--digitalocean/main.go23
-rw-r--r--digitalocean/poweron.go45
-rw-r--r--digitalocean/structs.go2
-rw-r--r--examples/control-panel-digitalocean/Makefile2
6 files changed, 80 insertions, 20 deletions
diff --git a/digitalocean/droplet.go b/digitalocean/droplet.go
index 45deb3d..6c0da08 100644
--- a/digitalocean/droplet.go
+++ b/digitalocean/droplet.go
@@ -20,6 +20,7 @@ func (d *DigitalOcean) NewDroplet(dd *godo.Droplet) *Droplet {
droplet := new(Droplet)
droplet.ready = false
droplet.poll = dd // the information polled from the digital ocean API
+ droplet.ID = dd.ID
if (d.dGrid == nil) {
d.dGrid = d.group.NewGrid("grid", 9, 1).Pad()
@@ -104,11 +105,13 @@ func (d *Droplet) Update(dpoll *godo.Droplet) {
func (d *Droplet) PowerOn() {
if ! d.Exists() {return}
log.Info("droplet.PowerOn() should do it here")
+ myDo.PowerOn(d.ID)
}
func (d *Droplet) PowerOff() {
if ! d.Exists() {return}
log.Info("droplet.PowerOff() here")
+ myDo.PowerOff(d.ID)
}
func (d *Droplet) Destroy() {
diff --git a/digitalocean/listKeys.go b/digitalocean/listKeys.go
index 000a66d..97c82bb 100644
--- a/digitalocean/listKeys.go
+++ b/digitalocean/listKeys.go
@@ -2,30 +2,37 @@ package digitalocean
import (
"context"
- "fmt"
"golang.org/x/oauth2"
"github.com/digitalocean/godo"
+
+ "go.wit.com/log"
)
-func GetSSHKeyID(token, name string) (string, error) {
- tokenSource := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: token})
+// func (d *DigitalOcean) ListDroplets() bool {
+func (d *DigitalOcean) ListSSHKeyID() error {
+ tokenSource := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: d.token})
oauthClient := oauth2.NewClient(context.Background(), tokenSource)
client := godo.NewClient(oauthClient)
// List all keys.
keys, _, err := client.Keys.List(context.Background(), &godo.ListOptions{})
if err != nil {
- return "", err
+ return err
}
// Find the key by name.
- for _, key := range keys {
- if key.Name == name {
- return key.Fingerprint, nil
- }
+ for i, key := range keys {
+ log.Info("found ssh i =", i)
+ log.Info("found ssh key.Name =", key.Name)
+ log.Info("found ssh key.Fingerprint =", key.Fingerprint)
+ log.Info("found ssh key:", key)
+ // if key.Name == name {
+ // return key.Fingerprint, nil
+ // }
}
- return "", fmt.Errorf("SSH Key not found")
+ // return fmt.Errorf("SSH Key not found")
+ return nil
}
diff --git a/digitalocean/main.go b/digitalocean/main.go
index de96521..5c40498 100644
--- a/digitalocean/main.go
+++ b/digitalocean/main.go
@@ -58,18 +58,21 @@ func (d *DigitalOcean) Hide() {
func (d *DigitalOcean) Update() bool {
if ! d.Ready() {return false}
- if ! d.ListDroplets() {
+ d.ListSSHKeyID()
+ if d.ListDroplets() {
+ for _, droplet := range d.dpolled {
+ // check if the droplet ID already exists
+ if (d.dropMap[droplet.ID] == nil) {
+ d.dropMap[droplet.ID] = d.NewDroplet(&droplet)
+ } else {
+ log.Info("droplet.Update()", droplet.ID, droplet.Name, "already exists")
+ d.dropMap[droplet.ID].Update(&droplet)
+ continue
+ }
+ }
+ } else {
log.Error(d.err, "Error listing droplets")
return false
}
- for _, droplet := range d.dpolled {
- // check if the droplet ID already exists
- if (d.dropMap[droplet.ID] != nil) {
- log.Info("droplet.Update()", droplet.ID, droplet.Name, "already exists")
- d.dropMap[droplet.ID].Update(&droplet)
- continue
- }
- d.dropMap[droplet.ID] = d.NewDroplet(&droplet)
- }
return true
}
diff --git a/digitalocean/poweron.go b/digitalocean/poweron.go
new file mode 100644
index 0000000..d897f6a
--- /dev/null
+++ b/digitalocean/poweron.go
@@ -0,0 +1,45 @@
+package digitalocean
+
+import (
+ "context"
+
+ "golang.org/x/oauth2"
+
+ "github.com/digitalocean/godo"
+
+ "go.wit.com/log"
+)
+
+func (d *DigitalOcean) PowerOn(dropletID int) error {
+ tokenSource := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: d.token})
+ oauthClient := oauth2.NewClient(context.Background(), tokenSource)
+ client := godo.NewClient(oauthClient)
+
+ ctx := context.TODO()
+
+ // Create a request to power on the droplet.
+ _, _, err := client.DropletActions.PowerOn(ctx, dropletID)
+ if err != nil {
+ return err
+ }
+
+ log.Printf("Power-on signal sent to droplet with ID: %d\n", dropletID)
+ return nil
+}
+
+func (d *DigitalOcean) PowerOff(dropletID int) error {
+ tokenSource := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: d.token})
+ oauthClient := oauth2.NewClient(context.Background(), tokenSource)
+ client := godo.NewClient(oauthClient)
+
+ ctx := context.TODO()
+
+ // Create a request to power on the droplet.
+ _, _, err := client.DropletActions.PowerOff(ctx, dropletID)
+ if err != nil {
+ return err
+ }
+
+ log.Printf("Power-on signal sent to droplet with ID: %d\n", dropletID)
+ return nil
+}
diff --git a/digitalocean/structs.go b/digitalocean/structs.go
index 6f12994..cfd400d 100644
--- a/digitalocean/structs.go
+++ b/digitalocean/structs.go
@@ -41,6 +41,8 @@ type ipButton struct {
}
type Droplet struct {
+ ID int
+
ready bool
hidden bool
err error
diff --git a/examples/control-panel-digitalocean/Makefile b/examples/control-panel-digitalocean/Makefile
index 39a387a..f1edb86 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 --gui-debug
+ ./control-panel-digitalocean --gui-debug --log-debug
build-release:
go get -v -u -x .