package main import ( "fmt" // "log" "os" "github.com/UpCloudLtd/upcloud-go-api/upcloud" "github.com/UpCloudLtd/upcloud-go-api/upcloud/request" "github.com/UpCloudLtd/upcloud-go-api/upcloud/service" ) func inventoryOneServer(s *service.Service, floatIP string, server upcloud.Server) (string, error) { ansible_data := "ansible_port=22 ansible_python_interpreter=/usr/bin/python3 ansible_user=root" info,err := s.GetServerDetails(&request.GetServerDetailsRequest{ UUID: server.UUID, }) if err != nil { fmt.Fprintf(os.Stderr, "Unable to get details from server %#v: %#v\n", server.UUID, err) return "", err } public_ip :="" private_ip :="" vpn_ip :="" host :="" float := upcloud.False output := "" for _, ip := range info.Networking.Interfaces { for _, addr := range ip.IPAddresses { if addr.Address == floatIP { continue } switch ip.Type { case upcloud.NetworkTypePublic: public_ip = addr.Address float = addr.Floating case upcloud.NetworkTypeUtility: private_ip = addr.Address case upcloud.NetworkTypePrivate: vpn_ip = addr.Address } } } if vpn_ip != "" { host = vpn_ip } else { host = public_ip } floating := "no" if float == upcloud.True { floating = "yes" } output += fmt.Sprintf("%s ansible_host=%s hostname=%s vpn_ip=%s pub_ip=%s private_ip=%s float=%s ", server.Hostname, host, server.Hostname, vpn_ip, public_ip, private_ip, floating) output += fmt.Sprintf(" uuid=%s %s\n",info.UUID,ansible_data) return output, nil } func hostsOneServer(s *service.Service, usetype string, floatIP string, server upcloud.Server, target ServerConfig) (string, error) { info,err := s.GetServerDetails(&request.GetServerDetailsRequest{ UUID: server.UUID, }) if err != nil { fmt.Fprintf(os.Stderr, "Unable to get details from server %#v: %#v\n", server.UUID, err) return "", err } public_ip :="" private_ip :="" sdn_ip :="" vpn_ip :="" vpn_net :="" float := upcloud.False output := "" for i := 0; i < len(info.Networking.Interfaces); i++ { for _,addr := range info.Networking.Interfaces[i].IPAddresses { if addr.Address == floatIP { continue } switch info.Networking.Interfaces[i].Type { case upcloud.NetworkTypePublic: public_ip = addr.Address float = addr.Floating case upcloud.NetworkTypeUtility: private_ip = addr.Address case upcloud.NetworkTypePrivate: sdn_ip = addr.Address } } } for i := 0; i < len(target.Networks); i++ { if target.Networks[i].Access == "vpn" { vpn_ip = target.Networks[i].IPAddress vpn_net = target.Networks[i].Network } } floating := "no" if float == upcloud.True { floating = "yes" } suffix := "" output += fmt.Sprintf("# %s \t %s float=%s | %s\n", server.Hostname, server.UUID, floating, server.Title) if public_ip != "" { if usetype == "prv" { suffix = ".pub" } output += fmt.Sprintf("%s \t %s%s \t# PUB\n", public_ip, server.Hostname, suffix) } if sdn_ip != "" { if usetype == "pub" { suffix = ".prv" } else { suffix = "" } output += fmt.Sprintf("%s \t %s%s \t# SDN\n", sdn_ip,server.Hostname, suffix) } if private_ip != "" { output += fmt.Sprintf("%s \t %s.pv \t# PV\n", private_ip, server.Hostname) } if vpn_ip != "" { output += fmt.Sprintf("%s \t %s.vpn \t# VPN /%s\n", vpn_ip, server.Hostname, vpn_net) } return output,nil }