140 lines
3.2 KiB
Go
140 lines
3.2 KiB
Go
// Copyright 2019 Drone.IO Inc. All rights reserved.
|
|
// Use of this source code is governed by the Drone Non-Commercial License
|
|
// that can be found in the LICENSE file.
|
|
|
|
// +build !oss
|
|
|
|
package main
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/drone/drone-runtime/engine/docker"
|
|
"github.com/drone/drone/cmd/drone-agent/config"
|
|
"github.com/drone/drone/operator/manager/rpc"
|
|
"github.com/drone/drone/operator/runner"
|
|
"github.com/drone/drone/plugin/registry"
|
|
"github.com/drone/drone/plugin/secret"
|
|
"github.com/drone/signal"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
|
|
_ "github.com/joho/godotenv/autoload"
|
|
)
|
|
|
|
func main() {
|
|
config, err := config.Environ()
|
|
if err != nil {
|
|
logrus.WithError(err).Fatalln("invalid configuration")
|
|
}
|
|
|
|
initLogging(config)
|
|
ctx := signal.WithContext(
|
|
context.Background(),
|
|
)
|
|
|
|
secrets := secret.External(
|
|
config.Secrets.Endpoint,
|
|
config.Secrets.Password,
|
|
config.Secrets.SkipVerify,
|
|
)
|
|
|
|
auths := registry.Combine(
|
|
registry.External(
|
|
config.Secrets.Endpoint,
|
|
config.Secrets.Password,
|
|
config.Secrets.SkipVerify,
|
|
),
|
|
registry.FileSource(
|
|
config.Docker.Config,
|
|
),
|
|
registry.EndpointSource(
|
|
config.Registries.Endpoint,
|
|
config.Registries.Password,
|
|
config.Registries.SkipVerify,
|
|
),
|
|
)
|
|
|
|
manager := rpc.NewClient(
|
|
config.RPC.Proto+"://"+config.RPC.Host,
|
|
config.RPC.Secret,
|
|
)
|
|
if config.RPC.Debug {
|
|
manager.SetDebug(true)
|
|
}
|
|
if config.Logging.Trace {
|
|
manager.SetDebug(true)
|
|
}
|
|
|
|
engine, err := docker.NewEnv()
|
|
if err != nil {
|
|
logrus.WithError(err).
|
|
Fatalln("cannot load the docker engine")
|
|
}
|
|
for {
|
|
err := docker.Ping(ctx, engine)
|
|
if err == context.Canceled {
|
|
break
|
|
}
|
|
if err != nil {
|
|
logrus.WithError(err).
|
|
Errorln("cannot ping the docker daemon")
|
|
time.Sleep(time.Second)
|
|
} else {
|
|
logrus.Debugln("successfully pinged the docker daemon")
|
|
break
|
|
}
|
|
}
|
|
|
|
r := &runner.Runner{
|
|
Platform: config.Runner.Platform,
|
|
OS: config.Runner.OS,
|
|
Arch: config.Runner.Arch,
|
|
Kernel: config.Runner.Kernel,
|
|
Variant: config.Runner.Variant,
|
|
Engine: engine,
|
|
Manager: manager,
|
|
Registry: auths,
|
|
Secrets: secrets,
|
|
Volumes: config.Runner.Volumes,
|
|
Networks: config.Runner.Networks,
|
|
Devices: config.Runner.Devices,
|
|
Privileged: config.Runner.Privileged,
|
|
Machine: config.Runner.Machine,
|
|
Labels: config.Runner.Labels,
|
|
Environ: config.Runner.Environ,
|
|
Limits: runner.Limits{
|
|
MemSwapLimit: int64(config.Runner.Limits.MemSwapLimit),
|
|
MemLimit: int64(config.Runner.Limits.MemLimit),
|
|
ShmSize: int64(config.Runner.Limits.ShmSize),
|
|
CPUQuota: config.Runner.Limits.CPUQuota,
|
|
CPUShares: config.Runner.Limits.CPUShares,
|
|
CPUSet: config.Runner.Limits.CPUSet,
|
|
},
|
|
}
|
|
if err := r.Start(ctx, config.Runner.Capacity); err != nil {
|
|
logrus.WithError(err).
|
|
Warnln("program terminated")
|
|
}
|
|
}
|
|
|
|
// helper function configures the logging.
|
|
func initLogging(c config.Config) {
|
|
if c.Logging.Debug {
|
|
logrus.SetLevel(logrus.DebugLevel)
|
|
}
|
|
if c.Logging.Trace {
|
|
logrus.SetLevel(logrus.TraceLevel)
|
|
}
|
|
if c.Logging.Text {
|
|
logrus.SetFormatter(&logrus.TextFormatter{
|
|
ForceColors: c.Logging.Color,
|
|
DisableColors: !c.Logging.Color,
|
|
})
|
|
} else {
|
|
logrus.SetFormatter(&logrus.JSONFormatter{
|
|
PrettyPrint: c.Logging.Pretty,
|
|
})
|
|
}
|
|
}
|