// addDockerNetworkArgs adds docker network arguments for the given task. func (e *dockerEngine) addDockerNetworkArgs(c *cmdline.Cmdline, env map[string]string, t *jobs.Task) error { switch t.Network { case "", jobs.NetworkTypeDefault: return nil case jobs.NetworkTypeHost: c.Add(env, "--net=host") return nil case jobs.NetworkTypeWeave: if !t.Type.IsProxy() { c.Add(env, fmt.Sprintf("--hostname=%s", t.WeaveDomainName())) } else { c.Add(env, fmt.Sprintf("--hostname=%s", t.PrivateDomainName())) } return nil default: return maskAny(fmt.Errorf("Unknown network type '%s", t.Network)) } }
// addFrontEndRegistration adds registration code for frontends to the given units func addFrontEndRegistration(t *jobs.Task, main *sdunits.Unit, ctx generatorContext) error { if len(t.PublicFrontEnds) == 0 && len(t.PrivateFrontEnds) == 0 { return nil } serviceName := t.ServiceName() targetServiceName := serviceName if t.Type == "proxy" { targetServiceName = t.Target.EtcdServiceName() } httpKey := fmt.Sprintf("/pulcy/frontend/%s-%d", serviceName, ctx.ScalingGroup) httpRecord := api.FrontendRecord{ Service: targetServiceName, HttpCheckPath: t.HttpCheckPath, HttpCheckMethod: t.HttpCheckMethod, Sticky: t.Sticky, Backup: t.Backup, Mode: "", // Defaults to http } tcpKey := fmt.Sprintf("/pulcy/frontend/%s-%d-tcp", serviceName, ctx.ScalingGroup) tcpRecord := api.FrontendRecord{ Service: targetServiceName, HttpCheckPath: t.HttpCheckPath, HttpCheckMethod: t.HttpCheckMethod, Sticky: t.Sticky, Backup: t.Backup, Mode: "tcp", } instanceHttpKey := fmt.Sprintf("/pulcy/frontend/%s-%d-inst", serviceName, ctx.ScalingGroup) instanceHttpRecord := api.FrontendRecord{ Service: fmt.Sprintf("%s-%d", targetServiceName, ctx.ScalingGroup), HttpCheckPath: t.HttpCheckPath, Sticky: t.Sticky, Backup: t.Backup, } instanceTcpKey := fmt.Sprintf("/pulcy/frontend/%s-%d-inst-tcp", serviceName, ctx.ScalingGroup) instanceTcpRecord := api.FrontendRecord{ Service: fmt.Sprintf("%s-%d", targetServiceName, ctx.ScalingGroup), HttpCheckPath: t.HttpCheckPath, Sticky: t.Sticky, Backup: t.Backup, Mode: "tcp", } var rwRules []api.RewriteRule if t.Type == "proxy" && t.Rewrite != nil { rwRules = append(rwRules, api.RewriteRule{ PathPrefix: t.Rewrite.PathPrefix, RemovePathPrefix: t.Rewrite.RemovePathPrefix, Domain: t.Rewrite.Domain, }) } for _, fr := range t.PublicFrontEnds { record := &httpRecord if fr.Mode == "tcp" { record = &tcpRecord } selRecord := api.FrontendSelectorRecord{ Weight: fr.Weight, Domain: fr.Domain, PathPrefix: fr.PathPrefix, SslCert: fr.SslCert, ServicePort: fr.Port, FrontendPort: fr.HostPort, RewriteRules: rwRules, } if err := addUsers(t, &selRecord, fr.Users); err != nil { return maskAny(err) } record.Selectors = append(record.Selectors, selRecord) } for _, fr := range t.PrivateFrontEnds { record := &httpRecord instanceRecord := &instanceHttpRecord if fr.Mode == "tcp" { record = &tcpRecord instanceRecord = &instanceTcpRecord } selRecord := api.FrontendSelectorRecord{ Domain: t.PrivateDomainName(), ServicePort: fr.Port, FrontendPort: fr.HostPort, Private: true, RewriteRules: rwRules, } if err := addUsers(t, &selRecord, fr.Users); err != nil { return maskAny(err) } record.Selectors = append(record.Selectors, selRecord) if fr.RegisterInstance { instanceSelRecord := selRecord instanceSelRecord.Domain = t.InstanceSpecificPrivateDomainName(ctx.ScalingGroup) instanceRecord.Selectors = append(instanceRecord.Selectors, instanceSelRecord) } } if len(instanceHttpRecord.Selectors) > 0 { if err := addFrontEndRegistrationRecord(t, main, instanceHttpKey, instanceHttpRecord, "FrontEndRegistration-i"); err != nil { return maskAny(err) } } if len(instanceTcpRecord.Selectors) > 0 { if err := addFrontEndRegistrationRecord(t, main, instanceTcpKey, instanceTcpRecord, "FrontEndRegistration-i-tcp"); err != nil { return maskAny(err) } } if len(httpRecord.Selectors) > 0 { if err := addFrontEndRegistrationRecord(t, main, httpKey, httpRecord, "FrontEndRegistration"); err != nil { return maskAny(err) } } if len(tcpRecord.Selectors) > 0 { if err := addFrontEndRegistrationRecord(t, main, tcpKey, tcpRecord, "FrontEndRegistration-tcp"); err != nil { return maskAny(err) } } return nil }