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  }