本文整理匯總了Golang中github.com/flynn/flynn/controller/utils.JobConfig函數的典型用法代碼示例。如果您正苦於以下問題:Golang JobConfig函數的具體用法?Golang JobConfig怎麽用?Golang JobConfig使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了JobConfig函數的9個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: jobConfig
func (f *Formation) jobConfig(name string, hostID string) *host.Job {
return utils.JobConfig(&ct.ExpandedFormation{
App: &ct.App{ID: f.AppID, Name: f.AppName},
Release: f.Release,
Artifact: f.Artifact,
}, name, hostID)
}
示例2: jobConfig
func (f *Formation) jobConfig(name string) (*host.Job, error) {
return utils.JobConfig(&ct.ExpandedFormation{
App: &ct.App{ID: f.AppID},
Release: f.Release,
Artifact: f.Artifact,
}, name)
}
示例3: StartScheduler
func (f *ClusterFixer) StartScheduler(client *controller.Client, cf *ct.Formation) error {
if _, err := discoverd.NewService("controller-scheduler").Leader(); err != nil && !discoverd.IsNotFound(err) {
return fmt.Errorf("error getting scheduler leader: %s", err)
} else if err == nil {
f.l.Info("scheduler looks up, moving on")
return nil
}
f.l.Info("scheduler is not up, attempting to fix")
// start scheduler
ef, err := utils.ExpandFormation(client, cf)
if err != nil {
return err
}
schedulerJob := utils.JobConfig(ef, "scheduler", f.hosts[0].ID(), "")
if err := f.hosts[0].AddJob(schedulerJob); err != nil {
return fmt.Errorf("error starting scheduler job on %s: %s", f.hosts[0].ID(), err)
}
f.l.Info("started scheduler job")
return nil
}
示例4: Run
func (a *RunAppAction) Run(s *State) error {
if a.AppStep != "" {
data, err := getAppStep(s, a.AppStep)
if err != nil {
return err
}
a.App = data.App
procs := a.Processes
a.ExpandedFormation = data.ExpandedFormation
a.Processes = procs
}
as := &RunAppState{
ExpandedFormation: a.ExpandedFormation,
Resources: make([]*resource.Resource, 0, len(a.Resources)),
Providers: make([]*ct.Provider, 0, len(a.Resources)),
}
s.StepData[a.ID] = as
if a.App == nil {
a.App = &ct.App{}
}
if a.App.ID == "" {
a.App.ID = random.UUID()
}
if a.Artifact == nil {
return errors.New("bootstrap: artifact must be set")
}
if a.Artifact.ID == "" {
a.Artifact.ID = random.UUID()
}
if a.Release == nil {
return errors.New("bootstrap: release must be set")
}
if a.Release.ID == "" {
a.Release.ID = random.UUID()
}
a.Release.ArtifactID = a.Artifact.ID
if a.Release.Env == nil {
a.Release.Env = make(map[string]string)
}
interpolateRelease(s, a.Release)
for _, p := range a.Resources {
server, err := resource.NewServer(p.URL)
if err != nil {
return err
}
res, err := server.Provision(nil)
server.Close()
if err != nil {
return err
}
as.Providers = append(as.Providers, p)
as.Resources = append(as.Resources, res)
for k, v := range res.Env {
a.Release.Env[k] = v
}
}
cc, err := s.ClusterClient()
if err != nil {
return err
}
hosts, err := cc.ListHosts()
if err != nil {
return err
}
hostIDs := make([]string, 0, len(hosts))
for id := range hosts {
hostIDs = append(hostIDs, id)
}
for typ, count := range a.Processes {
for i := 0; i < count; i++ {
job, err := startJob(s, hostIDs[i%len(hosts)], utils.JobConfig(a.ExpandedFormation, typ))
if err != nil {
return err
}
as.Jobs = append(as.Jobs, *job)
}
}
return nil
}
示例5: Run
func (a *RunAppAction) Run(s *State) error {
if a.AppStep != "" {
data, err := getAppStep(s, a.AppStep)
if err != nil {
return err
}
a.App = data.App
procs := a.Processes
a.ExpandedFormation = data.ExpandedFormation
a.Processes = procs
}
as := &RunAppState{
ExpandedFormation: a.ExpandedFormation,
Resources: make([]*resource.Resource, 0, len(a.Resources)),
Providers: make([]*ct.Provider, 0, len(a.Resources)),
}
s.StepData[a.ID] = as
if a.App == nil {
a.App = &ct.App{}
}
if a.App.ID == "" {
a.App.ID = random.UUID()
}
if a.ImageArtifact == nil {
return errors.New("bootstrap: artifact must be set")
}
if a.ImageArtifact.ID == "" {
a.ImageArtifact.ID = random.UUID()
}
if a.Release == nil {
return errors.New("bootstrap: release must be set")
}
if a.Release.ID == "" {
a.Release.ID = random.UUID()
}
a.Release.ArtifactIDs = []string{a.ImageArtifact.ID}
if a.Release.Env == nil {
a.Release.Env = make(map[string]string)
}
interpolateRelease(s, a.Release)
for _, p := range a.Resources {
u, err := url.Parse(p.URL)
if err != nil {
return err
}
lookupDiscoverdURLHost(s, u, time.Second)
res, err := resource.Provision(u.String(), nil)
if err != nil {
return err
}
as.Providers = append(as.Providers, p)
as.Resources = append(as.Resources, res)
for k, v := range res.Env {
a.Release.Env[k] = v
}
}
for typ, count := range a.Processes {
if s.Singleton && count > 1 {
a.Processes[typ] = 1
count = 1
}
hosts := s.ShuffledHosts()
if a.ExpandedFormation.Release.Processes[typ].Omni {
count = len(hosts)
}
for i := 0; i < count; i++ {
host := hosts[i%len(hosts)]
config := utils.JobConfig(a.ExpandedFormation, typ, host.ID(), "")
hostresource.SetDefaults(&config.Resources)
if a.ExpandedFormation.Release.Processes[typ].Data {
if err := utils.ProvisionVolume(host, config); err != nil {
return err
}
}
if err := startJob(s, host, config); err != nil {
return err
}
}
}
return nil
}
示例6: Run
func (a *RunAppAction) Run(s *State) error {
if a.AppStep != "" {
data, err := getAppStep(s, a.AppStep)
if err != nil {
return err
}
a.App = data.App
procs := a.Processes
a.ExpandedFormation = data.ExpandedFormation
a.Processes = procs
}
as := &RunAppState{
ExpandedFormation: a.ExpandedFormation,
Resources: make([]*resource.Resource, 0, len(a.Resources)),
Providers: make([]*ct.Provider, 0, len(a.Resources)),
}
s.StepData[a.ID] = as
if a.App == nil {
a.App = &ct.App{}
}
if a.App.ID == "" {
a.App.ID = random.UUID()
}
if a.Artifact == nil {
return errors.New("bootstrap: artifact must be set")
}
if a.Artifact.ID == "" {
a.Artifact.ID = random.UUID()
}
if a.Release == nil {
return errors.New("bootstrap: release must be set")
}
if a.Release.ID == "" {
a.Release.ID = random.UUID()
}
a.Release.ArtifactID = a.Artifact.ID
if a.Release.Env == nil {
a.Release.Env = make(map[string]string)
}
interpolateRelease(s, a.Release)
for _, p := range a.Resources {
u, err := url.Parse(p.URL)
if err != nil {
return err
}
lookupDiscoverdURLHost(u, time.Second)
res, err := resource.Provision(u.String(), nil)
if err != nil {
return err
}
as.Providers = append(as.Providers, p)
as.Resources = append(as.Resources, res)
for k, v := range res.Env {
a.Release.Env[k] = v
}
}
cc, err := s.ClusterClient()
if err != nil {
return err
}
for typ, count := range a.Processes {
if s.Singleton && count > 1 {
a.Processes[typ] = 1
count = 1
}
hosts, err := cc.ListHosts()
if err != nil {
return err
}
sort.Sort(schedutil.HostSlice(hosts))
for i := 0; i < count; i++ {
hostID := hosts[i%len(hosts)].ID
config := utils.JobConfig(a.ExpandedFormation, typ, hostID)
if a.ExpandedFormation.Release.Processes[typ].Data {
if err := utils.ProvisionVolume(cc, hostID, config); err != nil {
return err
}
}
job, err := startJob(s, hostID, config)
if err != nil {
return err
}
as.Jobs = append(as.Jobs, *job)
}
}
return nil
}
示例7: jobConfig
func jobConfig(job *Job, hostID string) *host.Job {
return utils.JobConfig(job.Formation.ExpandedFormation, job.Type, hostID, job.ID)
}
示例8: fixController
func (f *clusterFixer) fixController(instances []*discoverd.Instance, startScheduler bool) error {
f.l.Info("found controller instance, checking critical formations")
inst := instances[0]
client, err := controller.NewClient("http://"+inst.Addr, inst.Meta["AUTH_KEY"])
if err != nil {
return fmt.Errorf("unexpected error creating controller client: %s", err)
}
// check that formations for critical components are expected
apps := []string{"controller", "router", "discoverd", "flannel", "postgres"}
changes := make(map[string]*ct.Formation, len(apps))
var controllerFormation *ct.Formation
for _, app := range apps {
release, err := client.GetAppRelease(app)
if err != nil {
return fmt.Errorf("error getting %s release: %s", app, err)
}
formation, err := client.GetFormation(app, release.ID)
if err != nil {
// TODO: handle ErrNotFound
return fmt.Errorf("error getting %s formation: %s", app, err)
}
if app == "controller" {
controllerFormation = formation
}
for typ := range release.Processes {
var want int
if app == "postgres" && typ == "postgres" && len(f.hosts) > 1 && formation.Processes[typ] < 3 {
want = 3
} else if formation.Processes[typ] < 1 {
want = 1
}
if want > 0 {
f.l.Info("found broken formation", "app", app, "process", typ)
if _, ok := changes[app]; !ok {
if formation.Processes == nil {
formation.Processes = make(map[string]int)
}
changes[app] = formation
}
changes[app].Processes[typ] = want
}
}
}
for app, formation := range changes {
f.l.Info("fixing broken formation", "app", app)
if err := client.PutFormation(formation); err != nil {
return fmt.Errorf("error putting %s formation: %s", app, err)
}
}
if startScheduler {
if _, err := discoverd.NewService("controller-scheduler").Leader(); err != nil && !discoverd.IsNotFound(err) {
return fmt.Errorf("error getting scheduler leader: %s", err)
} else if err == nil {
f.l.Info("scheduler looks up, moving on")
return nil
}
f.l.Info("scheduler is not up, attempting to fix")
// start scheduler
ef, err := utils.ExpandFormation(client, controllerFormation)
if err != nil {
return err
}
schedulerJob := utils.JobConfig(ef, "scheduler", f.hosts[0].ID())
if err := f.hosts[0].AddJob(schedulerJob); err != nil {
return fmt.Errorf("error starting scheduler job on %s: %s", f.hosts[0].ID(), err)
}
f.l.Info("started scheduler job")
}
return nil
}
示例9: jobConfig
func jobConfig(req *JobRequest, hostID string) *host.Job {
return utils.JobConfig(req.Job.Formation.ExpandedFormation, req.Type, hostID)
}