diff --git a/client/driver/docker.go b/client/driver/docker.go index 752c8941b..79b535805 100644 --- a/client/driver/docker.go +++ b/client/driver/docker.go @@ -700,7 +700,8 @@ func (d *DockerDriver) Open(ctx *ExecContext, handleID string) (DriverHandle, er return nil, err } - d.logger.Printf("[DEBUG] driver.docker: version of executor: %v", exec.Version()) + ver, _ := exec.Version() + d.logger.Printf("[DEBUG] driver.docker: version of executor: %v", ver.Version) // Return a driver handle h := &DockerHandle{ diff --git a/client/driver/exec.go b/client/driver/exec.go index aad79848d..136016113 100644 --- a/client/driver/exec.go +++ b/client/driver/exec.go @@ -187,7 +187,8 @@ func (d *ExecDriver) Open(ctx *ExecContext, handleID string) (DriverHandle, erro return nil, fmt.Errorf("error connecting to plugin: %v", merrs.ErrorOrNil()) } - d.logger.Printf("[DEBUG] driver.exec : version of executor: %v", exec.Version()) + ver, _ := exec.Version() + d.logger.Printf("[DEBUG] driver.exec : version of executor: %v", ver.Version) // Return a driver handle h := &execHandle{ pluginClient: client, diff --git a/client/driver/executor/executor.go b/client/driver/executor/executor.go index 0b5afe629..434d9c62b 100644 --- a/client/driver/executor/executor.go +++ b/client/driver/executor/executor.go @@ -37,7 +37,7 @@ type Executor interface { UpdateTask(task *structs.Task) error SyncServices(ctx *ConsulContext) error DeregisterServices() error - Version() string + Version() (*ExecutorVersion, error) } // ConsulContext holds context to configure the consul client and run checks @@ -128,6 +128,15 @@ type SyslogServerState struct { Addr string } +// ExecutorVersion is the version of the executor +type ExecutorVersion struct { + Version string +} + +func (v *ExecutorVersion) GoString() string { + return v.Version +} + // UniversalExecutor is an implementation of the Executor which launches and // supervises processes. In addition to process supervision it provides resource // and file system isolation @@ -164,8 +173,8 @@ func NewExecutor(logger *log.Logger) Executor { } // Version returns the api version of the executor -func (e *UniversalExecutor) Version() string { - return "1" +func (e *UniversalExecutor) Version() (*ExecutorVersion, error) { + return &ExecutorVersion{Version: "1.0.0"}, nil } // LaunchCmd launches a process and returns it's state. It also configures an diff --git a/client/driver/executor_plugin.go b/client/driver/executor_plugin.go index d2ff3e27c..decb359e3 100644 --- a/client/driver/executor_plugin.go +++ b/client/driver/executor_plugin.go @@ -82,17 +82,15 @@ func (e *ExecutorRPC) DeregisterServices() error { return e.client.Call("Plugin.DeregisterServices", new(interface{}), new(interface{})) } -func (e *ExecutorRPC) Version() string { - var version string +func (e *ExecutorRPC) Version() (*executor.ExecutorVersion, error) { + var version executor.ExecutorVersion err := e.client.Call("Plugin.Version", new(interface{}), &version) - if err != nil { - e.logger.Printf("[ERR] executor: error calling Executor.Driver: %v", err) - } - return version + return &version, err } type ExecutorRPCServer struct { - Impl executor.Executor + Impl executor.Executor + logger *log.Logger } func (e *ExecutorRPCServer) LaunchCmd(args LaunchCmdArgs, ps *executor.ProcessState) error { @@ -143,9 +141,12 @@ func (e *ExecutorRPCServer) DeregisterServices(args interface{}, resp *interface return e.Impl.DeregisterServices() } -func (e *ExecutorRPCServer) Version(args interface{}, version *string) error { - *version = e.Impl.Version() - return nil +func (e *ExecutorRPCServer) Version(args interface{}, version *executor.ExecutorVersion) error { + ver, err := e.Impl.Version() + if ver != nil { + *version = *ver + } + return err } type ExecutorPlugin struct { @@ -155,7 +156,7 @@ type ExecutorPlugin struct { func (p *ExecutorPlugin) Server(*plugin.MuxBroker) (interface{}, error) { if p.Impl == nil { - p.Impl = &ExecutorRPCServer{Impl: executor.NewExecutor(p.logger)} + p.Impl = &ExecutorRPCServer{Impl: executor.NewExecutor(p.logger), logger: p.logger} } return p.Impl, nil } diff --git a/client/driver/java.go b/client/driver/java.go index c07067738..f371c89bf 100644 --- a/client/driver/java.go +++ b/client/driver/java.go @@ -254,7 +254,8 @@ func (d *JavaDriver) Open(ctx *ExecContext, handleID string) (DriverHandle, erro return nil, fmt.Errorf("error connecting to plugin: %v", merrs.ErrorOrNil()) } - d.logger.Printf("[DEBUG] driver.java: version of executor: %v", exec.Version()) + ver, _ := exec.Version() + d.logger.Printf("[DEBUG] driver.java: version of executor: %v", ver.Version) // Return a driver handle h := &javaHandle{ diff --git a/client/driver/qemu.go b/client/driver/qemu.go index fdc0e7eed..31dc63f36 100644 --- a/client/driver/qemu.go +++ b/client/driver/qemu.go @@ -258,7 +258,8 @@ func (d *QemuDriver) Open(ctx *ExecContext, handleID string) (DriverHandle, erro return nil, fmt.Errorf("error connecting to plugin: %v", err) } - d.logger.Printf("[DEBUG] driver.qemu: version of executor: %v", exec.Version()) + ver, _ := exec.Version() + d.logger.Printf("[DEBUG] driver.qemu: version of executor: %v", ver.Version) // Return a driver handle h := &qemuHandle{ pluginClient: pluginClient, diff --git a/client/driver/raw_exec.go b/client/driver/raw_exec.go index 09377a844..c9610cdc2 100644 --- a/client/driver/raw_exec.go +++ b/client/driver/raw_exec.go @@ -167,7 +167,8 @@ func (d *RawExecDriver) Open(ctx *ExecContext, handleID string) (DriverHandle, e return nil, fmt.Errorf("error connecting to plugin: %v", err) } - d.logger.Printf("[DEBUG] driver.raw_exec: version of executor: %v", exec.Version()) + ver, _ := exec.Version() + d.logger.Printf("[DEBUG] driver.raw_exec: version of executor: %v", ver.Version) // Return a driver handle h := &rawExecHandle{ diff --git a/client/driver/rkt.go b/client/driver/rkt.go index b282cf623..5e2f4e36e 100644 --- a/client/driver/rkt.go +++ b/client/driver/rkt.go @@ -295,7 +295,8 @@ func (d *RktDriver) Open(ctx *ExecContext, handleID string) (DriverHandle, error return nil, fmt.Errorf("error connecting to plugin: %v", err) } - d.logger.Printf("[DEBUG] driver.rkt: version of executor: %v", exec.Version()) + ver, _ := exec.Version() + d.logger.Printf("[DEBUG] driver.rkt: version of executor: %v", ver.Version) // Return a driver handle h := &rktHandle{ pluginClient: pluginClient,