本文整理汇总了Golang中github.com/flynn/flynn/pkg/cluster.NewClient函数的典型用法代码示例。如果您正苦于以下问题:Golang NewClient函数的具体用法?Golang NewClient怎么用?Golang NewClient使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewClient函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: main
func main() {
grohl.AddContext("app", "controller-scheduler")
grohl.Log(grohl.Data{"at": "start"})
cc, err := controller.NewClient("", os.Getenv("AUTH_KEY"))
if err != nil {
log.Fatal(err)
}
cl, err := cluster.NewClient()
if err != nil {
log.Fatal(err)
}
c := newContext(cc, cl)
grohl.Log(grohl.Data{"at": "leaderwait"})
leaderWait, err := discoverd.RegisterAndStandby("flynn-controller-scheduler", ":"+os.Getenv("PORT"), nil)
if err != nil {
log.Fatal(err)
}
<-leaderWait
grohl.Log(grohl.Data{"at": "leader"})
// TODO: periodic full cluster sync for anti-entropy
c.watchFormations(nil, nil)
}
开发者ID:johan--,项目名称:flynn,代码行数:25,代码来源:main.go
示例2: main
func main() {
port := os.Getenv("PORT")
if port == "" {
port = "3000"
}
addr := ":" + port
db, err := postgres.Open("", "")
if err != nil {
log.Fatal(err)
}
if err := migrateDB(db.DB); err != nil {
log.Fatal(err)
}
cc, err := cluster.NewClient()
if err != nil {
log.Fatal(err)
}
sc, err := strowgerc.New()
if err != nil {
log.Fatal(err)
}
if err := discoverd.Register("flynn-controller", addr); err != nil {
log.Fatal(err)
}
handler, _ := appHandler(handlerConfig{db: db, cc: cc, sc: sc, dc: discoverd.DefaultClient, key: os.Getenv("AUTH_KEY")})
log.Fatal(http.ListenAndServe(addr, handler))
}
开发者ID:kelsieflynn,项目名称:seraphilos,代码行数:33,代码来源:controller.go
示例3: Run
func Run(name string, args []string) error {
argv := make([]string, 1, 1+len(args))
argv[0] = name
argv = append(argv, args...)
cmd, ok := commands[name]
if !ok {
return ErrInvalidCommand
}
parsedArgs, err := docopt.Parse(cmd.usage, argv, true, "", strings.Contains(cmd.usage, "[--]"))
if err != nil {
return err
}
switch f := cmd.f.(type) {
case func(*docopt.Args, *cluster.Client) error:
return f(parsedArgs, cluster.NewClient())
case func(*docopt.Args):
f(parsedArgs)
return nil
case func(*docopt.Args) error:
return f(parsedArgs)
case func() error:
return f()
case func():
f()
return nil
}
return fmt.Errorf("unexpected command type %T", cmd.f)
}
开发者ID:ably-forks,项目名称:flynn,代码行数:31,代码来源:cli.go
示例4: main
func main() {
grohl.AddContext("app", "controller-scheduler")
grohl.Log(grohl.Data{"at": "start"})
if period := os.Getenv("BACKOFF_PERIOD"); period != "" {
var err error
backoffPeriod, err = time.ParseDuration(period)
if err != nil {
log.Fatal(err)
}
grohl.Log(grohl.Data{"at": "backoff_period", "period": backoffPeriod.String()})
}
cc, err := controller.NewClient("", os.Getenv("AUTH_KEY"))
if err != nil {
log.Fatal(err)
}
cl, err := cluster.NewClient()
if err != nil {
log.Fatal(err)
}
c := newContext(cc, cl)
grohl.Log(grohl.Data{"at": "leaderwait"})
leaderWait, err := discoverd.RegisterAndStandby("flynn-controller-scheduler", ":"+os.Getenv("PORT"), nil)
if err != nil {
log.Fatal(err)
}
<-leaderWait
grohl.Log(grohl.Data{"at": "leader"})
// TODO: periodic full cluster sync for anti-entropy
c.watchFormations()
}
开发者ID:ericcapricorn,项目名称:flynn,代码行数:34,代码来源:main.go
示例5: runListHosts
func runListHosts(args *docopt.Args) error {
clusterClient := cluster.NewClient()
hosts, err := clusterClient.Hosts()
if err != nil {
return err
}
if len(hosts) == 0 {
return errors.New("no hosts found")
}
peers, _ := discoverd.DefaultClient.RaftPeers()
leader, _ := discoverd.DefaultClient.RaftLeader()
w := tabwriter.NewWriter(os.Stdout, 1, 2, 2, ' ', 0)
defer w.Flush()
listRec(w, "ID", "ADDR", "RAFT STATUS")
for _, h := range hosts {
// If we have the list of raft peers augument the output
// with each hosts raft proxy/peer status.
raftStatus := ""
if len(peers) > 0 {
raftStatus = hostRaftStatus(h, peers, leader.Host)
}
listRec(w, h.ID(), h.Addr(), raftStatus)
}
return nil
}
开发者ID:ably-forks,项目名称:flynn,代码行数:27,代码来源:list.go
示例6: captureJobs
func captureJobs(gist *Gist, env bool) error {
client := cluster.NewClient()
jobs, err := jobList(client, true)
if err != nil {
return err
}
var buf bytes.Buffer
printJobs(jobs, &buf)
gist.AddFile("1-jobs.log", buf.String())
for _, job := range jobs {
var name string
if app, ok := job.Job.Metadata["flynn-controller.app_name"]; ok {
name += app + "-"
}
if typ, ok := job.Job.Metadata["flynn-controller.type"]; ok {
name += typ + "-"
}
name += job.Job.ID + ".log"
var content bytes.Buffer
printJobDesc(&job, &content, env)
fmt.Fprint(&content, "\n\n***** ***** ***** ***** ***** ***** ***** ***** ***** *****\n\n")
getLog(job.HostID, job.Job.ID, client, false, true, &content, &content)
gist.AddFile(name, content.String())
}
return nil
}
开发者ID:kuntenz,项目名称:flynn,代码行数:32,代码来源:collect-debug-info.go
示例7: init
func init() {
log.SetFlags(0)
var err error
clusterc, err = cluster.NewClient()
if err != nil {
log.Fatalln("Error connecting to cluster leader:", err)
}
}
开发者ID:kelsieflynn,项目名称:seraphilos,代码行数:9,代码来源:flynn-receive.go
示例8: ClusterClient
func (s *State) ClusterClient() (*cluster.Client, error) {
if s.clusterc == nil {
cc, err := cluster.NewClient()
if err != nil {
return nil, err
}
s.clusterc = cc
}
return s.clusterc, nil
}
开发者ID:ericcapricorn,项目名称:flynn,代码行数:10,代码来源:bootstrap.go
示例9: main
func main() {
defer shutdown.Exit()
grohl.AddContext("app", "controller-scheduler")
grohl.Log(grohl.Data{"at": "start"})
go startHTTPServer()
if period := os.Getenv("BACKOFF_PERIOD"); period != "" {
var err error
backoffPeriod, err = time.ParseDuration(period)
if err != nil {
shutdown.Fatal(err)
}
grohl.Log(grohl.Data{"at": "backoff_period", "period": backoffPeriod.String()})
}
cc, err := controller.NewClient("", os.Getenv("AUTH_KEY"))
if err != nil {
shutdown.Fatal(err)
}
c := newContext(cc, cluster.NewClient())
c.watchHosts()
grohl.Log(grohl.Data{"at": "leaderwait"})
hb, err := discoverd.AddServiceAndRegister("controller-scheduler", ":"+os.Getenv("PORT"))
if err != nil {
shutdown.Fatal(err)
}
shutdown.BeforeExit(func() { hb.Close() })
leaders := make(chan *discoverd.Instance)
stream, err := discoverd.NewService("controller-scheduler").Leaders(leaders)
if err != nil {
shutdown.Fatal(err)
}
for leader := range leaders {
if leader.Addr == hb.Addr() {
break
}
}
if err := stream.Err(); err != nil {
// TODO: handle discoverd errors
shutdown.Fatal(err)
}
stream.Close()
// TODO: handle demotion
grohl.Log(grohl.Data{"at": "leader"})
// TODO: periodic full cluster sync for anti-entropy
c.watchFormations()
}
开发者ID:kuntenz,项目名称:flynn,代码行数:54,代码来源:main.go
示例10: ServeHTTP
func (h *Host) ServeHTTP() {
r := httprouter.New()
r.POST("/attach", (&attachHandler{state: h.state, backend: h.backend}).ServeHTTP)
jobAPI := &jobAPI{host: h}
jobAPI.RegisterRoutes(r)
volAPI := volumeapi.NewHTTPAPI(cluster.NewClient(), h.vman)
volAPI.RegisterRoutes(r)
go http.Serve(h.listener, httphelper.ContextInjector("host", httphelper.NewRequestLogger(r)))
}
开发者ID:devick,项目名称:flynn,代码行数:13,代码来源:http.go
示例11: ServeHTTP
func (h *Host) ServeHTTP() {
r := httprouter.New()
r.POST("/attach", newAttachHandler(h.state, h.backend, h.log).ServeHTTP)
jobAPI := &jobAPI{
host: h,
addJobRateLimitBucket: NewRateLimitBucket(h.maxJobConcurrency),
}
jobAPI.RegisterRoutes(r)
volAPI := volumeapi.NewHTTPAPI(cluster.NewClient(), h.vman)
volAPI.RegisterRoutes(r)
go http.Serve(h.listener, httphelper.ContextInjector("host", httphelper.NewRequestLogger(r)))
}
开发者ID:ably-forks,项目名称:flynn,代码行数:16,代码来源:http.go
示例12: main
func main() {
port := os.Getenv("PORT")
if port == "" {
port = "3000"
}
addr := ":" + port
if seed := os.Getenv("NAME_SEED"); seed != "" {
s, err := hex.DecodeString(seed)
if err != nil {
log.Fatalln("error decoding NAME_SEED:", err)
}
name.SetSeed(s)
}
db, err := postgres.Open("", "")
if err != nil {
log.Fatal(err)
}
if err := migrateDB(db.DB); err != nil {
log.Fatal(err)
}
cc, err := cluster.NewClient()
if err != nil {
log.Fatal(err)
}
sc, err := routerc.New()
if err != nil {
log.Fatal(err)
}
if err := discoverd.Register("flynn-controller", addr); err != nil {
log.Fatal(err)
}
shutdown.BeforeExit(func() {
discoverd.Unregister("flynn-controller", addr)
})
handler, _ := appHandler(handlerConfig{db: db, cc: cc, sc: sc, dc: discoverd.DefaultClient, key: os.Getenv("AUTH_KEY")})
log.Fatal(http.ListenAndServe(addr, handler))
}
开发者ID:ericcapricorn,项目名称:flynn,代码行数:45,代码来源:controller.go
示例13: Run
func (m *Monitor) Run() {
log := monitorLogger.New("fn", "Run")
log.Info("waiting for discoverd")
m.waitDiscoverd()
log.Info("waiting for raft leader")
m.waitRaftLeader()
// we can connect the leader election wrapper now
m.discoverd = newDiscoverdWrapper(m.addr+":1113", m.logger)
// connect cluster client now that discoverd is up.
m.c = cluster.NewClient()
m.monitorSvc = discoverd.NewService("cluster-monitor")
log.Info("waiting for monitor service to be enabled for this cluster")
m.waitEnabled()
log.Info("registering cluster-monitor")
m.waitRegister()
leaderCh := m.discoverd.LeaderCh()
ticker := time.NewTicker(checkInterval)
log.Info("starting monitor loop")
for {
var isLeader bool
select {
case <-m.shutdownCh:
log.Info("shutting down monitor")
return
case isLeader = <-leaderCh:
m.isLeader = isLeader
continue
default:
}
select {
case <-ticker.C:
if m.isLeader {
m.checkCluster()
}
}
}
}
开发者ID:ably-forks,项目名称:flynn,代码行数:45,代码来源:monitor.go
示例14: runListHosts
func runListHosts(args *docopt.Args) error {
clusterClient := cluster.NewClient()
hosts, err := clusterClient.Hosts()
if err != nil {
return err
}
if len(hosts) == 0 {
return errors.New("no hosts found")
}
w := tabwriter.NewWriter(os.Stdout, 1, 2, 2, ' ', 0)
defer w.Flush()
listRec(w, "ID", "ADDR")
for _, h := range hosts {
listRec(w, h.ID(), h.Addr())
}
return nil
}
开发者ID:devick,项目名称:flynn,代码行数:18,代码来源:list.go
示例15: Run
func Run(name string, args []string) error {
argv := make([]string, 1, 1+len(args))
argv[0] = name
argv = append(argv, args...)
cmd, ok := commands[name]
if !ok {
return fmt.Errorf("%s is not a valid command", name)
}
parsedArgs, err := docopt.Parse(cmd.usage, argv, true, "", false)
if err != nil {
return err
}
switch f := cmd.f.(type) {
case func(*docopt.Args, *cluster.Client) error:
client, err := cluster.NewClient()
if err != nil {
return err
}
defer client.Close()
return f(parsedArgs, client)
case func(*docopt.Args):
f(parsedArgs)
return nil
case func(*docopt.Args) error:
return f(parsedArgs)
case func() error:
return f()
case func():
f()
return nil
}
return fmt.Errorf("unexpected command type %T", cmd.f)
}
开发者ID:ericcapricorn,项目名称:flynn,代码行数:36,代码来源:cli.go
示例16: Start
func (c *Cmd) Start() error {
if c.started {
return errors.New("exec: already started")
}
c.started = true
if c.cluster == nil {
var err error
c.cluster, err = cluster.NewClient()
if err != nil {
return err
}
c.closeCluster = true
}
hosts, err := c.cluster.ListHosts()
if err != nil {
return err
}
if c.HostID == "" {
// TODO: check if this is actually random
for c.HostID = range hosts {
break
}
}
if c.JobID == "" {
c.JobID = cluster.RandomJobID("")
}
job := &host.Job{
ID: c.JobID,
Config: &docker.Config{
Image: c.Image,
Cmd: c.Cmd,
Tty: c.TTY,
Env: formatEnv(c.Env),
},
Attributes: c.Attrs,
}
if c.Stdout != nil || c.stdoutPipe != nil {
job.Config.AttachStdout = true
}
if c.Stderr != nil || c.stderrPipe != nil {
job.Config.AttachStderr = true
}
if c.Stdin != nil || c.stdinPipe != nil {
job.Config.AttachStdin = true
job.Config.OpenStdin = true
job.Config.StdinOnce = true
}
c.host, err = c.cluster.DialHost(c.HostID)
if err != nil {
return err
}
// subscribe to host events
ch := make(chan *host.Event)
stream := c.host.StreamEvents(job.ID, ch)
go func() {
for event := range ch {
if event.Event == "stop" || event.Event == "error" {
close(c.done)
return
}
}
c.streamErr = stream.Err()
close(c.done)
// TODO: handle disconnections
}()
var rwc cluster.ReadWriteCloser
var attachWait func() error
if c.Stdout != nil || c.Stderr != nil || c.Stdin != nil ||
c.stdoutPipe != nil || c.stderrPipe != nil || c.stdinPipe != nil {
req := &host.AttachReq{
JobID: job.ID,
Height: c.TermHeight,
Width: c.TermWidth,
Flags: host.AttachFlagStream,
}
if job.Config.AttachStdout {
req.Flags |= host.AttachFlagStdout
}
if job.Config.AttachStderr {
req.Flags |= host.AttachFlagStderr
}
if job.Config.AttachStdin {
req.Flags |= host.AttachFlagStdin
}
rwc, attachWait, err = c.host.Attach(req, true)
if err != nil {
c.close()
return err
}
}
goroutines := make([]func() error, 0, 4)
c.attachConn = rwc
//.........这里部分代码省略.........
开发者ID:kelsieflynn,项目名称:seraphilos,代码行数:101,代码来源:exec.go
示例17: runUpdate
func runUpdate(args *docopt.Args) error {
log := log15.New()
// create and update a TUF client
log.Info("initializing TUF client")
local, err := tuf.FileLocalStore(args.String["--tuf-db"])
if err != nil {
log.Error("error creating local TUF client", "err", err)
return err
}
remote, err := tuf.HTTPRemoteStore(args.String["--repository"], tufHTTPOpts("updater"))
if err != nil {
log.Error("error creating remote TUF client", "err", err)
return err
}
client := tuf.NewClient(local, remote)
log.Info("updating TUF data")
if _, err := client.Update(); err != nil && !tuf.IsLatestSnapshot(err) {
log.Error("error updating TUF client", "err", err)
return err
}
// read the TUF db so we can pass it to hosts
log.Info("reading TUF database")
tufDB, err := ioutil.ReadFile(args.String["--tuf-db"])
if err != nil {
log.Error("error reading the TUF database", "err", err)
return err
}
log.Info("getting host list")
clusterClient := cluster.NewClient()
hosts, err := clusterClient.Hosts()
if err != nil {
log.Error("error getting host list", "err", err)
return err
}
if len(hosts) == 0 {
return errors.New("no hosts found")
}
log.Info("pulling images on all hosts")
images := make(map[string]string)
var imageMtx sync.Mutex
hostErrs := make(chan error)
for _, h := range hosts {
go func(host *cluster.Host) {
log := log.New("host", host.ID())
log.Info("connecting to host")
log.Info("pulling images")
ch := make(chan *layer.PullInfo)
stream, err := host.PullImages(
args.String["--repository"],
args.String["--driver"],
args.String["--root"],
bytes.NewReader(tufDB),
ch,
)
if err != nil {
log.Error("error pulling images", "err", err)
hostErrs <- err
return
}
defer stream.Close()
for info := range ch {
if info.Type == layer.TypeLayer {
continue
}
log.Info("pulled image", "name", info.Repo)
imageURI := fmt.Sprintf("%s?name=%s&id=%s", args.String["--repository"], info.Repo, info.ID)
imageMtx.Lock()
images[info.Repo] = imageURI
imageMtx.Unlock()
}
hostErrs <- stream.Err()
}(h)
}
var hostErr error
for _, h := range hosts {
if err := <-hostErrs; err != nil {
log.Error("error pulling images", "host", h.ID(), "err", err)
hostErr = err
continue
}
log.Info("images pulled successfully", "host", h.ID())
}
if hostErr != nil {
return hostErr
}
updaterImage, ok := images["flynn/updater"]
if !ok {
e := "missing flynn/updater image"
log.Error(e)
return errors.New(e)
}
imageJSON, err := json.Marshal(images)
//.........这里部分代码省略.........
开发者ID:technosophos,项目名称:flynn,代码行数:101,代码来源:update.go
示例18: Start
func (c *Cmd) Start() error {
if c.started {
return errors.New("exec: already started")
}
c.started = true
if c.cluster == nil {
var err error
c.cluster, err = cluster.NewClient()
if err != nil {
return err
}
c.closeCluster = true
}
hosts, err := c.cluster.ListHosts()
if err != nil {
return err
}
if c.HostID == "" {
// TODO: check if this is actually random
for c.HostID = range hosts {
break
}
}
if c.JobID == "" {
c.JobID = cluster.RandomJobID("")
}
job := &host.Job{
ID: c.JobID,
Artifact: c.Artifact,
Config: host.ContainerConfig{
Entrypoint: c.Entrypoint,
Cmd: c.Cmd,
TTY: c.TTY,
Env: c.Env,
Stdin: c.Stdin != nil || c.stdinPipe != nil,
},
Metadata: c.Meta,
}
c.host, err = c.cluster.DialHost(c.HostID)
if err != nil {
return err
}
if c.Stdout != nil || c.Stderr != nil || c.Stdin != nil || c.stdinPipe != nil {
req := &host.AttachReq{
JobID: job.ID,
Height: c.TermHeight,
Width: c.TermWidth,
Flags: host.AttachFlagStream,
}
if c.Stdout != nil {
req.Flags |= host.AttachFlagStdout
}
if c.Stderr != nil {
req.Flags |= host.AttachFlagStderr
}
if job.Config.Stdin {
req.Flags |= host.AttachFlagStdin
}
c.attachClient, err = c.host.Attach(req, true)
if err != nil {
c.close()
return err
}
}
if c.stdinPipe != nil {
c.stdinPipe.set(writeCloseCloser{c.attachClient})
} else if c.Stdin != nil {
go func() {
io.Copy(c.attachClient, c.Stdin)
c.attachClient.CloseWrite()
}()
}
go func() {
c.exitStatus, c.streamErr = c.attachClient.Receive(c.Stdout, c.Stderr)
close(c.done)
}()
_, err = c.cluster.AddJobs(&host.AddJobsReq{HostJobs: map[string][]*host.Job{c.HostID: {job}}})
return err
}
开发者ID:johan--,项目名称:flynn,代码行数:85,代码来源:exec.go
示例19: Start
func (c *Cmd) Start() error {
if c.started {
return errors.New("exec: already started")
}
c.done = make(chan struct{})
c.started = true
if c.host == nil && c.cluster == nil {
var err error
c.cluster = cluster.NewClient()
if err != nil {
return err
}
c.closeCluster = true
}
if c.HostID == "" {
hosts, err := c.cluster.Hosts()
if err != nil {
return err
}
if len(hosts) == 0 {
return errors.New("exec: no hosts found")
}
host := schedutil.PickHost(hosts)
c.HostID = host.ID()
c.host = host
}
// Use the pre-defined host.Job configuration if provided;
// otherwise generate one from the fields on exec.Cmd that mirror stdlib's os.exec.
if c.Job == nil {
c.Job = &host.Job{
ImageArtifact: &c.ImageArtifact,
Config: host.ContainerConfig{
Args: c.Args,
TTY: c.TTY,
Env: c.Env,
Stdin: c.Stdin != nil || c.stdinPipe != nil,
},
Metadata: c.Meta,
}
// if attaching to stdout / stderr, avoid round tripping the
// streams via on-disk log files.
if c.Stdout != nil || c.Stderr != nil {
c.Job.Config.DisableLog = true
}
} else {
c.Job.ImageArtifact = &c.ImageArtifact
}
if c.Job.ID == "" {
c.Job.ID = cluster.GenerateJobID(c.HostID, "")
}
if c.host == nil {
var err error
c.host, err = c.cluster.Host(c.HostID)
if err != nil {
return err
}
}
if c.Stdout != nil || c.Stderr != nil || c.Stdin != nil || c.stdinPipe != nil {
req := &host.AttachReq{
JobID: c.Job.ID,
Height: c.TermHeight,
Width: c.TermWidth,
Flags: host.AttachFlagStream,
}
if c.Stdout != nil {
req.Flags |= host.AttachFlagStdout
}
if c.Stderr != nil {
req.Flags |= host.AttachFlagStderr
}
if c.Job.Config.Stdin {
req.Flags |= host.AttachFlagStdin
}
var err error
c.attachClient, err = c.host.Attach(req, true)
if err != nil {
c.close()
return err
}
}
if c.stdinPipe != nil {
c.stdinPipe.set(writeCloseCloser{c.attachClient})
} else if c.Stdin != nil {
go func() {
io.Copy(c.attachClient, c.Stdin)
c.attachClient.CloseWrite()
}()
}
if c.attachClient == nil {
c.eventChan = make(chan *host.Event)
var err error
c.eventStream, err = c.host.StreamEvents(c.Job.ID, c.eventChan)
if err != nil {
return err
//.........这里部分代码省略.........
开发者ID:ably-forks,项目名称:flynn,代码行数:101,代码来源:exec.go
示例20: Perform
func (d *DeployJob) Perform() error {
log := d.logger.New("fn", "Perform", "deployment_id", d.ID, "app_id", d.AppID)
log.Info("validating deployment strategy")
var deployFunc func() error
switch d.Strategy {
case "one-by-one":
deployFunc = d.deployOneByOne
case "all-at-once":
deployFunc = d.deployAllAtOnce
case "sirenia":
deployFunc = d.deploySirenia
case "discoverd-meta":
deployFunc = d.deployDiscoverdMeta
default:
err := UnknownStrategyError{d.Strategy}
log.Error("error validating deployment strategy", "err", err)
return err
}
log.Info("determining cluster size")
hosts, err := cluster.NewClient().Hosts()
if err != nil {
log.Error("error listing cluster hosts", "err", err)
return err
}
d.hostCount = len(hosts)
log.Info("determining current release state")
oldRelease, err := d.client.GetRelease(d.OldReleaseID)
if err != nil {
log.Error("error getting new release", "release_id", d.NewReleaseID, "err", err)
return err
}
d.oldRelease = oldRelease
log.Info("determining release services and deployment state")
release, err := d.client.GetRelease(d.NewReleaseID)
if err != nil {
log.Error("error getting new release", "release_id", d.NewReleaseID, "err", err)
return err
}
d.newRelease = release
for typ, proc := range release.Processes {
if proc.Omni {
d.omni[typ] = struct{}{}
}
if proc.Service == "" {
log.Info(fmt.Sprintf("using job events for %s process type, no service defined", typ))
d.useJobEvents[typ] = struct{}{}
continue
}
d.serviceNames[typ] = proc.Service
log.Info(fmt.Sprintf("using service discovery for %s process type", typ), "service", proc.Service)
events := make(chan *discoverd.Event)
stream, err := discoverd.NewService(proc.Service).Watch(events)
if err != nil {
log.Error("error creating service discovery watcher", "service", proc.Service, "err", err)
return err
}
defer stream.Close()
outer:
for {
select {
case <-d.stop:
return worker.ErrStopped
case event, ok := <-events:
if !ok {
log.Error("error creating service discovery watcher, channel closed", "service", proc.Service)
return fmt.Errorf("deployer: could not create watcher for service: %s", proc.Service)
}
switch event.Kind {
case discoverd.EventKindCurrent:
break outer
case discoverd.EventKindServiceMeta:
d.serviceMeta = event.ServiceMeta
case discoverd.EventKindUp:
releaseID, ok := event.Instance.Meta["FLYNN_RELEASE_ID"]
if !ok {
continue
}
switch releaseID {
case d.OldReleaseID:
d.oldReleaseState[typ]++
case d.NewReleaseID:
d.newReleaseState[typ]++
}
}
case <-time.After(5 * time.Second):
log.Error("error creating service discovery watcher, timeout reached", "service", proc.Service)
return fmt.Errorf("deployer: could not create watcher for service: %s", proc.Service)
}
}
go func() {
for {
event, ok := <-events
if !ok {
//.........这里部分代码省略.........
开发者ID:yanghongkjxy,项目名称:flynn,代码行数:101,代码来源:job.go
注:本文中的github.com/flynn/flynn/pkg/cluster.NewClient函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论