Skip to content

Commit 120bf61

Browse files
author
Gabriel Monroy
committed
wip
1 parent 01c3058 commit 120bf61

17 files changed

Lines changed: 134 additions & 198 deletions

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
package/
2+
deisctl/deisctl

client.go

Lines changed: 63 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@ import (
88

99
"github.com/coreos/fleet/client"
1010
"github.com/coreos/fleet/job"
11+
"github.com/coreos/fleet/unit"
1112
)
1213

1314
// Client interface used to interact with the cluster control plane
1415
type Client interface {
15-
Create(string) error
16+
Create(string, bool) error
1617
Destroy(string) error
17-
Start(string) error
18+
Start(string, bool) error
1819
Stop(string) error
1920
Scale(string, int) error
2021
List() error
@@ -38,20 +39,22 @@ func NewClient() (*FleetClient, error) {
3839

3940
// Create schedules a new unit for the given component
4041
// and blocks until the unit is loaded
41-
func (c *FleetClient) Create(component string) (err error) {
42-
num, err := c.nextUnit(component)
43-
if err != nil {
44-
return
42+
func (c *FleetClient) Create(component string, data bool) (err error) {
43+
var (
44+
unitName string
45+
unitPtr *unit.Unit
46+
)
47+
// create unit
48+
if data == true {
49+
unitName, unitPtr, err = c.createDataUnit(component)
50+
} else {
51+
unitName, unitPtr, err = c.createServiceUnit(component)
4552
}
46-
unitName, err := formatUnitName(component, num)
4753
if err != nil {
48-
return
49-
}
50-
unit, err := NewUnit(component)
51-
if err != nil {
52-
return
54+
return err
5355
}
54-
j := job.NewJob(unitName, *unit)
56+
// schedule job
57+
j := job.NewJob(unitName, *unitPtr)
5558
if err := c.Fleet.CreateJob(j); err != nil {
5659
return fmt.Errorf("failed creating job %s: %v", unitName, err)
5760
}
@@ -67,6 +70,39 @@ func (c *FleetClient) Create(component string) (err error) {
6770
return nil
6871
}
6972

73+
// Create normal service unit
74+
func (c *FleetClient) createServiceUnit(component string) (unitName string, unitPtr *unit.Unit, err error) {
75+
num, err := c.nextUnit(component)
76+
if err != nil {
77+
return
78+
}
79+
unitName, err = formatUnitName(component, num)
80+
if err != nil {
81+
return
82+
}
83+
unitPtr, err = NewUnit(component)
84+
if err != nil {
85+
return
86+
}
87+
return unitName, unitPtr, nil
88+
}
89+
90+
// Create data container unit
91+
func (c *FleetClient) createDataUnit(component string) (unitName string, unitPtr *unit.Unit, err error) {
92+
unitName, err = formatUnitName(component, 0)
93+
if err != nil {
94+
return
95+
}
96+
randomMachineID(c)
97+
unitPtr, err = NewUnit(component)
98+
if err != nil {
99+
return
100+
}
101+
return unitName, unitPtr, nil
102+
103+
}
104+
105+
70106
// Destroy unschedules one unit for a given component type
71107
func (c *FleetClient) Destroy(component string) (err error) {
72108
num, err := c.lastUnit(component)
@@ -102,19 +138,25 @@ func (c *FleetClient) Scale(component string, num int) (err error) {
102138
break
103139
}
104140
if len(components) < num {
105-
c.Create(component)
141+
err := c.Create(component, false)
142+
if err != nil {
143+
return err
144+
}
106145
continue
107146
}
108147
if len(components) > num {
109-
c.Destroy(component)
148+
err := c.Destroy(component)
149+
if err != nil {
150+
return err
151+
}
110152
continue
111153
}
112154
}
113155
return
114156
}
115157

116158
// Start launches target units and blocks until active
117-
func (c *FleetClient) Start(target string) (err error) {
159+
func (c *FleetClient) Start(target string, data bool) (err error) {
118160
units, err := c.getUnits(target)
119161
if err != nil {
120162
return
@@ -126,9 +168,11 @@ func (c *FleetClient) Start(target string) (err error) {
126168
return err
127169
}
128170
}
129-
errchan := waitForJobStates(c.Fleet, units, testUnitStateActive, 0, os.Stdout)
130-
for err := range errchan {
131-
return fmt.Errorf("error waiting for active: %v", err)
171+
if data == false {
172+
errchan := waitForJobStates(c.Fleet, units, testUnitStateActive, 0, os.Stdout)
173+
for err := range errchan {
174+
return fmt.Errorf("error waiting for active: %v", err)
175+
}
132176
}
133177
return nil
134178
}

deisctl/deisctl.go

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func cmdScale(c deisctl.Client, targets []string) error {
3232

3333
func cmdStart(c deisctl.Client, targets []string) error {
3434
for _, target := range targets {
35-
err := c.Start(target)
35+
err := c.Start(target, false)
3636
if err != nil {
3737
return err
3838
}
@@ -61,6 +61,28 @@ func cmdStatus(c deisctl.Client, targets []string) error {
6161
}
6262

6363
func cmdInstall(c deisctl.Client) error {
64+
// data containers
65+
dataContainers := []string{
66+
"database-data",
67+
"registry-data",
68+
"logger-data",
69+
"builder-data",
70+
}
71+
fmt.Println("Scheduling data containers...")
72+
for _, dataContainer := range dataContainers {
73+
c.Create(dataContainer, true)
74+
// if err != nil {
75+
// return err
76+
// }
77+
}
78+
fmt.Println("Activating data containers...")
79+
for _, dataContainer := range dataContainers {
80+
c.Start(dataContainer, true)
81+
// if err != nil {
82+
// return err
83+
// }
84+
}
85+
// start service containers
6486
targets := []string{
6587
"database=1",
6688
"cache=1",

fleet.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,17 @@ func getRegistryClient() (client.API, error) {
6969
}
7070
return client.NewRegistryClient(&trans, Flags.Endpoint, Flags.EtcdKeyPrefix)
7171
}
72+
73+
74+
// randomMachineID return a random machineID from the Fleet cluster
75+
func randomMachineID(c *FleetClient) (machineID string, err error) {
76+
machineState, err := c.Fleet.Machines()
77+
if err != nil {
78+
return "", err
79+
}
80+
var machineIDs []string
81+
for _, ms := range machineState {
82+
machineIDs = append(machineIDs, ms.ID)
83+
}
84+
return randomValue(machineIDs), nil
85+
}

unit.go

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,37 @@ func NewUnit(component string) (u *unit.Unit, err error) {
2727
return
2828
}
2929

30+
// NewDataUnit takes a component type and returns a Fleet unit
31+
// that is hard-scheduled to a machine ID
32+
func NewDataUnit(component string, machineID string) (u *unit.Unit, err error) {
33+
template, err := readTemplate(component)
34+
if err != nil {
35+
return
36+
}
37+
// TODO: replace template CHANGEME with machineID
38+
u, err = unit.NewUnit(string(template))
39+
if err != nil {
40+
return
41+
}
42+
return
43+
}
44+
3045
// formatUnitName returns a properly formatted systemd service name
3146
// using the given component type and number
3247
func formatUnitName(component string, num int) (unitName string, err error) {
33-
unitName = "deis-" + component + "." + strconv.Itoa(num) + ".service"
34-
return
48+
if num == 0 {
49+
return "deis-" + component + ".service", nil
50+
} else {
51+
return "deis-" + component + "." + strconv.Itoa(num) + ".service", nil
52+
}
3553
}
3654

3755
// readTemplate returns the contents of a systemd template for the given component
3856
func readTemplate(component string) (out []byte, err error) {
3957
templateName := "deis-" + component + ".service"
4058
var templateFile string
4159
for _, rootPath := range rootPaths {
42-
filename := path.Join(rootPath, component, templateName)
60+
filename := path.Join(rootPath, templateName)
4361
if _, err := os.Stat(filename); err == nil {
4462
templateFile = filename
4563
break

units/builder/deis-builder-data.service.template

Lines changed: 0 additions & 13 deletions
This file was deleted.

units/builder/deis-builder.service

Lines changed: 0 additions & 19 deletions
This file was deleted.

units/cache/deis-cache.service

Lines changed: 0 additions & 13 deletions
This file was deleted.

units/controller/deis-controller.service

Lines changed: 0 additions & 18 deletions
This file was deleted.

units/database/deis-database-data.service.template

Lines changed: 0 additions & 13 deletions
This file was deleted.

0 commit comments

Comments
 (0)