func (nc *nspawnCluster) systemd(unitName, exec string) error { conn, err := dbus.New() if err != nil { return err } props := []dbus.Property{ dbus.PropExecStart(strings.Split(exec, " "), false), } log.Printf("Creating transient systemd unit %s", unitName) res1 := make(chan string) if _, err = conn.StartTransientUnit(unitName, "replace", props, res1); err != nil { log.Printf("Failed creating transient unit %s: %v", unitName, err) return err } <-res1 res2 := make(chan string) _, err = conn.StartUnit(unitName, "replace", res2) if err != nil { log.Printf("Failed starting transient unit %s: %v", unitName, err) return err } <-res2 return nil }
func NewSystemdUnitManager(uDir string, userInstance bool) (*systemdUnitManager, error) { var systemd *dbus.Conn var err error if userInstance { systemd, err = dbus.NewUserConnection() } else { systemd, err = dbus.New() } if err != nil { return nil, err } if err := os.MkdirAll(uDir, os.FileMode(0755)); err != nil { return nil, err } hashes, err := hashUnitFiles(uDir) if err != nil { return nil, err } mgr := systemdUnitManager{ systemd: systemd, unitsDir: uDir, hashes: hashes, mutex: sync.RWMutex{}, } return &mgr, nil }
func (nc *nspawnCluster) systemdReload() error { conn, err := dbus.New() if err != nil { return err } conn.Reload() return nil }
func NewSystemdUnitManager(uDir string) (*SystemdUnitManager, error) { systemd, err := dbus.New() if err != nil { return nil, err } if err := os.MkdirAll(uDir, os.FileMode(0755)); err != nil { return nil, err } mgr := SystemdUnitManager{systemd, uDir, systemd.NewSubscriptionSet()} return &mgr, nil }
func NewSystemdUnitManager(uDir string) (*systemdUnitManager, error) { systemd, err := dbus.New() if err != nil { return nil, err } if err := os.MkdirAll(uDir, os.FileMode(0755)); err != nil { return nil, err } mgr := systemdUnitManager{ systemd: systemd, UnitsDir: uDir, hashes: make(map[string]unit.Hash), mutex: sync.RWMutex{}, } return &mgr, nil }