func (p *JujuProvisioner) CollectStatus() ([]provision.Unit, error) { output, err := execWithTimeout(30e9, "juju", "status") if err != nil { return nil, &provision.Error{Reason: string(output), Err: err} } var out jujuOutput err = goyaml.Unmarshal(output, &out) if err != nil { return nil, &provision.Error{Reason: `"juju status" returned invalid data`, Err: 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.InstanceState, u.AgentState, machine.AgentState) units = append(units, unit) } } return units, nil }
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.InstanceState, u.AgentState, machine.AgentState) units = append(units, unit) } } p.saveBootstrapMachine(out.Machines[0]) return units, err }