package garage import ( "fmt" "net" "strconv" ) // RemoteNode describes all information necessary to connect to a given garage // node. type RemoteNode struct { ID string IP string RPCPort int S3APIPort int } // LocalNode describes the configuration of a local garage instance. type LocalNode struct { RemoteNode AdminPort int } // RPCAddr returns the address of the node's RPC port. func (p RemoteNode) RPCAddr() string { return net.JoinHostPort(p.IP, strconv.Itoa(p.RPCPort)) } // RPCNodeAddr returns the full node address (e.g. "id@ip:port") of the garage // node for use in communicating over RPC. func (p RemoteNode) RPCNodeAddr() string { return fmt.Sprintf("%s@%s", p.ID, p.RPCAddr()) } // S3APIAddr returns the address of the node's S3 API port. func (p RemoteNode) S3APIAddr() string { return net.JoinHostPort(p.IP, strconv.Itoa(p.S3APIPort)) } // AdminAddr returns the address of the node's S3 API port. func (p LocalNode) AdminAddr() string { return net.JoinHostPort(p.IP, strconv.Itoa(p.AdminPort)) }