func (this *DigitalOcean) VmInfo(vm *lobster.VirtualMachine) (*lobster.VmInfo, error) { vmIdentification, _ := strconv.Atoi(vm.Identification) droplet, _, err := this.client.Droplets.Get(vmIdentification) if err != nil { return nil, err } info := lobster.VmInfo{ Hostname: droplet.Name, LoginDetails: "username: root; password: "******"password", "unknown"), } for _, addr4 := range droplet.Networks.V4 { if addr4.Type == "public" { info.Ip = addr4.IPAddress } else if addr4.Type == "private" { info.PrivateIp = addr4.IPAddress } } if droplet.Status == "active" { info.Status = "Online" } else if droplet.Status == "off" { info.Status = "Offline" } else { info.Status = strings.Title(droplet.Status) } // list droplet actions var pendingActions []string actionList, _, err := this.client.Droplets.Actions(droplet.ID, &godo.ListOptions{PerPage: 25}) if err == nil { for _, action := range actionList { if action.Status == "in-progress" { pendingActions = append(pendingActions, action.Type) } } if len(pendingActions) >= 1 { info.Details = make(map[string]string) if len(pendingActions) == 1 { info.Details["Pending action"] = pendingActions[0] } else { info.Details["Pending actions"] = strings.Join(pendingActions, ", ") } } } return &info, nil }