feat(unit): Allow user to control enabling units

Fix #69 - A user may provide an `enable` attribute of a unit in their
cloud config document. If true, coreos-cloudinit will instruct systemd
to enable the associated unit. If false, the unit will not be enabled.

Fix #71 - The default enable behavior has been changed from on to off.
This commit is contained in:
Brian Waldon 2014-04-14 10:02:18 -07:00
parent 10d73930d9
commit 5981e12ac0
3 changed files with 11 additions and 7 deletions

View File

@ -87,6 +87,7 @@ Arbitrary systemd units may be provided in the `coreos.units` attribute.
- **name**: String representing unit's name. Required. - **name**: String representing unit's name. Required.
- **runtime**: Boolean indicating whether or not to persist the unit across reboots. This is analagous to the `--runtime` argument to `systemd enable`. Default value is false. - **runtime**: Boolean indicating whether or not to persist the unit across reboots. This is analagous to the `--runtime` argument to `systemd enable`. Default value is false.
- **enable**: Boolean indicating whether or not to handle the [Install] section of the unit file. This is similar to running `systemctl enable <name>`. Default value is false.
- **content**: Plaintext string representing entire unit file. If no value is provided, the unit is assumed to exist already. - **content**: Plaintext string representing entire unit file. If no value is provided, the unit is assumed to exist already.
- **command**: Command to execute on unit: start, stop, reload, restart, try-restart, reload-or-restart, reload-or-try-restart. Default value is restart. - **command**: Command to execute on unit: start, stop, reload, restart, try-restart, reload-or-restart, reload-or-try-restart. Default value is restart.

View File

@ -140,14 +140,16 @@ func Apply(cfg CloudConfig, env *Environment) error {
} }
log.Printf("Placed unit %s at %s", unit.Name, dst) log.Printf("Placed unit %s at %s", unit.Name, dst)
if unit.Group() != "network" { if unit.Enable {
log.Printf("Enabling unit file %s", dst) if unit.Group() != "network" {
if err := system.EnableUnitFile(dst, unit.Runtime); err != nil { log.Printf("Enabling unit file %s", dst)
return err if err := system.EnableUnitFile(dst, unit.Runtime); err != nil {
return err
}
log.Printf("Enabled unit %s", unit.Name)
} else {
log.Printf("Skipping enable for network-like unit %s", unit.Name)
} }
log.Printf("Enabled unit %s", unit.Name)
} else {
log.Printf("Skipping enable for network-like unit %s", unit.Name)
} }
} }

View File

@ -19,6 +19,7 @@ const fakeMachineID = "42000000000000000000000000000042"
type Unit struct { type Unit struct {
Name string Name string
Enable bool
Runtime bool Runtime bool
Content string Content string
Command string Command string