github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/environs/manual/addresses.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package manual 5 6 import ( 7 "net" 8 9 "github.com/juju/juju/core/network" 10 ) 11 12 // HostAddress returns an network.Address for the specified 13 // hostname, depending on whether it is an IP or a resolvable 14 // hostname. The address is given public scope. 15 func HostAddress(hostname string) (network.ProviderAddress, error) { 16 if ip := net.ParseIP(hostname); ip != nil { 17 addr := network.ProviderAddress{ 18 MachineAddress: network.MachineAddress{ 19 Value: ip.String(), 20 Type: network.DeriveAddressType(ip.String()), 21 Scope: network.ScopePublic, 22 }, 23 } 24 return addr, nil 25 } 26 27 // Only a resolvable hostname may be used as a public address. 28 if _, err := netLookupHost(hostname); err != nil { 29 return network.ProviderAddress{}, err 30 } 31 addr := network.ProviderAddress{ 32 MachineAddress: network.MachineAddress{ 33 Value: hostname, 34 Type: network.HostName, 35 Scope: network.ScopePublic, 36 }, 37 } 38 return addr, nil 39 }