@@ -2,27 +2,54 @@ package client
22
33import (
44 "fmt"
5+ "strings"
56
67 "github.com/coreos/fleet/job"
78)
89
910// Destroy units for a given target
10- func (c * FleetClient ) Destroy (targets string ) (err error ) {
11- component , num , err := splitTarget (targets )
11+ func (c * FleetClient ) Destroy (target string ) (err error ) {
12+ component , num , err := splitTarget (target )
1213 if err != nil {
1314 return
1415 }
15- if num == 0 {
16- num , err = c .lastUnit (component )
17- if err != nil {
18- return err
19- }
16+ if strings .HasSuffix (component , "-data" ) {
17+ err = c .destroyDataUnit (component )
18+ } else {
19+ err = c .destroyServiceUnit (component , num )
2020 }
21+ if err != nil {
22+ return err
23+ }
24+ return
25+ }
26+
27+ func (c * FleetClient ) destroyServiceUnit (component string , num int ) (err error ) {
2128 name , err := formatUnitName (component , num )
2229 if err != nil {
2330 return err
2431 }
32+ desiredState := string (job .JobStateInactive )
33+ err = c .Fleet .SetUnitTargetState (name , desiredState )
34+ if err != nil {
35+ return err
36+ }
37+ outchan , errchan := waitForUnitStates ([]string {name }, desiredState )
38+ err = printUnitState (name , outchan , errchan )
39+ if err != nil {
40+ return err
41+ }
42+ if err = c .Fleet .DestroyUnit (name ); err != nil {
43+ return fmt .Errorf ("failed destroying job %s: %v" , name , err )
44+ }
45+ return err
46+ }
2547
48+ func (c * FleetClient ) destroyDataUnit (component string ) (err error ) {
49+ name , err := formatUnitName (component , 0 )
50+ if err != nil {
51+ return err
52+ }
2653 desiredState := string (job .JobStateInactive )
2754 err = c .Fleet .SetUnitTargetState (name , desiredState )
2855 if err != nil {
@@ -36,5 +63,6 @@ func (c *FleetClient) Destroy(targets string) (err error) {
3663 if err = c .Fleet .DestroyUnit (name ); err != nil {
3764 return fmt .Errorf ("failed destroying job %s: %v" , name , err )
3865 }
39- return
66+ return err
67+
4068}
0 commit comments