Skip to content
This repository was archived by the owner on Nov 16, 2020. It is now read-only.

Commit ea9c810

Browse files
authored
Service manager initial commit (#346)
* WIP: OSBAPI support for service integration * Update vendored files * vendor riff separately... ugh * fix merge issues * fix swagger generated files * regenerate swagger files * fix postgres driver and bump e2e retries * Allow objects passed as parameters * previously just allowed map[string]string which doesn't work for all brokers * add some more tests * slight cleanup
1 parent 6c8f8da commit ea9c810

File tree

2,231 files changed

+779915
-11019
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

2,231 files changed

+779915
-11019
lines changed

Gopkg.lock

Lines changed: 61 additions & 356 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Gopkg.toml

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -57,38 +57,26 @@
5757
name = "github.com/tylerb/graceful"
5858
version = "1.2.15"
5959

60-
[[constraint]]
61-
name = "github.com/ugorji/go"
62-
revision = "5dfac818335991034af249bfc598e41c73ea1826"
63-
6460
[[constraint]]
6561
name = "k8s.io/api"
66-
branch = "release-1.8"
62+
version = "kubernetes-1.9.1"
6763

6864
[[constraint]]
6965
name = "k8s.io/apimachinery"
70-
branch = "release-1.8"
66+
version = "kubernetes-1.9.1"
7167

7268
[[constraint]]
7369
name = "k8s.io/client-go"
74-
branch = "release-5.0"
70+
version = "kubernetes-1.9.1"
7571

7672
[[constraint]]
7773
name = "k8s.io/code-generator"
78-
branch = "release-1.8"
79-
80-
[[override]]
81-
name = "k8s.io/gengo"
82-
revision = "9e661e9308f078838e266cca1c673922088c0ea4"
74+
version = "kubernetes-1.9.1"
8375

8476
[[constraint]]
8577
name = "github.com/sirupsen/logrus"
8678
version = "v1.0.3"
8779

88-
[[override]]
89-
name = "github.com/ugorji/go"
90-
revision = "8c0409fcbb70099c748d71f714529204975f6c3f"
91-
9280
[[constraint]]
9381
name = "github.com/streadway/amqp"
9482
branch = "master"

Makefile

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ all: generate linux darwin
4242
.PHONY: goversion
4343
goversion:
4444
@echo Checking go version...
45-
@(goversion=$$($(GO) version | cut -d' ' -f3); echo "$(GOVERSIONS)" | grep -q $$goversion || ( echo "Please install one of $(GOVERSIONS) (found: $$goversion)" && exit 2 ))
45+
@(goversion=$$($(GO) version | cut -d' ' -f3 | cut -d'.' -f1,2); echo "$(GOVERSIONS)" | grep -q $$goversion || ( echo "Please install one of $(GOVERSIONS) (found: $$goversion)" && exit 2 ))
4646

4747
.PHONY: check
4848
check: goversion checkfmt checklint swagger-validate ## check if the source files comply to the formatting rules
@@ -95,7 +95,8 @@ run-dev: ## run the dev server
9595

9696
CLI = dispatch
9797
SERVICES = api-manager application-manager event-driver event-manager \
98-
function-manager identity-manager image-manager secret-store event-sidecar
98+
function-manager identity-manager image-manager secret-store event-sidecar \
99+
service-manager
99100

100101
DARWIN_BINS = $(CLI)-darwin $(foreach bin,$(SERVICES),$(bin)-darwin)
101102
LINUX_BINS = $(CLI)-linux $(foreach bin,$(SERVICES),$(bin)-linux)
@@ -138,6 +139,7 @@ generate: ## run go generate
138139
scripts/generate.sh identity-manager IdentityManager identity-manager.yaml
139140
scripts/generate.sh image-manager ImageManager image-manager.yaml
140141
scripts/generate.sh secret-store SecretStore secret-store.yaml
142+
scripts/generate.sh service-manager ServiceManager service-manager.yaml
141143
scripts/header-check.sh fix
142144

143145
.PHONY: gen-clean

cmd/service-manager/main.go

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
///////////////////////////////////////////////////////////////////////
2+
// Copyright (c) 2017 VMware, Inc. All Rights Reserved.
3+
// SPDX-License-Identifier: Apache-2.0
4+
///////////////////////////////////////////////////////////////////////
5+
6+
package main
7+
8+
import (
9+
"os"
10+
"time"
11+
12+
"github.com/go-openapi/loads"
13+
"github.com/go-openapi/loads/fmts"
14+
"github.com/go-openapi/swag"
15+
"github.com/jessevdk/go-flags"
16+
"github.com/justinas/alice"
17+
log "github.com/sirupsen/logrus"
18+
19+
"github.com/vmware/dispatch/pkg/config"
20+
"github.com/vmware/dispatch/pkg/entity-store"
21+
"github.com/vmware/dispatch/pkg/middleware"
22+
"github.com/vmware/dispatch/pkg/service-manager"
23+
"github.com/vmware/dispatch/pkg/service-manager/clients"
24+
servicemanagerflags "github.com/vmware/dispatch/pkg/service-manager/flags"
25+
"github.com/vmware/dispatch/pkg/service-manager/gen/restapi"
26+
"github.com/vmware/dispatch/pkg/service-manager/gen/restapi/operations"
27+
"github.com/vmware/dispatch/pkg/trace"
28+
)
29+
30+
func init() {
31+
loads.AddLoader(fmts.YAMLMatcher, fmts.YAMLDoc)
32+
}
33+
34+
var debugFlags = struct {
35+
DebugEnabled bool `long:"debug" description:"Enable debugging messages"`
36+
TracingEnabled bool `long:"trace" description:"Enable tracing messages (enables debugging)"`
37+
}{}
38+
39+
func configureFlags() []swag.CommandLineOptionsGroup {
40+
return []swag.CommandLineOptionsGroup{
41+
{
42+
ShortDescription: "Service manager Flags",
43+
LongDescription: "",
44+
Options: &servicemanagerflags.ServiceManagerFlags,
45+
},
46+
{
47+
ShortDescription: "Debug options",
48+
LongDescription: "",
49+
Options: &debugFlags,
50+
},
51+
}
52+
}
53+
54+
func main() {
55+
swaggerSpec, err := loads.Analyzed(restapi.SwaggerJSON, "2.0")
56+
if err != nil {
57+
log.Fatalln(err)
58+
}
59+
60+
api := operations.NewServiceManagerAPI(swaggerSpec)
61+
server := restapi.NewServer(api)
62+
63+
parser := flags.NewParser(server, flags.Default)
64+
parser.ShortDescription = "Service Manager"
65+
parser.LongDescription = "This is the API server for the Dispatch Service Manager service.\n"
66+
67+
optsGroups := configureFlags()
68+
for _, optsGroup := range optsGroups {
69+
_, err := parser.AddGroup(optsGroup.ShortDescription, optsGroup.LongDescription, optsGroup.Options)
70+
if err != nil {
71+
log.Fatalln(err)
72+
}
73+
}
74+
75+
if _, err := parser.Parse(); err != nil {
76+
code := 1
77+
if fe, ok := err.(*flags.Error); ok {
78+
if fe.Type == flags.ErrHelp {
79+
code = 0
80+
}
81+
}
82+
os.Exit(code)
83+
}
84+
85+
if debugFlags.DebugEnabled {
86+
log.SetLevel(log.DebugLevel)
87+
}
88+
if debugFlags.TracingEnabled {
89+
log.SetLevel(log.DebugLevel)
90+
trace.Enable()
91+
}
92+
93+
config.Global = config.LoadConfiguration(servicemanagerflags.ServiceManagerFlags.Config)
94+
95+
store, err := entitystore.NewFromBackend(
96+
entitystore.BackendConfig{
97+
Backend: servicemanagerflags.ServiceManagerFlags.DbBackend,
98+
Address: servicemanagerflags.ServiceManagerFlags.DbFile,
99+
Bucket: servicemanagerflags.ServiceManagerFlags.DbDatabase,
100+
Username: servicemanagerflags.ServiceManagerFlags.DbUser,
101+
Password: servicemanagerflags.ServiceManagerFlags.DbPassword,
102+
})
103+
if err != nil {
104+
log.Fatalln(err)
105+
}
106+
107+
k8sClient, err := clients.NewK8sBrokerClient(
108+
clients.K8sBrokerConfigOpts{
109+
K8sConfig: servicemanagerflags.ServiceManagerFlags.K8sConfig,
110+
CatalogNamespace: servicemanagerflags.ServiceManagerFlags.K8sCatalogNamespace,
111+
SecretStoreURL: servicemanagerflags.ServiceManagerFlags.SecretStore,
112+
OrgID: servicemanagerflags.ServiceManagerFlags.OrgID,
113+
},
114+
)
115+
if err != nil {
116+
log.Fatalf("Error creating k8sClient: %v", err)
117+
}
118+
// service controller
119+
serviceController := servicemanager.NewController(
120+
&servicemanager.ControllerConfig{
121+
OrganizationID: servicemanagerflags.ServiceManagerFlags.OrgID,
122+
ResyncPeriod: time.Second * time.Duration(servicemanagerflags.ServiceManagerFlags.ResyncPeriod),
123+
},
124+
store,
125+
k8sClient,
126+
)
127+
128+
defer serviceController.Shutdown()
129+
serviceController.Start()
130+
131+
// handler
132+
handlers := &servicemanager.Handlers{
133+
Store: store,
134+
Watcher: serviceController.Watcher(),
135+
}
136+
137+
handlers.ConfigureHandlers(api)
138+
139+
healthChecker := func() error {
140+
// TODO: implement service-specific healthchecking
141+
return nil
142+
}
143+
144+
handler := alice.New(
145+
middleware.NewHealthCheckMW("", healthChecker),
146+
).Then(api.Serve(nil))
147+
148+
server.SetHandler(handler)
149+
150+
defer server.Shutdown()
151+
if err := server.Serve(); err != nil {
152+
log.Fatalln(err)
153+
}
154+
155+
}

e2e/tests/application.bats

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ load variables
7878
echo_to_log
7979
assert_success
8080

81-
run_with_retry "dispatch get function -a foo-app --json | jq -r .[].status" "READY" 8 5
81+
run_with_retry "dispatch get function -a foo-app --json | jq -r .[].status" "READY" 20 5
8282
}
8383

8484
@test "Function execution" {

images/service-manager/Dockerfile

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
FROM vmware/photon:2.0
2+
3+
ADD bin/service-manager-linux /service-manager
4+
RUN chmod +x /service-manager
5+
6+
VOLUME ["/data/service-manager"]
7+
8+
ENTRYPOINT ["/service-manager"]
9+
CMD ["--db-file=/data/service-manager/db.bolt", "--host=0.0.0.0", "--port=8000"]

0 commit comments

Comments
 (0)