From 782c78354d2ee947a20e22fb935e419f0c396ada Mon Sep 17 00:00:00 2001 From: Daniel Theophanes Date: Tue, 27 May 2014 22:19:11 -0700 Subject: [PATCH] service: create a new front end api option. Allow backends to be configured. --- service.go | 27 ++++++++++++++++++++++++++- service_darwin.go | 10 +++++----- service_linux.go | 18 ++++++++++++------ service_windows.go | 8 ++++---- 4 files changed, 47 insertions(+), 16 deletions(-) diff --git a/service.go b/service.go index c6db21f..7396eb3 100644 --- a/service.go +++ b/service.go @@ -9,7 +9,32 @@ import "bitbucket.org/kardianos/osext" // name. The description is an arbitrary string used to describe the // service. func NewService(name, displayName, description string) (Service, error) { - return newService(name, displayName, description) + return newService(&Config{ + Name: name, + DisplayName: displayName, + Description: description, + }) +} + +// Alpha API. Do not yet use. +type Config struct { + Name, DisplayName, Description string + + UserName string // Run as username. + Arguments []string // Run with arguments. + + DependsOn []string // Other services that this depends on. + WorkingDirectory string // Service working directory. + ChRoot string + UserService bool // Install as a current user service. + + // System specific parameters. + KV map[string]interface{} +} + +// Alpha API. Do not yet use. +func NewServiceConfig(c *Config) (Service, error) { + return newService(c) } // Represents a generic way to interact with the system's service. diff --git a/service_darwin.go b/service_darwin.go index 8eb2c02..c712e62 100644 --- a/service_darwin.go +++ b/service_darwin.go @@ -13,14 +13,14 @@ import ( const maxPathSize = 32 * 1024 -func newService(name, displayName, description string) (s *darwinLaunchdService, err error) { +func newService(c *Config) (s *darwinLaunchdService, err error) { s = &darwinLaunchdService{ - name: name, - displayName: displayName, - description: description, + name: c.Name, + displayName: c.DisplayName, + description: c.Description, } - s.logger, err = syslog.New(syslog.LOG_INFO, name) + s.logger, err = syslog.New(syslog.LOG_INFO, c.Name) if err != nil { return nil, err } diff --git a/service_linux.go b/service_linux.go index 9118391..a8778b6 100644 --- a/service_linux.go +++ b/service_linux.go @@ -17,7 +17,9 @@ const ( initSystemd ) -func newService(name, displayName, description string) (Service, error) { +const systemOs = "linux" + +func getFlavor() initFlavor { flavor := initSystemV if isUpstart() { flavor = initUpstart @@ -25,15 +27,19 @@ func newService(name, displayName, description string) (Service, error) { if isSystemd() { flavor = initSystemd } + return flavor +} + +func newService(c *Config) (Service, error) { s := &linuxService{ - flavor: flavor, - name: name, - displayName: displayName, - description: description, + flavor: getFlavor(), + name: c.Name, + displayName: c.DisplayName, + description: c.Description, } var err error - s.logger, err = syslog.New(syslog.LOG_INFO, name) + s.logger, err = syslog.New(syslog.LOG_INFO, s.name) if err != nil { return nil, err } diff --git a/service_windows.go b/service_windows.go index 8e8ed7c..487a567 100644 --- a/service_windows.go +++ b/service_windows.go @@ -9,11 +9,11 @@ import ( "code.google.com/p/winsvc/svc" ) -func newService(name, displayName, description string) (*windowsService, error) { +func newService(c *Config) (*windowsService, error) { return &windowsService{ - name: name, - displayName: displayName, - description: description, + name: c.Name, + displayName: c.DisplayName, + description: c.Description, }, nil }