Skip to content

Commit 0b0cb6f

Browse files
author
Matthew Fisher
committed
feat(deisctl): add deis/publisher
With this change comes the introduction of the ability to add global units to the project. Before, we would always prepend "@1" to the units because we always assumed they'd be scalable. This is not the case for global units, so I reverted that behaviour.
1 parent 80c60e0 commit 0b0cb6f

6 files changed

Lines changed: 66 additions & 45 deletions

File tree

deisctl/backend/fleet/create.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
// and blocks until the unit is loaded
1414
func (c *FleetClient) Create(targets []string) error {
1515
units := make([]*schema.Unit, len(targets))
16+
desiredState := string(job.JobStateLoaded)
1617
for i, target := range targets {
1718
unitName, unitFile, err := c.createUnitFile(target)
1819
if err != nil {
@@ -31,13 +32,11 @@ func (c *FleetClient) Create(targets []string) error {
3132
return fmt.Errorf("failed creating job %s: %v", unit.Name, err)
3233
}
3334
}
34-
desiredState := string(job.JobStateLoaded)
3535
if err := c.Fleet.SetUnitTargetState(unit.Name, desiredState); err != nil {
3636
return err
3737
}
3838
}
3939
for _, unit := range units {
40-
desiredState := string(job.JobStateLoaded)
4140
outchan, errchan := waitForUnitStates([]string{unit.Name}, desiredState)
4241
if err := printUnitState(unit.Name, outchan, errchan); err != nil {
4342
return err

deisctl/backend/fleet/destroy.go

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,14 @@ import (
1111
func (c *FleetClient) Destroy(targets []string) error {
1212
for _, target := range targets {
1313
// check if the unit exists
14-
units, err := c.Units(target)
14+
_, err := c.Units(target)
1515
if err != nil {
1616
return err
1717
}
1818
component, num, err := splitTarget(target)
1919
if err != nil {
2020
return err
2121
}
22-
// if no number is specified, destroy ALL THE UNITS!
23-
if num == 0 {
24-
num = len(units)
25-
}
2622
if strings.HasSuffix(component, "-data") {
2723
err = c.destroyDataUnit(component)
2824
} else {
@@ -35,7 +31,7 @@ func (c *FleetClient) Destroy(targets []string) error {
3531
return nil
3632
}
3733

38-
func (c *FleetClient) destroyServiceUnit(component string, num int) (err error) {
34+
func (c *FleetClient) destroyServiceUnit(component string, num int) error {
3935
name, err := formatUnitName(component, num)
4036
if err != nil {
4137
return err
@@ -46,34 +42,30 @@ func (c *FleetClient) destroyServiceUnit(component string, num int) (err error)
4642
return err
4743
}
4844
outchan, errchan := waitForUnitStates([]string{name}, desiredState)
49-
err = printUnitState(name, outchan, errchan)
50-
if err != nil {
45+
if err := printUnitState(name, outchan, errchan); err != nil {
5146
return err
5247
}
5348
if err = c.Fleet.DestroyUnit(name); err != nil {
5449
return fmt.Errorf("failed destroying job %s: %v", name, err)
5550
}
56-
return err
51+
return nil
5752
}
5853

59-
func (c *FleetClient) destroyDataUnit(component string) (err error) {
54+
func (c *FleetClient) destroyDataUnit(component string) error {
6055
name, err := formatUnitName(component, 0)
56+
desiredState := string(job.JobStateInactive)
6157
if err != nil {
6258
return err
6359
}
64-
desiredState := string(job.JobStateInactive)
65-
err = c.Fleet.SetUnitTargetState(name, desiredState)
66-
if err != nil {
60+
if err := c.Fleet.SetUnitTargetState(name, desiredState); err != nil {
6761
return err
6862
}
6963
outchan, errchan := waitForUnitStates([]string{name}, desiredState)
70-
err = printUnitState(name, outchan, errchan)
71-
if err != nil {
64+
if err := printUnitState(name, outchan, errchan); err != nil {
7265
return err
7366
}
74-
if err = c.Fleet.DestroyUnit(name); err != nil {
67+
if err := c.Fleet.DestroyUnit(name); err != nil {
7568
return fmt.Errorf("failed destroying job %s: %v", name, err)
7669
}
77-
return err
78-
70+
return nil
7971
}

deisctl/backend/fleet/state.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,11 @@ func assertUnitState(name string, desiredState string, outchan chan *schema.Unit
126126
// send unit across the output channel
127127
outchan <- u
128128

129+
// HACK: global units have no soul
130+
if u.CurrentState == "" {
131+
return true
132+
}
133+
129134
if u.DesiredState == u.CurrentState {
130135
return true
131136
}
@@ -182,6 +187,10 @@ func printUnitState(name string, outchan chan *schema.Unit, errchan chan error)
182187
if u.Name != name {
183188
continue
184189
}
190+
// HACK: global units have no soul
191+
if u.CurrentState == "" {
192+
continue
193+
}
185194
// otherwise print output
186195
if u.CurrentState != u.DesiredState {
187196
fmt.Printf("\033[0;33m%v:\033[0m %v (pending) \r",

deisctl/backend/fleet/unit.go

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"io/ioutil"
66
"os"
77
"path"
8-
"regexp"
98
"strconv"
109
"strings"
1110

@@ -25,18 +24,18 @@ func (c *FleetClient) Units(target string) (units []string, err error) {
2524
if err != nil {
2625
return
2726
}
28-
var r *regexp.Regexp
2927
if strings.HasSuffix(target, "-data") {
30-
r = regexp.MustCompile(`deis\-(` + target + `)\.service`)
31-
} else if strings.Contains(target, "@") {
32-
r = regexp.MustCompile(`deis\-(` + target + `)\.service`)
28+
for _, u := range allUnits {
29+
if strings.Contains(u.Name, target) {
30+
units = []string{u.Name}
31+
return
32+
}
33+
}
3334
} else {
34-
r = regexp.MustCompile(`deis\-(` + target + `)@([\d]+)\.service`)
35-
}
36-
for _, u := range allUnits {
37-
match := r.MatchString(u.Name)
38-
if match {
39-
units = append(units, u.Name)
35+
for _, u := range allUnits {
36+
if strings.Contains(u.Name, target) && !strings.HasSuffix(u.Name, "-data.service") {
37+
units = append(units, u.Name)
38+
}
4039
}
4140
}
4241
if len(units) == 0 {

deisctl/cmd/cmd.go

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,10 @@ func startDataContainers(b backend.Backend) error {
8989

9090
func startDefaultServices(b backend.Backend) error {
9191
fmt.Println("Launching service containers...")
92-
if err := Start(b, []string{"logger"}); err != nil {
92+
if err := Start(b, []string{"logger@1"}); err != nil {
9393
return err
9494
}
95-
if err := Start(b, []string{"cache", "router", "database", "controller", "registry", "builder"}); err != nil {
95+
if err := Start(b, []string{"publisher", "cache@1", "router@1", "database@1", "controller@1", "registry@1", "builder@1"}); err != nil {
9696
return err
9797
}
9898
fmt.Println("Service containers launched.")
@@ -118,7 +118,7 @@ func StopPlatform(b backend.Backend) error {
118118

119119
func stopDefaultServices(b backend.Backend) error {
120120
fmt.Println("Stopping service containers...")
121-
if err := Stop(b, []string{"builder", "registry", "controller", "database", "cache", "router", "logger"}); err != nil {
121+
if err := Stop(b, []string{"publisher", "builder@1", "registry@1", "controller@1", "database@1", "cache@1", "router@1", "logger@1"}); err != nil {
122122
return err
123123
}
124124
fmt.Println("Service containers stopped.")
@@ -156,13 +156,6 @@ func Install(b backend.Backend, targets []string) error {
156156
return InstallPlatform(b)
157157
}
158158
// otherwise create the specific targets
159-
for i, target := range targets {
160-
// if we're installing a component without a number attached,
161-
// consider the user doesn't know better
162-
if !strings.Contains(target, "@") {
163-
targets[i] += "@1"
164-
}
165-
}
166159
return b.Create(targets)
167160
}
168161

@@ -197,11 +190,15 @@ func installDefaultServices(b backend.Backend) error {
197190
"registry=1",
198191
"controller=1",
199192
"builder=1",
200-
"router=1"}
193+
"router=1",
194+
}
201195
fmt.Println("Scheduling service containers...")
202196
if err := Scale(b, targets); err != nil {
203197
return err
204198
}
199+
if err := b.Create([]string{"publisher"}); err != nil {
200+
return err
201+
}
205202
fmt.Println("Service containers scheduled.")
206203
return nil
207204
}
@@ -223,11 +220,17 @@ func uninstallAllServices(b backend.Backend) error {
223220
"registry=0",
224221
"controller=0",
225222
"builder=0",
226-
"router=0"}
223+
"router=0",
224+
}
227225
fmt.Println("Destroying service containers...")
228-
err := Scale(b, targets)
226+
if err := Scale(b, targets); err != nil {
227+
return err
228+
}
229+
if err := b.Destroy([]string{"publisher"}); err != nil {
230+
return err
231+
}
229232
fmt.Println("Service containers destroyed.")
230-
return err
233+
return nil
231234
}
232235

233236
func splitScaleTarget(target string) (c string, num int, err error) {
@@ -306,6 +309,7 @@ Options:
306309
"deis-database-data.service",
307310
"deis-logger.service",
308311
"deis-logger-data.service",
312+
"deis-publisher.service",
309313
"deis-registry.service",
310314
"deis-registry-data.service",
311315
"deis-router.service",
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
[Unit]
2+
Description=deis-publisher
3+
Requires=docker.socket etcd.service
4+
After=docker.socket etcd.service
5+
6+
[Service]
7+
EnvironmentFile=/etc/environment
8+
TimeoutStartSec=20m
9+
ExecStartPre=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/publisher`; docker history $IMAGE >/dev/null || docker pull $IMAGE"
10+
ExecStartPre=/bin/sh -c "docker inspect deis-logger >/dev/null && docker rm -f deis-publisher || true"
11+
ExecStart=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/publisher` && docker run --name deis-publisher --rm -e HOST=$COREOS_PRIVATE_IPV4 -e ETCD_HOST=$COREOS_PRIVATE_IPV4 -v /var/run/docker.sock:/var/run/docker.sock $IMAGE"
12+
ExecStopPost=/usr/bin/docker stop deis-logger
13+
14+
[Install]
15+
WantedBy=multi-user.target
16+
17+
[X-Fleet]
18+
Global=true

0 commit comments

Comments
 (0)