Skip to content

Commit 292ad2b

Browse files
author
Gabriel Monroy
committed
remove data containers from interface, cleanup target parsing
1 parent 6d4ca30 commit 292ad2b

11 files changed

Lines changed: 95 additions & 91 deletions

File tree

client/api.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ package client
22

33
// Client interface used to interact with the cluster control plane
44
type Client interface {
5-
Create(string, bool) error
5+
Create(string) error
66
Destroy(string) error
7-
Start(string, bool) error
7+
Start(string) error
88
Stop(string) error
99
Scale(string, int) error
1010
List() error

client/create.go

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,21 @@ package client
33
import (
44
"fmt"
55
"os"
6-
"regexp"
7-
"strconv"
6+
"strings"
87

98
"github.com/coreos/fleet/job"
109
"github.com/coreos/fleet/unit"
1110
)
1211

1312
// Create schedules a new unit for the given component
1413
// and blocks until the unit is loaded
15-
func (c *FleetClient) Create(component string, data bool) (err error) {
14+
func (c *FleetClient) Create(target string) (err error) {
1615
var (
1716
unitName string
1817
unitPtr *unit.Unit
1918
)
2019
// create unit
21-
if data == true {
22-
unitName, unitPtr, err = c.createDataUnit(component)
23-
} else {
24-
unitName, unitPtr, err = c.createServiceUnit(component)
25-
}
20+
unitName, unitPtr, err = c.createUnit(target)
2621
if err != nil {
2722
return err
2823
}
@@ -43,35 +38,36 @@ func (c *FleetClient) Create(component string, data bool) (err error) {
4338
return nil
4439
}
4540

46-
// Create normal service unit
47-
func (c *FleetClient) createServiceUnit(target string) (unitName string, unitPtr *unit.Unit, err error) {
48-
49-
// see if we were provided a specific target
50-
r := regexp.MustCompile(`([a-z-]+)\.([\d]+)`)
51-
match := r.FindStringSubmatch(target)
52-
var (
53-
num int
54-
component string
55-
)
56-
if len(match) == 3 {
57-
component = match[1]
58-
num, err = strconv.Atoi(match[2])
59-
if err != nil {
60-
return "", nil, err
61-
}
62-
unitName, err = formatUnitName(component, num)
41+
func (c *FleetClient) createUnit(target string) (unitName string, unitPtr *unit.Unit, err error) {
42+
component, num, err := splitTarget(target)
43+
if err != nil {
44+
return
45+
}
46+
if strings.HasSuffix(component, "-data") {
47+
unitName, unitPtr, err = c.createDataUnit(component)
6348
} else {
64-
component = target
65-
num, err := c.nextUnit(component)
66-
if err != nil {
67-
return "", nil, err
68-
}
69-
unitName, err = formatUnitName(component, num)
49+
unitName, unitPtr, err = c.createServiceUnit(component, num)
50+
}
51+
if err != nil {
52+
return unitName, unitPtr, err
53+
}
54+
return
55+
}
56+
57+
// Create normal service unit
58+
func (c *FleetClient) createServiceUnit(component string, num int) (unitName string, unitPtr *unit.Unit, err error) {
59+
// if number wasn't provided get next unit number
60+
if num == 0 {
61+
num, err = c.nextUnit(component)
7062
if err != nil {
7163
return "", nil, err
7264
}
7365
}
74-
66+
// build a fleet unit
67+
unitName, err = formatUnitName(component, num)
68+
if err != nil {
69+
return "", nil, err
70+
}
7571
unitPtr, err = NewUnit(component)
7672
if err != nil {
7773
return

client/destroy.go

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,23 @@ package client
22

33
import (
44
"fmt"
5-
"regexp"
6-
"strconv"
75
)
86

9-
// Destroy unschedules one unit for a given component type
10-
func (c *FleetClient) Destroy(component string) (err error) {
11-
12-
// see if we were provided a specific target
13-
r := regexp.MustCompile(`([a-z-]+)\.([\d]+)`)
14-
match := r.FindStringSubmatch(component)
15-
var (
16-
num int
17-
unitName string
18-
)
19-
if len(match) == 3 {
20-
num, err = strconv.Atoi(match[2])
21-
if err != nil {
22-
return err
23-
}
24-
unitName, err = formatUnitName(component, 0)
25-
} else {
26-
num, err = c.lastUnit(component)
27-
if err != nil {
28-
return err
29-
}
30-
unitName, err = formatUnitName(component, num)
31-
if err != nil {
32-
return err
33-
}
7+
// Destroy units for a given target
8+
func (c *FleetClient) Destroy(target string) (err error) {
9+
component, num, err := splitTarget(target)
10+
if err != nil {
11+
return
3412
}
3513
if num == 0 {
36-
return fmt.Errorf("no units to destroy")
14+
num, err = c.lastUnit(component)
15+
if err != nil {
16+
return err
17+
}
18+
}
19+
unitName, err := formatUnitName(component, num)
20+
if err != nil {
21+
return err
3722
}
3823
_, err = c.Fleet.Job(unitName)
3924
if err != nil {

client/list.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ func init() {
1818
}
1919

2020
const (
21-
defaultListUnitFields = "unit,state,load,active,sub,desc,machine"
21+
defaultListUnitFields = "unit,state,load,active,sub,machine"
2222
)
2323

2424
type jobToField func(j *job.Job, full bool) string

client/scale.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ func (c *FleetClient) Scale(component string, num int) (err error) {
1111
break
1212
}
1313
if len(components) < num {
14-
err := c.Create(component, false)
14+
err := c.Create(component)
1515
if err != nil {
1616
return err
1717
}

client/start.go

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,13 @@ package client
33
import (
44
"fmt"
55
"os"
6-
"regexp"
76

87
"github.com/coreos/fleet/job"
98
)
109

1110
// Start launches target units and blocks until active
12-
func (c *FleetClient) Start(target string, data bool) (err error) {
13-
14-
// see if we were provided a specific target
15-
r := regexp.MustCompile(`([a-z-]+)\.([\d]+)`)
16-
match := r.FindStringSubmatch(target)
17-
var component string
18-
if len(match) == 3 {
19-
component = match[1]
20-
} else {
21-
component = target
22-
}
23-
units, err := c.getUnits(component)
11+
func (c *FleetClient) Start(target string) (err error) {
12+
units, err := c.getUnits(target)
2413
if err != nil {
2514
return
2615
}

client/unit.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ func (c *FleetClient) getUnits(target string) (units []string, err error) {
2424
var r *regexp.Regexp
2525
if strings.HasSuffix(target, "-data") {
2626
r = regexp.MustCompile(`deis\-(` + target + `)\.service`)
27+
} else if strings.Contains(target, ".") {
28+
r = regexp.MustCompile(`deis\-(` + target + `)\.service`)
2729
} else {
2830
r = regexp.MustCompile(`deis\-(` + target + `)\.([\d]+)\.service`)
2931
}

client/utils.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,22 +65,27 @@ func splitJobName(component string) (c string, num int, err error) {
6565
return
6666
}
6767

68-
func splitComponentTarget(target string) (c string, num int, err error) {
69-
r := regexp.MustCompile(`([a-z-]+)\.?([\d]+)?`)
68+
func splitTarget(target string) (component string, num int, err error) {
69+
// see if we were provided a specific target
70+
r := regexp.MustCompile(`^([a-z]+)(\-data|\.\d+)?$`)
7071
match := r.FindStringSubmatch(target)
71-
if len(match) == 0 {
72-
err = fmt.Errorf("Could not parse: %v", target)
72+
// check for failed match
73+
if len(match) != 3 {
74+
err = fmt.Errorf("Could not parse target: %v", target)
7375
return
7476
}
7577
if match[2] == "" {
76-
return match[1], 0, nil
78+
component = match[1]
79+
return component, 0, nil
80+
} else if match[2] == "-data" {
81+
component = match[1] + "-data"
82+
return component, 0, nil
7783
}
78-
c = match[1]
79-
num, err = strconv.Atoi(match[2])
84+
num, err = strconv.Atoi(match[2][1:])
8085
if err != nil {
81-
return
86+
return "", 0, err
8287
}
83-
return
88+
return match[1], num, err
8489
}
8590

8691
// randomValue returns a random string from a slice of string

client/utils_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,30 @@ func TestSplitJobName(t *testing.T) {
6060
t.Fatalf("Invalid values: %v %v", c, num)
6161
}
6262
}
63+
64+
func TestSplitTarget(t *testing.T) {
65+
c, num, err := splitTarget("router")
66+
if err != nil {
67+
t.Fatal(err)
68+
}
69+
if c != "router" && num != 0 {
70+
t.Fatalf("Invalid split on \"%v\": %v %v", "router", c, num)
71+
}
72+
73+
c, num, err = splitTarget("router.3")
74+
if err != nil {
75+
t.Fatal(err)
76+
}
77+
if c != "router" || num != 3 {
78+
t.Fatalf("Invalid split on \"%v\": %v %v", "router.3", c, num)
79+
}
80+
81+
c, num, err = splitTarget("database-data")
82+
if err != nil {
83+
t.Fatal(err)
84+
}
85+
if c != "database-data" || num != 0 {
86+
t.Fatalf("Invalid split on \"%v\": %v %v", "database-data", c, num)
87+
}
88+
89+
}

cmd/cmd.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func Scale(c client.Client, targets []string) error {
2929

3030
func Start(c client.Client, targets []string) error {
3131
for _, target := range targets {
32-
err := c.Start(target, false)
32+
err := c.Start(target)
3333
if err != nil {
3434
return err
3535
}
@@ -71,11 +71,11 @@ func Install(c client.Client, targets []string) error {
7171
} else {
7272
// otherwise create and start the specific targets
7373
for _, target := range targets {
74-
err := c.Create(target, false)
74+
err := c.Create(target)
7575
if err != nil {
7676
return err
7777
}
78-
err = c.Start(target, false)
78+
err = c.Start(target)
7979
if err != nil {
8080
return err
8181
}
@@ -94,14 +94,14 @@ func installDataContainers(c client.Client) error {
9494
}
9595
fmt.Println("Scheduling data containers...")
9696
for _, dataContainer := range dataContainers {
97-
c.Create(dataContainer, true)
97+
c.Create(dataContainer)
9898
// if err != nil {
9999
// return err
100100
// }
101101
}
102102
fmt.Println("Activating data containers...")
103103
for _, dataContainer := range dataContainers {
104-
c.Start(dataContainer, true)
104+
c.Start(dataContainer)
105105
// if err != nil {
106106
// return err
107107
// }

0 commit comments

Comments
 (0)