func GetServices(vm *hypervisor.Vm, container string) ([]pod.UserService, error) { var services []pod.UserService config := path.Join(ServiceVolume, ServiceConfig) data, err := vm.ReadFile(container, config) if err != nil { return nil, err } token := bytes.Split(data, []byte("\n")) for _, tok := range token { first := bytes.Split(tok, []byte(" ")) reader := bytes.NewReader(tok) if len(first) > 0 { var t1, t2, t3, t4 string if string(first[0][:]) == "frontend" { s := pod.UserService{ Protocol: "TCP", } _, err := fmt.Fscanf(reader, "%s %s %s", &t1, &t2, &t3) if err != nil { return nil, err } hostport := strings.Split(t3, ":") s.ServiceIP = hostport[0] port, err := strconv.ParseInt(hostport[1], 10, 32) if err != nil { return nil, err } s.ServicePort = int(port) services = append(services, s) } else if string(first[0][:]) == "\tserver" { var idx int var h pod.UserServiceBackend _, err := fmt.Fscanf(reader, "%s %s %s %s", &t1, &t2, &t3, &t4) if err != nil { return nil, err } hostport := strings.Split(t3, ":") h.HostIP = hostport[0] port, err := strconv.ParseInt(hostport[1], 10, 32) if err != nil { return nil, err } h.HostPort = int(port) idxs := strings.Split(t2, "-") idxLong, err := strconv.ParseInt(idxs[1], 10, 32) if err != nil { return nil, err } idx = int(idxLong) services[idx].Hosts = append(services[idx].Hosts, h) } } } return services, nil }