buildlet: add DestroyVM method to Client
And use it in gomote and release tools.
Change-Id: I87fa013d6d6729e7305dacd137be1b3d3b02f5f4
Reviewed-on: https://go-review.googlesource.com/3771
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/cmd/release/release.go b/cmd/release/release.go
index 82599f2..6a5aad1 100644
--- a/cmd/release/release.go
+++ b/cmd/release/release.go
@@ -108,7 +108,10 @@
defer func() {
log.Printf("%v: Destroying VM.", instance)
- haltAndDestroy(client, instance)
+ err := client.DestroyVM(projTokenSource(), *project, *zone, instance)
+ if err != nil {
+ log.Printf("%v: Destroying VM: %v", instance, err)
+ }
}()
// Push source to VM
@@ -175,49 +178,6 @@
return nil
}
-func haltAndDestroy(bc *buildlet.Client, instance string) {
- // TODO(adg): move this to buildlet library.
-
- // Ask buildlet to kill itself, and tell GCE to kill it too.
- gceErrc := make(chan error, 1)
- buildletErrc := make(chan error, 1)
- go func() {
- gceErrc <- buildlet.DestroyVM(projTokenSource(), *project, *zone, instance)
- }()
- go func() {
- buildletErrc <- bc.Destroy()
- }()
- timeout := time.NewTimer(5 * time.Second)
- defer timeout.Stop()
-
- var gceDone, buildletDone bool
- for !gceDone || !buildletDone {
- select {
- case err := <-gceErrc:
- if err != nil {
- log.Printf("%v: GCE: %v", instance, err)
- } else {
- log.Printf("%v: Requested GCE delete.", instance)
- }
- gceDone = true
- case err := <-buildletErrc:
- if err != nil {
- log.Printf("%v: Buildlet: %v", instance, err)
- } else {
- log.Printf("%v: Requested buildlet to shut down.", instance)
- }
- buildletDone = true
- case <-timeout.C:
- if !buildletDone {
- log.Printf("%v: timeout asking buildlet to shut down", instance)
- }
- if !gceDone {
- log.Printf("%v: timeout asking GCE to delete builder VM", instance)
- }
- }
- }
-}
-
func projTokenSource() oauth2.TokenSource {
ts, err := auth.ProjectTokenSource(*project, compute.ComputeScope)
if err != nil {