/
main.go
114 lines (102 loc) · 3.25 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package main
import (
"fmt"
"net/http"
"os"
"github.com/cloudfoundry-community/go-cfenv"
_ "github.com/go-sql-driver/mysql"
"github.com/jinzhu/gorm"
"github.com/pivotal-cf/brokerapi"
"github.com/pivotal-golang/lager"
"github.com/xchapter7x/chaospeddler/service_broker"
"github.com/xchapter7x/lo"
)
func main() {
sqlConn := ExtractDBSQL()
basicAuthInfo := ExtractBasicAuthInfo()
cloudControllerInfo := ExtractCloudControllerInfo()
lo.G.Debug("cloud controller", cloudControllerInfo)
chaos := chaospeddler.NewServiceBroker(
chaospeddler.NewMaestro(
cloudControllerInfo.Username,
cloudControllerInfo.Password,
cloudControllerInfo.LoginURL,
cloudControllerInfo.CCURL,
sqlConn,
),
)
chaos.Start()
logger := lager.NewLogger("chaos-peddler-servicebroker")
credentials := brokerapi.BrokerCredentials{
Username: basicAuthInfo.Username,
Password: basicAuthInfo.Password,
}
brokerAPI := brokerapi.New(chaos, logger, credentials)
http.Handle("/", brokerAPI)
http.ListenAndServe(":"+os.Getenv("PORT"), nil)
}
//ExtractDBSQL ---
func ExtractDBSQL() (gormdb chaospeddler.GormDB) {
var err error
var db *gorm.DB
appEnv, _ := cfenv.Current()
service, _ := appEnv.Services.WithName("sql-info")
host := fmt.Sprintf("%v", service.Credentials["hostname"])
port := fmt.Sprintf("%v", service.Credentials["port"])
dbname := fmt.Sprintf("%v", service.Credentials["name"])
user := fmt.Sprintf("%v", service.Credentials["username"])
pass := fmt.Sprintf("%v", service.Credentials["password"])
connectionString := user + ":" + pass + "@tcp(" + host + ":" + port + ")" + "/" + dbname + "?charset=utf8&parseTime=True&loc=Local"
lo.G.Error("connection string: ", connectionString)
if db, err = gorm.Open("mysql", connectionString); err == nil {
db.DB()
db.DB().Ping()
db.DB().SetMaxIdleConns(10)
db.DB().SetMaxOpenConns(100)
db.SingularTable(true)
db.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(
new(chaospeddler.ServiceInstance),
new(chaospeddler.ServiceBinding),
)
gormdb = db
} else {
lo.G.Error("there was an error connecting to mysql: ", err)
panic(err)
}
return
}
//ExtractBasicAuthInfo ----
func ExtractBasicAuthInfo() (basicAuthInfo BasicAuthInfo) {
appEnv, _ := cfenv.Current()
service, _ := appEnv.Services.WithName("basic-auth-info")
basicAuthInfo.Username = fmt.Sprintf("%v", service.Credentials["username"])
basicAuthInfo.Password = fmt.Sprintf("%v", service.Credentials["password"])
return
}
//ExtractCloudControllerInfo ----
func ExtractCloudControllerInfo() (cloudControllerInfo CloudControllerInfo) {
appEnv, _ := cfenv.Current()
service, _ := appEnv.Services.WithName("cloud-controller-info")
cloudControllerInfo.Username = fmt.Sprintf("%v", service.Credentials["username"])
cloudControllerInfo.Password = fmt.Sprintf("%v", service.Credentials["password"])
cloudControllerInfo.LoginURL = fmt.Sprintf("%v", service.Credentials["login-url"])
cloudControllerInfo.CCURL = fmt.Sprintf("%v", service.Credentials["cc-url"])
return
}
//CloudControllerInfo ----
type CloudControllerInfo struct {
Username string
Password string
LoginURL string
CCURL string
}
//BasicAuthInfo ----
type BasicAuthInfo struct {
Username string
Password string
}
//DBInfo ----
type DBInfo struct {
ConnectionURL string
DBName string
}