mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
84 lines
1.9 KiB
Go
84 lines
1.9 KiB
Go
package service
|
|
|
|
import (
|
|
"net"
|
|
"net/url"
|
|
"os"
|
|
"strconv"
|
|
|
|
"github.com/gorilla/mux"
|
|
|
|
"yunion.io/x/log"
|
|
|
|
"net/http"
|
|
"yunion.io/x/onecloud/pkg/cloudcommon"
|
|
"yunion.io/x/onecloud/pkg/webconsole"
|
|
o "yunion.io/x/onecloud/pkg/webconsole/options"
|
|
"yunion.io/x/onecloud/pkg/webconsole/server"
|
|
)
|
|
|
|
func ensureBinExists(binPath string) {
|
|
if _, err := os.Stat(binPath); os.IsNotExist(err) {
|
|
log.Fatalf("Binary %s not exists", binPath)
|
|
}
|
|
}
|
|
|
|
func StartService() {
|
|
|
|
opts := &o.Options
|
|
commonOpts := &o.Options.CommonOptions
|
|
cloudcommon.ParseOptions(opts, os.Args, "webconsole.conf", "webconsole")
|
|
|
|
if opts.ApiServer == "" {
|
|
log.Fatalf("--api-server must specified")
|
|
}
|
|
_, err := url.Parse(opts.ApiServer)
|
|
if err != nil {
|
|
log.Fatalf("invalid --api-server %s", opts.ApiServer)
|
|
}
|
|
|
|
for _, binPath := range []string{opts.KubectlPath, opts.IpmitoolPath, opts.SshToolPath, opts.SshpassToolPath} {
|
|
ensureBinExists(binPath)
|
|
}
|
|
|
|
cloudcommon.InitAuth(commonOpts, func() {
|
|
log.Infof("Auth complete")
|
|
})
|
|
start()
|
|
}
|
|
|
|
func start() {
|
|
commonOpts := &o.Options.CommonOptions
|
|
app := cloudcommon.InitApp(commonOpts, false)
|
|
webconsole.InitHandlers(app)
|
|
|
|
root := mux.NewRouter()
|
|
root.UseEncodedPath()
|
|
|
|
// api handler
|
|
root.PathPrefix(webconsole.ApiPathPrefix).Handler(app)
|
|
|
|
// websocket command text console handler
|
|
root.Handle(webconsole.ConnectPathPrefix, server.NewConnectionServer())
|
|
|
|
// websockify graphic console handler
|
|
root.Handle(webconsole.WebsockifyPathPrefix, server.NewConnectionServer())
|
|
|
|
addr := net.JoinHostPort(o.Options.Address, strconv.Itoa(o.Options.Port))
|
|
log.Infof("Start listen on %s", addr)
|
|
if o.Options.EnableSsl {
|
|
err := http.ListenAndServeTLS(addr,
|
|
o.Options.SslCertfile,
|
|
o.Options.SslKeyfile,
|
|
root)
|
|
if err != nil && err != http.ErrServerClosed {
|
|
log.Fatalf("%v", err)
|
|
}
|
|
} else {
|
|
err := http.ListenAndServe(addr, root)
|
|
if err != nil {
|
|
log.Fatalf("%v", err)
|
|
}
|
|
}
|
|
}
|