Skip to content

Commit e0d06f8

Browse files
committed
Merge pull request #262 from kmala/storage
feat(storage): implement separate storage layer
2 parents f8ce7d7 + 67a9adb commit e0d06f8

29 files changed

Lines changed: 355 additions & 899 deletions

boot.go

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,13 @@ import (
1313
"github.com/deis/builder/pkg/gitreceive"
1414
"github.com/deis/builder/pkg/healthsrv"
1515
"github.com/deis/builder/pkg/sshd"
16-
"github.com/deis/builder/pkg/storage"
1716
"github.com/deis/builder/pkg/sys"
1817
pkglog "github.com/deis/pkg/log"
18+
storagedriver "github.com/docker/distribution/registry/storage/driver"
19+
_ "github.com/docker/distribution/registry/storage/driver/azure"
20+
"github.com/docker/distribution/registry/storage/driver/factory"
21+
_ "github.com/docker/distribution/registry/storage/driver/gcs"
22+
_ "github.com/docker/distribution/registry/storage/driver/s3-aws"
1923
kcl "k8s.io/kubernetes/pkg/client/unversioned"
2024
)
2125

@@ -49,16 +53,27 @@ func main() {
4953
pkglog.Err("getting config for %s [%s]", serverConfAppName, err)
5054
os.Exit(1)
5155
}
52-
env := sys.RealEnv()
5356
fs := sys.RealFS()
57+
env := sys.RealEnv()
5458
pushLock := sshd.NewInMemoryRepositoryLock()
5559
circ := sshd.NewCircuit()
5660

57-
s3Client, err := storage.GetClient(cnf.HealthSrvTestStorageRegion, fs, env)
61+
storageParams, err := conf.GetStorageParams(env)
5862
if err != nil {
59-
log.Printf("Error getting s3 client (%s)", err)
63+
log.Printf("Error getting storage parameters (%s)", err)
6064
os.Exit(1)
6165
}
66+
var storageDriver storagedriver.StorageDriver
67+
if cnf.StorageType == "minio" {
68+
storageDriver, err = factory.Create("s3", storageParams)
69+
} else {
70+
storageDriver, err = factory.Create(cnf.StorageType, storageParams)
71+
}
72+
if err != nil {
73+
log.Printf("Error creating storage driver (%s)", err)
74+
os.Exit(1)
75+
}
76+
6277
kubeClient, err := kcl.NewInCluster()
6378
if err != nil {
6479
log.Printf("Error getting kubernetes client [%s]", err)
@@ -67,7 +82,7 @@ func main() {
6782
log.Printf("Starting health check server on port %d", cnf.HealthSrvPort)
6883
healthSrvCh := make(chan error)
6984
go func() {
70-
if err := healthsrv.Start(cnf.HealthSrvPort, kubeClient.Namespaces(), s3Client, circ); err != nil {
85+
if err := healthsrv.Start(cnf.HealthSrvPort, kubeClient.Namespaces(), storageDriver, circ); err != nil {
7186
healthSrvCh <- err
7287
}
7388
}()
@@ -111,8 +126,23 @@ func main() {
111126
cnf.CheckDurations()
112127
fs := sys.RealFS()
113128
env := sys.RealEnv()
129+
storageParams, err := conf.GetStorageParams(env)
130+
if err != nil {
131+
log.Printf("Error getting storage parameters (%s)", err)
132+
os.Exit(1)
133+
}
134+
var storageDriver storagedriver.StorageDriver
135+
if cnf.StorageType == "minio" {
136+
storageDriver, err = factory.Create("s3", storageParams)
137+
} else {
138+
storageDriver, err = factory.Create(cnf.StorageType, storageParams)
139+
}
140+
if err != nil {
141+
log.Printf("Error creating storage driver (%s)", err)
142+
os.Exit(1)
143+
}
114144

115-
if err := gitreceive.Run(cnf, fs, env); err != nil {
145+
if err := gitreceive.Run(cnf, fs, env, storageDriver); err != nil {
116146
log.Printf("Error running git receive hook [%s]", err)
117147
os.Exit(1)
118148
}

glide.lock

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

glide.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,6 @@ import:
3232
version: ~1.1
3333
- package: github.com/arschles/assert
3434
version: 6882f85ccdc7c1822b146d1a6b0c2c48f91b5140
35-
- package: github.com/minio/minio-go
35+
- package: github.com/docker/distribution
36+
repo: https://github.com/deis/distribution
37+
vcs: git

pkg/conf/config.go

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,20 @@ import (
44
"fmt"
55
"io/ioutil"
66

7+
"github.com/deis/builder/pkg/sys"
78
"github.com/kelseyhightower/envconfig"
89
)
910

1011
const (
11-
builderKeyLocation = "/var/run/secrets/api/auth/builder-key"
12+
builderKeyLocation = "/var/run/secrets/api/auth/builder-key"
13+
storageCredLocation = "/var/run/secrets/deis/objectstore/creds/"
14+
minioHostEnvVar = "DEIS_MINIO_SERVICE_HOST"
15+
minioPortEnvVar = "DEIS_MINIO_SERVICE_PORT"
16+
gcsKey = "key.json"
1217
)
1318

19+
type Parameters map[string]interface{}
20+
1421
// EnvConfig is a convenience function to process the envconfig (
1522
// https://github.com/kelseyhightower/envconfig) based configuration environment variables into
1623
// conf. Additional notes:
@@ -35,3 +42,36 @@ func GetBuilderKey() (string, error) {
3542
builderKey := string(builderKeyBytes)
3643
return builderKey, nil
3744
}
45+
46+
func GetStorageParams(env sys.Env) (Parameters, error) {
47+
params := make(map[string]interface{})
48+
files, err := ioutil.ReadDir(storageCredLocation)
49+
if err != nil {
50+
return nil, err
51+
}
52+
53+
for _, file := range files {
54+
data, err := ioutil.ReadFile(storageCredLocation + file.Name())
55+
if err != nil {
56+
return nil, err
57+
}
58+
//GCS expect the to have the location of the service account credential json file
59+
if file.Name() == gcsKey {
60+
params["keyfile"] = storageCredLocation + file.Name()
61+
} else {
62+
params[file.Name()] = string(data)
63+
}
64+
}
65+
params["bucket"] = params["builder-bucket"]
66+
params["container"] = params["builder-container"]
67+
if env.Get("BUILDER_STORAGE") == "minio" {
68+
mHost := env.Get(minioHostEnvVar)
69+
mPort := env.Get(minioPortEnvVar)
70+
params["regionendpoint"] = fmt.Sprintf("http://%s:%s", mHost, mPort)
71+
params["secure"] = false
72+
params["region"] = "us-east-1"
73+
params["bucket"] = "git"
74+
}
75+
76+
return params, nil
77+
}

0 commit comments

Comments
 (0)