Skip to content
This repository has been archived by the owner on May 8, 2023. It is now read-only.

Commit

Permalink
Add legacy marshaling and support old-style command line backends.
Browse files Browse the repository at this point in the history
  • Loading branch information
theothertomelliott committed Mar 8, 2018
1 parent 2e9e228 commit 5ae5de0
Show file tree
Hide file tree
Showing 11 changed files with 76 additions and 33 deletions.
3 changes: 2 additions & 1 deletion backend_registry.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (

// RegisterBackends configures all supported service backends.
func RegisterBackends() {
services.RegisterDefaultBackend(&commandline.Loader{})
services.RegisterLegacyMarshaler(&commandline.LegacyUnmarshaler{})
services.RegisterBackend(&commandline.Loader{})
services.RegisterBackend(&docker.Loader{})
}
7 changes: 2 additions & 5 deletions config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ import (

func TestMain(m *testing.M) {
// Register necessary backends
services.RegisterDefaultBackend(&commandline.Loader{})
services.RegisterLegacyMarshaler(&commandline.LegacyUnmarshaler{})
services.RegisterBackend(&commandline.Loader{})

os.Exit(m.Run())
}
Expand All @@ -27,7 +28,6 @@ var service1 = services.ServiceConfig{
RequiresSudo: true,
Backends: []*services.BackendConfig{
{
Name: "backend1",
Type: "commandline",
Config: &commandline.Backend{
Commands: commandline.ServiceConfigCommands{
Expand All @@ -51,7 +51,6 @@ var service1alias = services.ServiceConfig{
RequiresSudo: true,
Backends: []*services.BackendConfig{
{
Name: "backend1",
Type: "commandline",
Config: &commandline.Backend{
Commands: commandline.ServiceConfigCommands{
Expand Down Expand Up @@ -91,7 +90,6 @@ var service2 = services.ServiceConfig{
Path: common.StringToStringPointer("service2/path"),
Backends: []*services.BackendConfig{
{
Name: "backend1",
Type: "commandline",
Config: &commandline.Backend{
Commands: commandline.ServiceConfigCommands{
Expand Down Expand Up @@ -119,7 +117,6 @@ var service3 = services.ServiceConfig{
RequiresSudo: true,
Backends: []*services.BackendConfig{
{
Name: "backend1",
Type: "commandline",
Config: &commandline.Backend{
Commands: commandline.ServiceConfigCommands{
Expand Down
3 changes: 2 additions & 1 deletion edward/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ func TestMain(m *testing.M) {
}

// Register necessary backends
services.RegisterDefaultBackend(&commandline.Loader{})
services.RegisterLegacyMarshaler(&commandline.LegacyUnmarshaler{})
services.RegisterBackend(&commandline.Loader{})

os.Exit(m.Run())
}
Expand Down
2 changes: 1 addition & 1 deletion edward/tail.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ func followGroupLog(logDir string, group *services.ServiceGroupConfig, logChanne

func followServiceLog(logDir string, service *services.ServiceConfig, logChannel chan runner.LogLine) ([]runner.LogLine, error) {
// Skip services that don't include a launch step
if !service.BackendConfig.HasLaunchStep() {
if !service.Backend().HasLaunchStep() {
return nil, nil
}

Expand Down
3 changes: 2 additions & 1 deletion generators/generators_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ import (

func TestMain(m *testing.M) {
// Register necessary backends
services.RegisterDefaultBackend(&commandline.Loader{})
services.RegisterLegacyMarshaler(&commandline.LegacyUnmarshaler{})
services.RegisterBackend(&commandline.Loader{})

os.Exit(m.Run())
}
Expand Down
9 changes: 2 additions & 7 deletions services/backends.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,9 @@ func RegisterBackend(loader BackendLoader) {
loaders[loader.Name()] = loader
}

func RegisterDefaultBackend(loader BackendLoader) {
loaders[loader.Name()] = loader
defaultType = loader.Name()
}

func GetBuilder(s *ServiceConfig) (Builder, error) {
for _, backend := range s.Backends {
if loader, ok := loaders[backend.Type]; !ok {
if loader, ok := loaders[backend.Type]; ok {
return loader.Builder(s)
}
}
Expand All @@ -59,7 +54,7 @@ func GetBuilder(s *ServiceConfig) (Builder, error) {

func GetRunner(s *ServiceConfig) (Runner, error) {
for _, backend := range s.Backends {
if loader, ok := loaders[backend.Type]; !ok {
if loader, ok := loaders[backend.Type]; ok {
return loader.Runner(s)
}
}
Expand Down
3 changes: 2 additions & 1 deletion services/backends/commandline/buildandrun_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ import (

func TestMain(m *testing.M) {
// Register necessary backends
services.RegisterDefaultBackend(&commandline.Loader{})
services.RegisterLegacyMarshaler(&commandline.LegacyUnmarshaler{})
services.RegisterBackend(&commandline.Loader{})

os.Exit(m.Run())
}
Expand Down
27 changes: 27 additions & 0 deletions services/backends/commandline/legacy.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package commandline

import (
"encoding/json"

"github.com/pkg/errors"
"github.com/yext/edward/services"
)

type LegacyUnmarshaler struct{}

func (l *LegacyUnmarshaler) Unmarshal(data []byte, c *services.ServiceConfig) error {
var backend Backend
var empty Backend
err := json.Unmarshal(data, &backend)
if err != nil {
return errors.WithStack(err)
}
if backend != empty {
c.Backends = append(c.Backends, &services.BackendConfig{
Type: "commandline",
Config: &backend,
})
}

return nil
}
34 changes: 19 additions & 15 deletions services/backends/docker/buildandrun_test.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// +build docker
// +build acceptance

package docker_test

Expand All @@ -15,26 +15,30 @@ import (

func TestMain(m *testing.M) {
// Register necessary backends
services.RegisterDefaultBackend(&docker.Loader{})

services.RegisterBackend(&docker.Loader{})
os.Exit(m.Run())
}

func TestStart(t *testing.T) {
service := &services.ServiceConfig{
Name: "testservice",
BackendConfig: &docker.Backend{
Image: "kitematic/hello-world-nginx:latest",
ContainerConfig: docker.Config{
ExposedPorts: map[docker.Port]struct{}{
"8080/tcp": struct{}{},
},
},
HostConfig: docker.HostConfig{
PortBindings: map[docker.Port][]docker.PortBinding{
"80/tcp": []docker.PortBinding{
{
HostPort: "51432/tcp",
Backends: []*services.BackendConfig{
{
Type: "docker",
Config: &docker.Backend{
Image: "kitematic/hello-world-nginx:latest",
ContainerConfig: docker.Config{
ExposedPorts: map[docker.Port]struct{}{
"8080/tcp": struct{}{},
},
},
HostConfig: docker.HostConfig{
PortBindings: map[docker.Port][]docker.PortBinding{
"80/tcp": []docker.PortBinding{
{
HostPort: "51432/tcp",
},
},
},
},
},
Expand Down
11 changes: 11 additions & 0 deletions services/legacy.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package services

type LegacyMarshaler interface {
Unmarshal([]byte, *ServiceConfig) error
}

var legacyUnmarshalers []LegacyMarshaler

func RegisterLegacyMarshaler(l LegacyMarshaler) {
legacyUnmarshalers = append(legacyUnmarshalers, l)
}
7 changes: 6 additions & 1 deletion services/serviceconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,9 +138,14 @@ func (c *ServiceConfig) UnmarshalJSON(data []byte) error {
}{
Alias: (*Alias)(c),
}
if err := json.Unmarshal(data, &aux); err != nil {
if err := json.Unmarshal(data, aux); err != nil {
return errors.Wrap(err, "could not parse service config")
}
for _, m := range legacyUnmarshalers {
if err := m.Unmarshal(data, c); err != nil {
return errors.Wrap(err, "could not parse legacy configuration")
}
}

return nil
}
Expand Down

0 comments on commit 5ae5de0

Please sign in to comment.