forked from coreos/fleet
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstart.go
76 lines (63 loc) · 2.34 KB
/
start.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package main
import (
"os"
"github.com/coreos/fleet/job"
)
var (
cmdStartUnit = &Command{
Name: "start",
Summary: "Instruct systemd to start one or more units in the cluster, first submitting and loading if necessary.",
Usage: "[--no-block|--block-attempts=N] UNIT...",
Description: `Start one or many units on the cluster. Select units to start by glob matching
for units in the current working directory or matching names of previously
submitted units.
For units which are not global, start operations are performed synchronously,
which means fleetctl will block until it detects that the unit(s) have
transitioned to a started state. This behaviour can be configured with the
respective --block-attempts and --no-block options. Start operations on global
units are always non-blocking.
Start a single unit:
fleetctl start foo.service
Start an entire directory of units with glob matching:
fleetctl start myservice/*
You may filter suitable hosts based on metadata provided by the machine.
Machine metadata is located in the fleet configuration file.`,
Run: runStartUnit,
}
)
func init() {
cmdStartUnit.Flags.BoolVar(&sharedFlags.Sign, "sign", false, "DEPRECATED - this option cannot be used")
cmdStartUnit.Flags.IntVar(&sharedFlags.BlockAttempts, "block-attempts", 0, "Wait until the units are launched, performing up to N attempts before giving up. A value of 0 indicates no limit. Does not apply to global units.")
cmdStartUnit.Flags.BoolVar(&sharedFlags.NoBlock, "no-block", false, "Do not wait until the units have launched before exiting. Always the case for global units.")
}
func runStartUnit(args []string) (exit int) {
if err := lazyCreateUnits(args); err != nil {
stderr("Error creating units: %v", err)
return 1
}
triggered, err := lazyStartUnits(args)
if err != nil {
stderr("Error starting units: %v", err)
return 1
}
var starting []string
for _, u := range triggered {
if suToGlobal(*u) {
stdout("Triggered global unit %s start", u.Name)
} else {
starting = append(starting, u.Name)
}
}
if !sharedFlags.NoBlock {
errchan := waitForUnitStates(starting, job.JobStateLaunched, sharedFlags.BlockAttempts, os.Stdout)
for err := range errchan {
stderr("Error waiting for units: %v", err)
exit = 1
}
} else {
for _, name := range starting {
stdout("Triggered unit %s start", name)
}
}
return
}