func (s *S) TestGetImageWebProcessName(c *check.C) { img1 := "tsuru/app-myapp:v1" customData1 := map[string]interface{}{ "processes": map[string]interface{}{ "web": "python myapp.py", "worker": "someworker", }, } err := image.SaveImageCustomData(img1, customData1) c.Assert(err, check.IsNil) img2 := "tsuru/app-myapp:v2" customData2 := map[string]interface{}{ "processes": map[string]interface{}{ "worker1": "python myapp.py", "worker2": "someworker", }, } err = image.SaveImageCustomData(img2, customData2) c.Assert(err, check.IsNil) img3 := "tsuru/app-myapp:v3" customData3 := map[string]interface{}{ "processes": map[string]interface{}{ "api": "python myapi.py", }, } err = image.SaveImageCustomData(img3, customData3) c.Assert(err, check.IsNil) img4 := "tsuru/app-myapp:v4" customData4 := map[string]interface{}{} err = image.SaveImageCustomData(img4, customData4) c.Assert(err, check.IsNil) web1, err := image.GetImageWebProcessName(img1) c.Check(err, check.IsNil) c.Check(web1, check.Equals, "web") web2, err := image.GetImageWebProcessName(img2) c.Check(err, check.IsNil) c.Check(web2, check.Equals, "web") web3, err := image.GetImageWebProcessName(img3) c.Check(err, check.IsNil) c.Check(web3, check.Equals, "api") web4, err := image.GetImageWebProcessName(img4) c.Check(err, check.IsNil) c.Check(web4, check.Equals, "") img5 := "tsuru/app-myapp:v5" web5, err := image.GetImageWebProcessName(img5) c.Check(err, check.IsNil) c.Check(web5, check.Equals, "") }
func (p *swarmProvisioner) RoutableAddresses(a provision.App) ([]url.URL, error) { client, err := chooseDBSwarmNode() if err != nil { return nil, err } imgID, err := image.AppCurrentImageName(a.GetName()) if err != nil { if err != image.ErrNoImagesAvailable { return nil, err } return nil, nil } webProcessName, err := image.GetImageWebProcessName(imgID) if err != nil { return nil, err } if webProcessName == "" { return nil, nil } srvName := serviceNameForApp(a, webProcessName) srv, err := client.InspectService(srvName) if err != nil { return nil, err } var pubPort uint32 if len(srv.Endpoint.Ports) > 0 { pubPort = srv.Endpoint.Ports[0].PublishedPort } if pubPort == 0 { return nil, nil } nodes, err := listValidNodes(client) if err != nil { return nil, err } for i := len(nodes) - 1; i >= 0; i-- { if nodes[i].Spec.Annotations.Labels[labelNodePoolName.String()] != a.GetPool() { nodes[i], nodes[len(nodes)-1] = nodes[len(nodes)-1], nodes[i] nodes = nodes[:len(nodes)-1] } } addrs := make([]url.URL, len(nodes)) for i, n := range nodes { addr := n.Spec.Labels[labelNodeDockerAddr.String()] host := tsuruNet.URLToHost(addr) addrs[i] = url.URL{ Scheme: "http", Host: fmt.Sprintf("%s:%d", host, pubPort), } } return addrs, nil }
func (p *dockerProvisioner) RoutableAddresses(app provision.App) ([]url.URL, error) { imageId, err := image.AppCurrentImageName(app.GetName()) if err != nil && err != image.ErrNoImagesAvailable { return nil, err } webProcessName, err := image.GetImageWebProcessName(imageId) if err != nil { return nil, err } containers, err := p.listContainersByApp(app.GetName()) if err != nil { return nil, err } addrs := make([]url.URL, 0, len(containers)) for _, container := range containers { if container.ProcessName == webProcessName && container.ValidAddr() { addrs = append(addrs, *container.Address()) } } return addrs, nil }
fmt.Fprintf(w, " ---> Destroyed unit %s [%s]\n", cont.ShortID(), cont.ProcessName) return nil }, nil, true) }, OnError: rollbackNotice, MinParams: 1, } var bindAndHealthcheck = action.Action{ Name: "bind-and-healthcheck", Forward: func(ctx action.FWContext) (action.Result, error) { args := ctx.Params[0].(changeUnitsPipelineArgs) if err := checkCanceled(args.event); err != nil { return nil, err } webProcessName, err := image.GetImageWebProcessName(args.imageId) if err != nil { log.Errorf("[WARNING] cannot get the name of the web process: %s", err) } newContainers := ctx.Previous.([]container.Container) writer := args.writer if writer == nil { writer = ioutil.Discard } doHealthcheck := true for _, c := range args.toRemove { if c.Status == provision.StatusError.String() || c.Status == provision.StatusStopped.String() { doHealthcheck = false break } }