本文整理汇总了Golang中github.com/tsuru/tsuru/provision.Unit类的典型用法代码示例。如果您正苦于以下问题:Golang Unit类的具体用法?Golang Unit怎么用?Golang Unit使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Unit类的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: collectUnit
func collectUnit(container container, units chan<- provision.Unit, wg *sync.WaitGroup) {
defer wg.Done()
unit := provision.Unit{
Name: container.ID,
AppName: container.AppName,
Type: container.Type,
}
if container.Status == "error" {
unit.Status = provision.StatusDown
units <- unit
return
}
if container.Status == "running" {
unit.Ip = container.HostAddr
ip, hostPort, err := container.networkInfo()
if err == nil &&
(hostPort != container.HostPort || ip != container.IP) {
err = fixContainer(&container, ip, hostPort)
if err != nil {
log.Errorf("error on fix container hostport for [container %s]", container.ID)
return
}
}
addr := strings.Replace(container.getAddress(), "http://", "", 1)
conn, err := net.Dial("tcp", addr)
if err != nil {
unit.Status = provision.StatusUnreachable
} else {
conn.Close()
unit.Status = provision.StatusStarted
}
log.Debugf("collected data for [container %s] - [app %s]", container.ID, container.AppName)
units <- unit
}
}
示例2: TestContainerAsUnit
func (s *S) TestContainerAsUnit(c *check.C) {
app := provisiontest.NewFakeApp("myapp", "python", 1)
expected := provision.Unit{
ID: "c-id",
AppName: "myapp",
Type: "python",
Ip: "192.168.50.4",
Status: provision.StatusBuilding,
ProcessName: "web",
Address: &url.URL{Scheme: "http", Host: "192.168.50.4:8080"},
}
container := Container{
ID: "c-id",
HostAddr: "192.168.50.4",
HostPort: "8080",
ProcessName: "web",
}
got := container.AsUnit(app)
c.Assert(got, check.DeepEquals, expected)
container.Type = "ruby"
container.Status = provision.StatusStarted.String()
got = container.AsUnit(app)
expected.Status = provision.StatusStarted
expected.Type = "ruby"
c.Assert(got, check.DeepEquals, expected)
}
示例3: collectStatus
func (p *JujuProvisioner) collectStatus() ([]provision.Unit, error) {
out, err := p.getOutput()
if err != nil {
return nil, err
}
var units []provision.Unit
for name, service := range out.Services {
for unitName, u := range service.Units {
machine := out.Machines[u.Machine]
unit := provision.Unit{
Name: unitName,
AppName: name,
Machine: u.Machine,
InstanceId: machine.InstanceID,
Ip: machine.IPAddress,
}
typeRegexp := regexp.MustCompile(`^(local:)?(\w+)/(\w+)-\d+$`)
matchs := typeRegexp.FindStringSubmatch(service.Charm)
if len(matchs) > 3 {
unit.Type = matchs[3]
}
unit.Status = unitStatus(machine, u, unit)
units = append(units, unit)
}
}
p.saveBootstrapMachine(out.Machines[0])
return units, err
}
示例4: SetUnitStatus
func (p *FakeProvisioner) SetUnitStatus(unit provision.Unit, status provision.Status) error {
p.mut.Lock()
defer p.mut.Unlock()
var units []provision.Unit
if unit.AppName == "" {
units = p.getAllUnits()
} else {
app, ok := p.apps[unit.AppName]
if !ok {
return errNotProvisioned
}
units = app.units
}
index := -1
for i, unt := range units {
if unt.ID == unit.ID {
index = i
unit.AppName = unt.AppName
break
}
}
if index < 0 {
return &provision.UnitNotFoundError{ID: unit.ID}
}
app := p.apps[unit.AppName]
app.units[index].Status = status
p.apps[unit.AppName] = app
return nil
}