digitalocean droplet power on & off work
Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
parent
be03e85c2d
commit
44730e1b91
|
@ -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() {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
|
@ -41,6 +41,8 @@ type ipButton struct {
|
|||
}
|
||||
|
||||
type Droplet struct {
|
||||
ID int
|
||||
|
||||
ready bool
|
||||
hidden bool
|
||||
err error
|
||||
|
|
|
@ -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 .
|
||||
|
|
Loading…
Reference in New Issue