Update vendoring for github.com/coreos/go-systemd/dbus
parent
6dd85969ef
commit
ed9acc935c
|
@ -83,10 +83,20 @@ type Conn struct {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// New establishes a connection to the system bus and authenticates.
|
// New establishes a connection to any available bus and authenticates.
|
||||||
// Callers should call Close() when done with the connection.
|
// Callers should call Close() when done with the connection.
|
||||||
func New() (*Conn, error) {
|
func New() (*Conn, error) {
|
||||||
return newConnection(func() (*dbus.Conn, error) {
|
conn, err := NewSystemConnection()
|
||||||
|
if err != nil && os.Geteuid() == 0 {
|
||||||
|
return NewSystemdConnection()
|
||||||
|
}
|
||||||
|
return conn, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewSystemConnection establishes a connection to the system bus and authenticates.
|
||||||
|
// Callers should call Close() when done with the connection
|
||||||
|
func NewSystemConnection() (*Conn, error) {
|
||||||
|
return NewConnection(func() (*dbus.Conn, error) {
|
||||||
return dbusAuthHelloConnection(dbus.SystemBusPrivate)
|
return dbusAuthHelloConnection(dbus.SystemBusPrivate)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -95,7 +105,7 @@ func New() (*Conn, error) {
|
||||||
// authenticates. This can be used to connect to systemd user instances.
|
// authenticates. This can be used to connect to systemd user instances.
|
||||||
// Callers should call Close() when done with the connection.
|
// Callers should call Close() when done with the connection.
|
||||||
func NewUserConnection() (*Conn, error) {
|
func NewUserConnection() (*Conn, error) {
|
||||||
return newConnection(func() (*dbus.Conn, error) {
|
return NewConnection(func() (*dbus.Conn, error) {
|
||||||
return dbusAuthHelloConnection(dbus.SessionBusPrivate)
|
return dbusAuthHelloConnection(dbus.SessionBusPrivate)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -104,7 +114,7 @@ func NewUserConnection() (*Conn, error) {
|
||||||
// This can be used for communicating with systemd without a dbus daemon.
|
// This can be used for communicating with systemd without a dbus daemon.
|
||||||
// Callers should call Close() when done with the connection.
|
// Callers should call Close() when done with the connection.
|
||||||
func NewSystemdConnection() (*Conn, error) {
|
func NewSystemdConnection() (*Conn, error) {
|
||||||
return newConnection(func() (*dbus.Conn, error) {
|
return NewConnection(func() (*dbus.Conn, error) {
|
||||||
// We skip Hello when talking directly to systemd.
|
// We skip Hello when talking directly to systemd.
|
||||||
return dbusAuthConnection(func() (*dbus.Conn, error) {
|
return dbusAuthConnection(func() (*dbus.Conn, error) {
|
||||||
return dbus.Dial("unix:path=/run/systemd/private")
|
return dbus.Dial("unix:path=/run/systemd/private")
|
||||||
|
@ -118,13 +128,18 @@ func (c *Conn) Close() {
|
||||||
c.sigconn.Close()
|
c.sigconn.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
func newConnection(createBus func() (*dbus.Conn, error)) (*Conn, error) {
|
// NewConnection establishes a connection to a bus using a caller-supplied function.
|
||||||
sysconn, err := createBus()
|
// This allows connecting to remote buses through a user-supplied mechanism.
|
||||||
|
// The supplied function may be called multiple times, and should return independent connections.
|
||||||
|
// The returned connection must be fully initialised: the org.freedesktop.DBus.Hello call must have succeeded,
|
||||||
|
// and any authentication should be handled by the function.
|
||||||
|
func NewConnection(dialBus func() (*dbus.Conn, error)) (*Conn, error) {
|
||||||
|
sysconn, err := dialBus()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
sigconn, err := createBus()
|
sigconn, err := dialBus()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
sysconn.Close()
|
sysconn.Close()
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -199,6 +199,11 @@ func (c *Conn) GetUnitProperty(unit string, propertyName string) (*Property, err
|
||||||
return c.getProperty(unit, "org.freedesktop.systemd1.Unit", propertyName)
|
return c.getProperty(unit, "org.freedesktop.systemd1.Unit", propertyName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetServiceProperty returns property for given service name and property name
|
||||||
|
func (c *Conn) GetServiceProperty(service string, propertyName string) (*Property, error) {
|
||||||
|
return c.getProperty(service, "org.freedesktop.systemd1.Service", propertyName)
|
||||||
|
}
|
||||||
|
|
||||||
// GetUnitTypeProperties returns the extra properties for a unit, specific to the unit type.
|
// GetUnitTypeProperties returns the extra properties for a unit, specific to the unit type.
|
||||||
// Valid values for unitType: Service, Socket, Target, Device, Mount, Automount, Snapshot, Timer, Swap, Path, Slice, Scope
|
// Valid values for unitType: Service, Socket, Target, Device, Mount, Automount, Snapshot, Timer, Swap, Path, Slice, Scope
|
||||||
// return "dbus.Error: Unknown interface" if the unitType is not the correct type of the unit
|
// return "dbus.Error: Unknown interface" if the unitType is not the correct type of the unit
|
||||||
|
@ -234,12 +239,11 @@ type UnitStatus struct {
|
||||||
JobPath dbus.ObjectPath // The job object path
|
JobPath dbus.ObjectPath // The job object path
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListUnits returns an array with all currently loaded units. Note that
|
type storeFunc func(retvalues ...interface{}) error
|
||||||
// units may be known by multiple names at the same time, and hence there might
|
|
||||||
// be more unit names loaded than actual units behind them.
|
func (c *Conn) listUnitsInternal(f storeFunc) ([]UnitStatus, error) {
|
||||||
func (c *Conn) ListUnits() ([]UnitStatus, error) {
|
|
||||||
result := make([][]interface{}, 0)
|
result := make([][]interface{}, 0)
|
||||||
err := c.sysobj.Call("org.freedesktop.systemd1.Manager.ListUnits", 0).Store(&result)
|
err := f(&result)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -263,15 +267,43 @@ func (c *Conn) ListUnits() ([]UnitStatus, error) {
|
||||||
return status, nil
|
return status, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ListUnits returns an array with all currently loaded units. Note that
|
||||||
|
// units may be known by multiple names at the same time, and hence there might
|
||||||
|
// be more unit names loaded than actual units behind them.
|
||||||
|
func (c *Conn) ListUnits() ([]UnitStatus, error) {
|
||||||
|
return c.listUnitsInternal(c.sysobj.Call("org.freedesktop.systemd1.Manager.ListUnits", 0).Store)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListUnitsFiltered returns an array with units filtered by state.
|
||||||
|
// It takes a list of units' statuses to filter.
|
||||||
|
func (c *Conn) ListUnitsFiltered(states []string) ([]UnitStatus, error) {
|
||||||
|
return c.listUnitsInternal(c.sysobj.Call("org.freedesktop.systemd1.Manager.ListUnitsFiltered", 0, states).Store)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListUnitsByPatterns returns an array with units.
|
||||||
|
// It takes a list of units' statuses and names to filter.
|
||||||
|
// Note that units may be known by multiple names at the same time,
|
||||||
|
// and hence there might be more unit names loaded than actual units behind them.
|
||||||
|
func (c *Conn) ListUnitsByPatterns(states []string, patterns []string) ([]UnitStatus, error) {
|
||||||
|
return c.listUnitsInternal(c.sysobj.Call("org.freedesktop.systemd1.Manager.ListUnitsByPatterns", 0, states, patterns).Store)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListUnitsByNames returns an array with units. It takes a list of units'
|
||||||
|
// names and returns an UnitStatus array. Comparing to ListUnitsByPatterns
|
||||||
|
// method, this method returns statuses even for inactive or non-existing
|
||||||
|
// units. Input array should contain exact unit names, but not patterns.
|
||||||
|
func (c *Conn) ListUnitsByNames(units []string) ([]UnitStatus, error) {
|
||||||
|
return c.listUnitsInternal(c.sysobj.Call("org.freedesktop.systemd1.Manager.ListUnitsByNames", 0, units).Store)
|
||||||
|
}
|
||||||
|
|
||||||
type UnitFile struct {
|
type UnitFile struct {
|
||||||
Path string
|
Path string
|
||||||
Type string
|
Type string
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListUnitFiles returns an array of all available units on disk.
|
func (c *Conn) listUnitFilesInternal(f storeFunc) ([]UnitFile, error) {
|
||||||
func (c *Conn) ListUnitFiles() ([]UnitFile, error) {
|
|
||||||
result := make([][]interface{}, 0)
|
result := make([][]interface{}, 0)
|
||||||
err := c.sysobj.Call("org.freedesktop.systemd1.Manager.ListUnitFiles", 0).Store(&result)
|
err := f(&result)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -295,6 +327,16 @@ func (c *Conn) ListUnitFiles() ([]UnitFile, error) {
|
||||||
return files, nil
|
return files, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ListUnitFiles returns an array of all available units on disk.
|
||||||
|
func (c *Conn) ListUnitFiles() ([]UnitFile, error) {
|
||||||
|
return c.listUnitFilesInternal(c.sysobj.Call("org.freedesktop.systemd1.Manager.ListUnitFiles", 0).Store)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListUnitFilesByPatterns returns an array of all available units on disk matched the patterns.
|
||||||
|
func (c *Conn) ListUnitFilesByPatterns(states []string, patterns []string) ([]UnitFile, error) {
|
||||||
|
return c.listUnitFilesInternal(c.sysobj.Call("org.freedesktop.systemd1.Manager.ListUnitFilesByPatterns", 0, states, patterns).Store)
|
||||||
|
}
|
||||||
|
|
||||||
type LinkUnitFileChange EnableUnitFileChange
|
type LinkUnitFileChange EnableUnitFileChange
|
||||||
|
|
||||||
// LinkUnitFiles() links unit files (that are located outside of the
|
// LinkUnitFiles() links unit files (that are located outside of the
|
||||||
|
@ -431,6 +473,87 @@ type DisableUnitFileChange struct {
|
||||||
Destination string // Destination of the symlink
|
Destination string // Destination of the symlink
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MaskUnitFiles masks one or more units in the system
|
||||||
|
//
|
||||||
|
// It takes three arguments:
|
||||||
|
// * list of units to mask (either just file names or full
|
||||||
|
// absolute paths if the unit files are residing outside
|
||||||
|
// the usual unit search paths)
|
||||||
|
// * runtime to specify whether the unit was enabled for runtime
|
||||||
|
// only (true, /run/systemd/..), or persistently (false, /etc/systemd/..)
|
||||||
|
// * force flag
|
||||||
|
func (c *Conn) MaskUnitFiles(files []string, runtime bool, force bool) ([]MaskUnitFileChange, error) {
|
||||||
|
result := make([][]interface{}, 0)
|
||||||
|
err := c.sysobj.Call("org.freedesktop.systemd1.Manager.MaskUnitFiles", 0, files, runtime, force).Store(&result)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
resultInterface := make([]interface{}, len(result))
|
||||||
|
for i := range result {
|
||||||
|
resultInterface[i] = result[i]
|
||||||
|
}
|
||||||
|
|
||||||
|
changes := make([]MaskUnitFileChange, len(result))
|
||||||
|
changesInterface := make([]interface{}, len(changes))
|
||||||
|
for i := range changes {
|
||||||
|
changesInterface[i] = &changes[i]
|
||||||
|
}
|
||||||
|
|
||||||
|
err = dbus.Store(resultInterface, changesInterface...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return changes, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type MaskUnitFileChange struct {
|
||||||
|
Type string // Type of the change (one of symlink or unlink)
|
||||||
|
Filename string // File name of the symlink
|
||||||
|
Destination string // Destination of the symlink
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmaskUnitFiles unmasks one or more units in the system
|
||||||
|
//
|
||||||
|
// It takes two arguments:
|
||||||
|
// * list of unit files to mask (either just file names or full
|
||||||
|
// absolute paths if the unit files are residing outside
|
||||||
|
// the usual unit search paths)
|
||||||
|
// * runtime to specify whether the unit was enabled for runtime
|
||||||
|
// only (true, /run/systemd/..), or persistently (false, /etc/systemd/..)
|
||||||
|
func (c *Conn) UnmaskUnitFiles(files []string, runtime bool) ([]UnmaskUnitFileChange, error) {
|
||||||
|
result := make([][]interface{}, 0)
|
||||||
|
err := c.sysobj.Call("org.freedesktop.systemd1.Manager.UnmaskUnitFiles", 0, files, runtime).Store(&result)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
resultInterface := make([]interface{}, len(result))
|
||||||
|
for i := range result {
|
||||||
|
resultInterface[i] = result[i]
|
||||||
|
}
|
||||||
|
|
||||||
|
changes := make([]UnmaskUnitFileChange, len(result))
|
||||||
|
changesInterface := make([]interface{}, len(changes))
|
||||||
|
for i := range changes {
|
||||||
|
changesInterface[i] = &changes[i]
|
||||||
|
}
|
||||||
|
|
||||||
|
err = dbus.Store(resultInterface, changesInterface...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return changes, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type UnmaskUnitFileChange struct {
|
||||||
|
Type string // Type of the change (one of symlink or unlink)
|
||||||
|
Filename string // File name of the symlink
|
||||||
|
Destination string // Destination of the symlink
|
||||||
|
}
|
||||||
|
|
||||||
// Reload instructs systemd to scan for and reload unit files. This is
|
// Reload instructs systemd to scan for and reload unit files. This is
|
||||||
// equivalent to a 'systemctl daemon-reload'.
|
// equivalent to a 'systemctl daemon-reload'.
|
||||||
func (c *Conn) Reload() error {
|
func (c *Conn) Reload() error {
|
||||||
|
|
|
@ -78,6 +78,15 @@ func PropRemainAfterExit(b bool) Property {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PropType sets the Type service property. See
|
||||||
|
// http://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=
|
||||||
|
func PropType(t string) Property {
|
||||||
|
return Property{
|
||||||
|
Name: "Type",
|
||||||
|
Value: dbus.MakeVariant(t),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// PropDescription sets the Description unit property. See
|
// PropDescription sets the Description unit property. See
|
||||||
// http://www.freedesktop.org/software/systemd/man/systemd.unit#Description=
|
// http://www.freedesktop.org/software/systemd/man/systemd.unit#Description=
|
||||||
func PropDescription(desc string) Property {
|
func PropDescription(desc string) Property {
|
||||||
|
@ -216,3 +225,13 @@ func PropSlice(slice string) Property {
|
||||||
Value: dbus.MakeVariant(slice),
|
Value: dbus.MakeVariant(slice),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PropPids sets the PIDs field of scope units used in the initial construction
|
||||||
|
// of the scope only and specifies the initial PIDs to add to the scope object.
|
||||||
|
// See https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/#properties
|
||||||
|
func PropPids(pids ...uint32) Property {
|
||||||
|
return Property{
|
||||||
|
Name: "PIDs",
|
||||||
|
Value: dbus.MakeVariant(pids),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -21,9 +21,10 @@
|
||||||
"revisionTime": "2016-08-04T10:47:26Z"
|
"revisionTime": "2016-08-04T10:47:26Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"checksumSHA1": "/zxxFPYjUB7Wowz33r5AhTDvoz0=",
|
||||||
"path": "github.com/coreos/go-systemd/dbus",
|
"path": "github.com/coreos/go-systemd/dbus",
|
||||||
"revision": "2ed5b5012ccde5f057c197890a2c801295941149",
|
"revision": "d7387fdbe0249794c5bdcfa53b964aa5517e81a9",
|
||||||
"revisionTime": "2016-01-14T00:34:31+01:00"
|
"revisionTime": "2016-11-09T15:11:19Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "github.com/godbus/dbus",
|
"path": "github.com/godbus/dbus",
|
||||||
|
|
Loading…
Reference in New Issue