本文整理汇总了Golang中github.com/globocom/tsuru/provision.App.GetPlatform方法的典型用法代码示例。如果您正苦于以下问题:Golang App.GetPlatform方法的具体用法?Golang App.GetPlatform怎么用?Golang App.GetPlatform使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/globocom/tsuru/provision.App
的用法示例。
在下文中一共展示了App.GetPlatform方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: AddUnits
func (*dockerProvisioner) AddUnits(a provision.App, units uint) ([]provision.Unit, error) {
if units == 0 {
return nil, errors.New("Cannot add 0 units")
}
length, err := getContainerCountForAppName(a.GetName())
if err != nil {
return nil, err
}
if length < 1 {
return nil, errors.New("New units can only be added after the first deployment")
}
writer := app.LogWriter{App: a, Writer: ioutil.Discard}
result := make([]provision.Unit, int(units))
container, err := getOneContainerByAppName(a.GetName())
if err != nil {
return nil, err
}
imageId := container.Image
for i := uint(0); i < units; i++ {
container, err := start(a, imageId, &writer)
if err != nil {
return nil, err
}
result[i] = provision.Unit{
Name: container.ID,
AppName: a.GetName(),
Type: a.GetPlatform(),
Ip: container.HostAddr,
Status: provision.StatusBuilding,
}
}
return result, nil
}
示例2: AddUnits
func (p *FakeProvisioner) AddUnits(app provision.App, n uint) ([]provision.Unit, error) {
if err := p.getError("AddUnits"); err != nil {
return nil, err
}
if n == 0 {
return nil, errors.New("Cannot add 0 units.")
}
index := p.FindApp(app)
if index < 0 {
return nil, errors.New("App is not provisioned.")
}
name := app.GetName()
platform := app.GetPlatform()
p.unitMut.Lock()
defer p.unitMut.Unlock()
length := uint(len(p.units[name]))
for i := uint(0); i < n; i++ {
unit := provision.Unit{
Name: fmt.Sprintf("%s/%d", name, p.unitLen),
AppName: name,
Type: platform,
Status: provision.StatusStarted,
InstanceId: fmt.Sprintf("i-08%d", length+i),
Ip: fmt.Sprintf("10.10.10.%d", length+i),
Machine: int(length + i),
}
p.units[name] = append(p.units[name], unit)
p.unitLen++
}
result := make([]provision.Unit, int(n))
copy(result, p.units[name][length:])
return result, nil
}
示例3: newContainer
// newContainer creates a new container in Docker and stores it in the database.
func newContainer(app provision.App, imageId string, cmds []string) (container, error) {
cont := container{
AppName: app.GetName(),
Type: app.GetPlatform(),
}
port, err := getPort()
if err != nil {
log.Printf("error on getting port for container %s - %s", cont.AppName, port)
return container{}, err
}
config := docker.Config{
Image: imageId,
Cmd: cmds,
PortSpecs: []string{port},
AttachStdin: false,
AttachStdout: false,
AttachStderr: false,
}
hostID, c, err := dockerCluster().CreateContainer(&config)
if err != nil {
log.Printf("error on creating container in docker %s - %s", cont.AppName, err.Error())
return container{}, err
}
cont.ID = c.ID
cont.Port = port
cont.HostAddr = getHostAddr(hostID)
return cont, nil
}
示例4: Provision
func (p *FakeProvisioner) Provision(app provision.App) error {
if err := p.getError("Provision"); err != nil {
return err
}
index := p.FindApp(app)
if index > -1 {
return &provision.Error{Reason: "App already provisioned."}
}
p.apps = append(p.apps, app)
p.unitMut.Lock()
p.units[app.GetName()] = []provision.Unit{
{
Name: app.GetName() + "/0",
AppName: app.GetName(),
Type: app.GetPlatform(),
Status: provision.StatusStarted,
InstanceId: "i-080",
Ip: "10.10.10.1",
Machine: 1,
},
}
p.unitLen++
p.unitMut.Unlock()
return nil
}
示例5: Provision
func (p *FakeProvisioner) Provision(app provision.App) error {
if err := p.getError("Provision"); err != nil {
return err
}
if p.Provisioned(app) {
return &provision.Error{Reason: "App already provisioned."}
}
p.mut.Lock()
defer p.mut.Unlock()
p.apps[app.GetName()] = provisionedApp{
app: app,
unitLen: 1,
units: []provision.Unit{
{
Name: app.GetName() + "/0",
AppName: app.GetName(),
Type: app.GetPlatform(),
Status: provision.StatusStarted,
InstanceId: "i-080",
Ip: "10.10.10.1",
Machine: 1,
},
},
}
return nil
}
示例6: AddUnits
func (*dockerProvisioner) AddUnits(a provision.App, units uint) ([]provision.Unit, error) {
if units == 0 {
return nil, errors.New("Cannot add 0 units")
}
containers, err := listAppContainers(a.GetName())
if err != nil {
return nil, err
}
if len(containers) < 1 {
return nil, errors.New("New units can only be added after the first deployment")
}
writer := app.LogWriter{App: a, Writer: ioutil.Discard}
result := make([]provision.Unit, int(units))
imageId := getImage(a)
for i := uint(0); i < units; i++ {
container, err := start(a, imageId, &writer)
if err != nil {
return nil, err
}
result[i] = provision.Unit{
Name: container.ID,
AppName: a.GetName(),
Type: a.GetPlatform(),
Ip: container.IP,
Status: provision.StatusInstalling,
}
}
return result, nil
}
示例7: AddUnits
func (p *FakeProvisioner) AddUnits(app provision.App, n uint) ([]provision.Unit, error) {
if err := p.getError("AddUnits"); err != nil {
return nil, err
}
if n == 0 {
return nil, errors.New("Cannot add 0 units.")
}
p.mut.Lock()
defer p.mut.Unlock()
pApp, ok := p.apps[app.GetName()]
if !ok {
return nil, errNotProvisioned
}
name := app.GetName()
platform := app.GetPlatform()
length := uint(len(pApp.units))
for i := uint(0); i < n; i++ {
unit := provision.Unit{
Name: fmt.Sprintf("%s/%d", name, pApp.unitLen),
AppName: name,
Type: platform,
Status: provision.StatusStarted,
InstanceId: fmt.Sprintf("i-08%d", length+i),
Ip: fmt.Sprintf("10.10.10.%d", length+i),
Machine: int(length + i),
}
pApp.units = append(pApp.units, unit)
pApp.unitLen++
}
result := make([]provision.Unit, int(n))
copy(result, pApp.units[length:])
p.apps[app.GetName()] = pApp
return result, nil
}
示例8: getImage
// getImage returns the image name or id from an app.
func getImage(app provision.App) string {
var c container
collection().Find(bson.M{"appname": app.GetName()}).One(&c)
if c.Image != "" {
return c.Image
}
return assembleImageName(app.GetPlatform())
}
示例9: newContainer
// newContainer creates a new container in Docker and stores it in the database.
func newContainer(app provision.App, imageId string, cmds []string) (container, error) {
contName := containerName()
cont := container{
AppName: app.GetName(),
Type: app.GetPlatform(),
Name: contName,
Status: "created",
}
coll := collection()
defer coll.Close()
if err := coll.Insert(cont); err != nil {
log.Errorf("error on inserting container into database %s - %s", cont.Name, err)
return container{}, err
}
port, err := getPort()
if err != nil {
log.Errorf("error on getting port for container %s - %s", cont.AppName, port)
return container{}, err
}
user, _ := config.GetString("docker:ssh:user")
exposedPorts := make(map[docker.Port]struct{}, 1)
p := docker.Port(fmt.Sprintf("%s/tcp", port))
exposedPorts[p] = struct{}{}
config := docker.Config{
Image: imageId,
Cmd: cmds,
User: user,
ExposedPorts: exposedPorts,
AttachStdin: false,
AttachStdout: false,
AttachStderr: false,
}
opts := dclient.CreateContainerOptions{Name: contName}
hostID, c, err := dockerCluster().CreateContainer(opts, &config)
if err == dclient.ErrNoSuchImage {
var buf bytes.Buffer
pullOpts := dclient.PullImageOptions{Repository: imageId}
dockerCluster().PullImage(pullOpts, &buf)
hostID, c, err = dockerCluster().CreateContainer(opts, &config)
}
if err != nil {
log.Errorf("error on creating container in docker %s - %s", cont.AppName, err)
return container{}, err
}
cont.ID = c.ID
cont.Port = port
cont.HostAddr = getHostAddr(hostID)
err = coll.Update(bson.M{"name": cont.Name}, cont)
if err != nil {
log.Errorf("error on updating container into database %s - %s", cont.ID, err)
return container{}, err
}
return cont, nil
}
示例10: getImage
// getImage returns the image name or id from an app.
func getImage(app provision.App) string {
var c container
collection().Find(bson.M{"appname": app.GetName()}).One(&c)
if c.Image != "" {
return c.Image
}
repoNamespace, err := config.GetString("docker:repository-namespace")
if err != nil {
return ""
}
return fmt.Sprintf("%s/%s", repoNamespace, app.GetPlatform())
}
示例11: newContainer
// newContainer creates a new container in Docker and stores it in the database.
//
// TODO (flaviamissi): make it atomic
func newContainer(app provision.App) (*container, error) {
appName := app.GetName()
c := container{
AppName: appName,
Type: app.GetPlatform(),
}
err := c.create(app)
if err != nil {
log.Printf("Error creating container for the app %q: %s", appName, err)
return nil, err
}
return &c, nil
}
示例12: Provision
func (p *JujuProvisioner) Provision(app provision.App) error {
var buf bytes.Buffer
charms, err := config.GetString("juju:charms-path")
if err != nil {
return errors.New(`Setting "juju:charms-path" is not defined.`)
}
args := []string{
"deploy", "--repository", charms,
"local:" + app.GetPlatform(), app.GetName(),
}
err = runCmd(false, &buf, &buf, args...)
out := buf.String()
if err != nil {
app.Log("Failed to create machine: "+out, "tsuru")
return cmdError(out, err, args)
}
setOption := []string{
"set", app.GetName(), "app-repo=" + repository.ReadOnlyURL(app.GetName()),
}
runCmd(true, &buf, &buf, setOption...)
if p.elbSupport() {
router, err := Router()
if err != nil {
return err
}
if err = router.AddBackend(app.GetName()); err != nil {
return err
}
p.enqueueUnits(app.GetName())
}
return nil
}
示例13: getImage
// getImage returns the image name or id from an app.
func getImage(app provision.App) string {
var c container
coll := collection()
defer coll.Close()
coll.Find(bson.M{"appname": app.GetName()}).One(&c)
if c.Image == "" {
return assembleImageName(app.GetPlatform())
}
if usePlatformImage(app) {
err := removeImage(c.Image)
if err != nil {
log.Error(err.Error())
}
return assembleImageName(app.GetPlatform())
}
return c.Image
}
示例14: deployContainerCmd
// DeployCmd combines settings and application attributes needed in
// order to make a deploy command
func deployContainerCmd(app provision.App) ([]string, error) {
docker, err := config.GetString("docker:binary")
if err != nil {
return []string{}, err
}
repoNamespace, err := config.GetString("docker:repository-namespace")
if err != nil {
return []string{}, err
}
cmd, err := config.GetString("docker:deploy-cmd")
if err != nil {
return []string{}, err
}
cmd = fmt.Sprintf("%s %s", cmd, repository.GetReadOnlyUrl(app.GetName()))
imageName := fmt.Sprintf("%s/%s", repoNamespace, app.GetPlatform()) // TODO (flaviamissi): should use same algorithm as image.repositoryName
wholeCmd := []string{docker, "run", "-d", imageName, cmd}
return wholeCmd, nil
}
示例15: commandToRun
func commandToRun(app provision.App) ([]string, error) {
docker, err := config.GetString("docker:binary")
if err != nil {
return nil, err
}
repoNamespace, err := config.GetString("docker:repository-namespace")
if err != nil {
return nil, err
}
port, err := config.GetString("docker:run-cmd:port")
if err != nil {
return nil, err
}
commands, err := getSSHCommands()
if err != nil {
return nil, err
}
imageName := fmt.Sprintf("%s/%s", repoNamespace, app.GetPlatform()) // TODO (flaviamissi): should use same algorithm as image.repositoryName
containerCmd := strings.Join(commands, " && ")
wholeCmd := []string{docker, "run", "-d", "-t", "-p", port, imageName, "/bin/bash", "-c", containerCmd}
return wholeCmd, nil
}