本文整理汇总了Golang中github.com/tsuru/tsuru/app/image.AppCurrentImageName函数的典型用法代码示例。如果您正苦于以下问题:Golang AppCurrentImageName函数的具体用法?Golang AppCurrentImageName怎么用?Golang AppCurrentImageName使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了AppCurrentImageName函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: TestRebalanceContainersManyApps
func (s *S) TestRebalanceContainersManyApps(c *check.C) {
p, err := s.startMultipleServersCluster()
c.Assert(err, check.IsNil)
err = s.newFakeImage(p, "tsuru/app-myapp", nil)
c.Assert(err, check.IsNil)
err = s.newFakeImage(p, "tsuru/app-otherapp", nil)
c.Assert(err, check.IsNil)
appInstance := provisiontest.NewFakeApp("myapp", "python", 0)
defer p.Destroy(appInstance)
p.Provision(appInstance)
appInstance2 := provisiontest.NewFakeApp("otherapp", "python", 0)
defer p.Destroy(appInstance2)
p.Provision(appInstance2)
imageId, err := image.AppCurrentImageName(appInstance.GetName())
c.Assert(err, check.IsNil)
_, err = addContainersWithHost(&changeUnitsPipelineArgs{
toHost: "localhost",
toAdd: map[string]*containersToAdd{"web": {Quantity: 1}},
app: appInstance,
imageId: imageId,
provisioner: p,
})
c.Assert(err, check.IsNil)
imageId2, err := image.AppCurrentImageName(appInstance2.GetName())
c.Assert(err, check.IsNil)
_, err = addContainersWithHost(&changeUnitsPipelineArgs{
toHost: "localhost",
toAdd: map[string]*containersToAdd{"web": {Quantity: 1}},
app: appInstance2,
imageId: imageId2,
provisioner: p,
})
c.Assert(err, check.IsNil)
appStruct := &app.App{
Name: appInstance.GetName(),
Pool: "test-default",
}
err = s.storage.Apps().Insert(appStruct)
c.Assert(err, check.IsNil)
appStruct2 := &app.App{
Name: appInstance2.GetName(),
Pool: "test-default",
}
err = s.storage.Apps().Insert(appStruct2)
c.Assert(err, check.IsNil)
buf := safe.NewBuffer(nil)
c1, err := p.listContainersByHost("localhost")
c.Assert(err, check.IsNil)
c.Assert(c1, check.HasLen, 2)
err = p.rebalanceContainers(buf, false)
c.Assert(err, check.IsNil)
c1, err = p.listContainersByHost("localhost")
c.Assert(err, check.IsNil)
c.Assert(c1, check.HasLen, 1)
c2, err := p.listContainersByHost("127.0.0.1")
c.Assert(err, check.IsNil)
c.Assert(c2, check.HasLen, 1)
}
示例2: TestAppCurrentImageName
func (s *S) TestAppCurrentImageName(c *check.C) {
err := image.AppendAppImageName("myapp", "tsuru/app-myapp:v1")
c.Assert(err, check.IsNil)
img1, err := image.AppCurrentImageName("myapp")
c.Assert(err, check.IsNil)
c.Assert(img1, check.Equals, "tsuru/app-myapp:v1")
err = image.AppendAppImageName("myapp", "tsuru/app-myapp:v2")
c.Assert(err, check.IsNil)
img2, err := image.AppCurrentImageName("myapp")
c.Assert(err, check.IsNil)
c.Assert(img2, check.Equals, "tsuru/app-myapp:v2")
}
示例3: TestMoveContainerErrorStarted
func (s *S) TestMoveContainerErrorStarted(c *check.C) {
p, err := s.startMultipleServersCluster()
c.Assert(err, check.IsNil)
err = s.newFakeImage(p, "tsuru/app-myapp", nil)
c.Assert(err, check.IsNil)
appInstance := provisiontest.NewFakeApp("myapp", "python", 0)
p.Provision(appInstance)
imageId, err := image.AppCurrentImageName(appInstance.GetName())
c.Assert(err, check.IsNil)
addedConts, err := addContainersWithHost(&changeUnitsPipelineArgs{
toHost: "localhost",
toAdd: map[string]*containersToAdd{"web": {Quantity: 2}},
app: appInstance,
imageId: imageId,
provisioner: p,
})
c.Assert(err, check.IsNil)
err = addedConts[0].SetStatus(p, provision.StatusError, true)
c.Assert(err, check.IsNil)
appStruct := &app.App{
Name: appInstance.GetName(),
}
err = s.storage.Apps().Insert(appStruct)
c.Assert(err, check.IsNil)
buf := safe.NewBuffer(nil)
_, err = p.moveContainer(addedConts[0].ID[:6], "127.0.0.1", buf)
c.Assert(err, check.IsNil)
containers, err := p.listContainersByHost("localhost")
c.Assert(err, check.IsNil)
c.Assert(containers, check.HasLen, 1)
containers, err = p.listContainersByHost("127.0.0.1")
c.Assert(err, check.IsNil)
c.Assert(containers, check.HasLen, 1)
c.Assert(containers[0].Status, check.Equals, provision.StatusStarting.String())
}
示例4: ExecuteCommandIsolated
func (p *dockerProvisioner) ExecuteCommandIsolated(stdout, stderr io.Writer, app provision.App, cmd string, args ...string) error {
imageID, err := image.AppCurrentImageName(app.GetName())
if err != nil {
return err
}
return p.runCommandInContainer(imageID, cmd, app, stdout, stderr)
}
示例5: TestRebalanceContainersByHost
func (s *S) TestRebalanceContainersByHost(c *check.C) {
otherServer, err := dtesting.NewServer("localhost:0", nil, nil)
c.Assert(err, check.IsNil)
defer otherServer.Stop()
otherUrl := strings.Replace(otherServer.URL(), "127.0.0.1", "localhost", 1)
p := &dockerProvisioner{}
err = p.Initialize()
c.Assert(err, check.IsNil)
p.storage = &cluster.MapStorage{}
p.scheduler = &segregatedScheduler{provisioner: p}
p.cluster, err = cluster.New(p.scheduler, p.storage,
cluster.Node{Address: s.server.URL(), Metadata: map[string]string{"pool": "pool1"}},
cluster.Node{Address: otherUrl, Metadata: map[string]string{"pool": "pool1"}},
)
c.Assert(err, check.IsNil)
opts := provision.AddPoolOptions{Name: "pool1"}
err = provision.AddPool(opts)
c.Assert(err, check.IsNil)
err = provision.AddTeamsToPool("pool1", []string{"team1"})
c.Assert(err, check.IsNil)
err = s.newFakeImage(p, "tsuru/app-myapp", nil)
c.Assert(err, check.IsNil)
appInstance := provisiontest.NewFakeApp("myapp", "python", 0)
defer p.Destroy(appInstance)
p.Provision(appInstance)
imageId, err := image.AppCurrentImageName(appInstance.GetName())
c.Assert(err, check.IsNil)
_, err = addContainersWithHost(&changeUnitsPipelineArgs{
toHost: "localhost",
toAdd: map[string]*containersToAdd{"web": {Quantity: 5}},
app: appInstance,
imageId: imageId,
provisioner: p,
})
c.Assert(err, check.IsNil)
appStruct := &app.App{
Name: appInstance.GetName(),
TeamOwner: "team1",
Pool: "pool1",
}
err = s.storage.Apps().Insert(appStruct)
c.Assert(err, check.IsNil)
c1, err := p.listContainersByHost("localhost")
c.Assert(err, check.IsNil)
c.Assert(c1, check.HasLen, 5)
c2, err := p.listContainersByHost("127.0.0.1")
c.Assert(err, check.IsNil)
c.Assert(c2, check.HasLen, 0)
err = p.Cluster().Unregister(otherUrl)
c.Assert(err, check.IsNil)
buf := safe.NewBuffer(nil)
err = p.rebalanceContainersByHost(net.URLToHost(otherUrl), buf)
c.Assert(err, check.IsNil)
c.Assert(p.scheduler.ignoredContainers, check.IsNil)
c2, err = p.listContainersByHost("127.0.0.1")
c.Assert(err, check.IsNil)
c.Assert(c2, check.HasLen, 5)
}
示例6: TestRebalanceContainersDryBodyHandler
func (s *S) TestRebalanceContainersDryBodyHandler(c *check.C) {
p, err := s.startMultipleServersCluster()
c.Assert(err, check.IsNil)
mainDockerProvisioner = p
err = s.newFakeImage(p, "tsuru/app-myapp", nil)
c.Assert(err, check.IsNil)
appInstance := provisiontest.NewFakeApp("myapp", "python", 0)
defer p.Destroy(appInstance)
p.Provision(appInstance)
coll := p.Collection()
defer coll.Close()
coll.Insert(container.Container{ID: "container-id", AppName: appInstance.GetName(), Version: "container-version", Image: "tsuru/python", ProcessName: "web"})
defer coll.RemoveAll(bson.M{"appname": appInstance.GetName()})
imageId, err := image.AppCurrentImageName(appInstance.GetName())
c.Assert(err, check.IsNil)
units, err := addContainersWithHost(&changeUnitsPipelineArgs{
toHost: "localhost",
toAdd: map[string]*containersToAdd{"web": {Quantity: 5}},
app: appInstance,
imageId: imageId,
provisioner: p,
})
c.Assert(err, check.IsNil)
appStruct := &app.App{
Name: appInstance.GetName(),
Platform: appInstance.GetPlatform(),
Pool: "test-default",
}
err = s.storage.Apps().Insert(appStruct)
c.Assert(err, check.IsNil)
err = s.storage.Apps().Update(
bson.M{"name": appStruct.Name},
bson.M{"$set": bson.M{"units": units}},
)
c.Assert(err, check.IsNil)
recorder := httptest.NewRecorder()
opts := rebalanceOptions{Dry: true}
v, err := form.EncodeToValues(&opts)
c.Assert(err, check.IsNil)
b := strings.NewReader(v.Encode())
request, err := http.NewRequest("POST", "/docker/containers/rebalance", b)
c.Assert(err, check.IsNil)
request.Header.Set("Authorization", "bearer "+s.token.GetValue())
request.Header.Set("Content-Type", "application/x-www-form-urlencoded")
server := api.RunServer(true)
server.ServeHTTP(recorder, request)
c.Assert(recorder.Code, check.Equals, http.StatusOK)
body, err := ioutil.ReadAll(recorder.Body)
c.Assert(err, check.IsNil)
validJson := fmt.Sprintf("[%s]", strings.Replace(strings.Trim(string(body), "\n "), "\n", ",", -1))
var result []tsuruIo.SimpleJsonMessage
err = json.Unmarshal([]byte(validJson), &result)
c.Assert(err, check.IsNil)
c.Assert(result, check.HasLen, 8)
c.Assert(result[0].Message, check.Equals, "Rebalancing 6 units...\n")
c.Assert(result[1].Message, check.Matches, "(?s)Would move unit .*")
c.Assert(result[7].Message, check.Equals, "Containers successfully rebalanced!\n")
}
示例7: TestMoveContainer
func (s *S) TestMoveContainer(c *check.C) {
p, err := s.startMultipleServersCluster()
c.Assert(err, check.IsNil)
err = s.newFakeImage(p, "tsuru/app-myapp", nil)
c.Assert(err, check.IsNil)
appInstance := provisiontest.NewFakeApp("myapp", "python", 0)
defer p.Destroy(appInstance)
p.Provision(appInstance)
coll := p.Collection()
defer coll.Close()
coll.Insert(container.Container{
ID: "container-id",
AppName: appInstance.GetName(),
Version: "container-version",
Image: "tsuru/python",
})
defer coll.RemoveAll(bson.M{"appname": appInstance.GetName()})
imageId, err := image.AppCurrentImageName(appInstance.GetName())
c.Assert(err, check.IsNil)
addedConts, err := addContainersWithHost(&changeUnitsPipelineArgs{
toHost: "localhost",
toAdd: map[string]*containersToAdd{"web": {Quantity: 2}},
app: appInstance,
imageId: imageId,
provisioner: p,
})
c.Assert(err, check.IsNil)
appStruct := &app.App{
Name: appInstance.GetName(),
}
err = s.storage.Apps().Insert(appStruct)
c.Assert(err, check.IsNil)
buf := safe.NewBuffer(nil)
var serviceBodies []string
var serviceMethods []string
rollback := s.addServiceInstance(c, appInstance.GetName(), []string{addedConts[0].ID}, func(w http.ResponseWriter, r *http.Request) {
data, _ := ioutil.ReadAll(r.Body)
serviceBodies = append(serviceBodies, string(data))
serviceMethods = append(serviceMethods, r.Method)
w.WriteHeader(http.StatusOK)
})
defer rollback()
_, err = p.moveContainer(addedConts[0].ID[:6], "127.0.0.1", buf)
c.Assert(err, check.IsNil)
containers, err := p.listContainersByHost("localhost")
c.Assert(err, check.IsNil)
c.Assert(containers, check.HasLen, 1)
containers, err = p.listContainersByHost("127.0.0.1")
c.Assert(err, check.IsNil)
c.Assert(containers, check.HasLen, 1)
c.Assert(serviceBodies, check.HasLen, 2)
c.Assert(serviceMethods, check.HasLen, 2)
c.Assert(serviceMethods[0], check.Equals, "POST")
c.Assert(serviceBodies[0], check.Matches, ".*unit-host=127.0.0.1")
c.Assert(serviceMethods[1], check.Equals, "DELETE")
c.Assert(serviceBodies[1], check.Matches, ".*unit-host=localhost")
}
示例8: TestRebalanceContainersDry
func (s *S) TestRebalanceContainersDry(c *check.C) {
p, err := s.startMultipleServersCluster()
c.Assert(err, check.IsNil)
err = s.newFakeImage(p, "tsuru/app-myapp", nil)
c.Assert(err, check.IsNil)
appInstance := provisiontest.NewFakeApp("myapp", "python", 0)
defer p.Destroy(appInstance)
p.Provision(appInstance)
imageId, err := image.AppCurrentImageName(appInstance.GetName())
c.Assert(err, check.IsNil)
args := changeUnitsPipelineArgs{
app: appInstance,
toAdd: map[string]*containersToAdd{"web": {Quantity: 5}},
imageId: imageId,
provisioner: p,
toHost: "localhost",
}
pipeline := action.NewPipeline(
&provisionAddUnitsToHost,
&bindAndHealthcheck,
&addNewRoutes,
&setRouterHealthcheck,
&updateAppImage,
)
err = pipeline.Execute(args)
c.Assert(err, check.IsNil)
appStruct := &app.App{
Name: appInstance.GetName(),
Pool: "test-default",
}
err = s.storage.Apps().Insert(appStruct)
c.Assert(err, check.IsNil)
router, err := getRouterForApp(appInstance)
c.Assert(err, check.IsNil)
beforeRoutes, err := router.Routes(appStruct.Name)
c.Assert(err, check.IsNil)
c.Assert(beforeRoutes, check.HasLen, 5)
var serviceCalled bool
rollback := s.addServiceInstance(c, appInstance.GetName(), nil, func(w http.ResponseWriter, r *http.Request) {
serviceCalled = true
w.WriteHeader(http.StatusOK)
})
defer rollback()
buf := safe.NewBuffer(nil)
err = p.rebalanceContainers(buf, true)
c.Assert(err, check.IsNil)
c1, err := p.listContainersByHost("localhost")
c.Assert(err, check.IsNil)
c2, err := p.listContainersByHost("127.0.0.1")
c.Assert(err, check.IsNil)
c.Assert(c1, check.HasLen, 5)
c.Assert(c2, check.HasLen, 0)
routes, err := router.Routes(appStruct.Name)
c.Assert(err, check.IsNil)
c.Assert(routes, check.DeepEquals, beforeRoutes)
c.Assert(serviceCalled, check.Equals, false)
}
示例9: TestMoveContainers
func (s *S) TestMoveContainers(c *check.C) {
p, err := s.startMultipleServersCluster()
c.Assert(err, check.IsNil)
err = s.newFakeImage(p, "tsuru/app-myapp", nil)
c.Assert(err, check.IsNil)
appInstance := provisiontest.NewFakeApp("myapp", "python", 0)
defer p.Destroy(appInstance)
p.Provision(appInstance)
coll := p.Collection()
defer coll.Close()
coll.Insert(container.Container{
ID: "container-id",
AppName: appInstance.GetName(),
Version: "container-version",
Image: "tsuru/python",
})
defer coll.RemoveAll(bson.M{"appname": appInstance.GetName()})
imageId, err := image.AppCurrentImageName(appInstance.GetName())
c.Assert(err, check.IsNil)
_, err = addContainersWithHost(&changeUnitsPipelineArgs{
toHost: "localhost",
toAdd: map[string]*containersToAdd{"web": {Quantity: 2}},
app: appInstance,
imageId: imageId,
provisioner: p,
})
c.Assert(err, check.IsNil)
appStruct := &app.App{
Name: appInstance.GetName(),
}
err = s.storage.Apps().Insert(appStruct)
c.Assert(err, check.IsNil)
buf := safe.NewBuffer(nil)
err = p.MoveContainers("localhost", "127.0.0.1", buf)
c.Assert(err, check.IsNil)
containers, err := p.listContainersByHost("localhost")
c.Assert(err, check.IsNil)
c.Assert(containers, check.HasLen, 0)
containers, err = p.listContainersByHost("127.0.0.1")
c.Assert(err, check.IsNil)
c.Assert(containers, check.HasLen, 2)
parts := strings.Split(buf.String(), "\n")
c.Assert(parts[0], check.Matches, ".*Moving 2 units.*")
var matches int
movingRegexp := regexp.MustCompile(`.*Moving unit.*for.*myapp.*localhost.*127.0.0.1.*`)
for _, line := range parts[1:] {
if movingRegexp.MatchString(line) {
matches++
}
}
c.Assert(matches, check.Equals, 2)
}
示例10: RoutableAddresses
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
}
示例11: allAppProcesses
func allAppProcesses(appName string) ([]string, error) {
var processes []string
imgID, err := image.AppCurrentImageName(appName)
if err != nil {
return nil, errors.WithStack(err)
}
data, err := image.GetImageCustomData(imgID)
if err != nil {
return nil, errors.WithStack(err)
}
for procName := range data.Processes {
processes = append(processes, procName)
}
return processes, nil
}
示例12: deployProcesses
func deployProcesses(client *docker.Client, a provision.App, newImg string, updateSpec processSpec) error {
curImg, err := image.AppCurrentImageName(a.GetName())
if err != nil {
return err
}
currentImageData, err := image.GetImageCustomData(curImg)
if err != nil {
return err
}
currentSpec := processSpec{}
for p := range currentImageData.Processes {
currentSpec[p] = processState{}
}
newImageData, err := image.GetImageCustomData(newImg)
if err != nil {
return err
}
if len(newImageData.Processes) == 0 {
return errors.Errorf("no process information found deploying image %q", newImg)
}
newSpec := processSpec{}
for p := range newImageData.Processes {
newSpec[p] = processState{start: true}
if updateSpec != nil {
newSpec[p] = updateSpec[p]
}
}
pipeline := action.NewPipeline(
updateServices,
updateImageInDB,
removeOldServices,
)
return pipeline.Execute(&pipelineArgs{
client: client,
app: a,
newImage: newImg,
newImageSpec: newSpec,
currentImage: curImg,
currentImageSpec: currentSpec,
})
}
示例13: AddUnits
func (p *dockerProvisioner) AddUnits(a provision.App, units uint, process string, w io.Writer) error {
if a.GetDeploys() == 0 {
return errors.New("New units can only be added after the first deployment")
}
if units == 0 {
return errors.New("Cannot add 0 units")
}
if w == nil {
w = ioutil.Discard
}
writer := io.MultiWriter(w, &app.LogWriter{App: a})
imageId, err := image.AppCurrentImageName(a.GetName())
if err != nil {
return err
}
imageData, err := image.GetImageCustomData(imageId)
if err != nil {
return err
}
_, err = p.runCreateUnitsPipeline(writer, a, map[string]*containersToAdd{process: {Quantity: int(units)}}, imageId, imageData.ExposedPort)
return err
}
示例14: changeUnits
func changeUnits(a provision.App, units int, processName string, w io.Writer) error {
if a.GetDeploys() == 0 {
return errors.New("units can only be modified after the first deploy")
}
if units == 0 {
return errors.New("cannot change 0 units")
}
client, err := chooseDBSwarmNode()
if err != nil {
return err
}
imageId, err := image.AppCurrentImageName(a.GetName())
if err != nil {
return err
}
if processName == "" {
_, processName, err = dockercommon.ProcessCmdForImage(processName, imageId)
if err != nil {
return errors.WithStack(err)
}
}
return deployProcesses(client, a, imageId, processSpec{processName: processState{increment: units}})
}
示例15: Restart
func (p *dockerProvisioner) Restart(a provision.App, process string, w io.Writer) error {
containers, err := p.listContainersByProcess(a.GetName(), process)
if err != nil {
return err
}
imageId, err := image.AppCurrentImageName(a.GetName())
if err != nil {
return err
}
if w == nil {
w = ioutil.Discard
}
writer := io.MultiWriter(w, &app.LogWriter{App: a})
toAdd := make(map[string]*containersToAdd, len(containers))
for _, c := range containers {
if _, ok := toAdd[c.ProcessName]; !ok {
toAdd[c.ProcessName] = &containersToAdd{Quantity: 0}
}
toAdd[c.ProcessName].Quantity++
toAdd[c.ProcessName].Status = provision.StatusStarted
}
_, err = p.runReplaceUnitsPipeline(writer, a, toAdd, containers, imageId)
return err
}