1
0
mirror of https://github.com/rancher/rke.git synced 2025-09-24 21:07:32 +00:00

Add Dialer Factory

This commit is contained in:
galal-hussein
2017-12-16 05:38:15 +02:00
parent 550df97a99
commit fd47cdc80d
10 changed files with 102 additions and 97 deletions

View File

@@ -8,29 +8,26 @@ import (
"golang.org/x/crypto/ssh"
)
type Dialer interface {
NewHTTPClient() (*http.Client, error)
}
type DialerFactory func(h *Host) (func(network, address string) (net.Conn, error), error)
type sshDialer struct {
type dialer struct {
host *Host
signer ssh.Signer
}
func (d *sshDialer) NewHTTPClient() (*http.Client, error) {
dialer := &sshDialer{
host: d.host,
signer: d.signer,
func SSHFactory(h *Host) (func(network, address string) (net.Conn, error), error) {
key, err := checkEncryptedKey(h.SSHKey, h.SSHKeyPath)
if err != nil {
return nil, fmt.Errorf("Failed to parse the private key: %v", err)
}
httpClient := &http.Client{
Transport: &http.Transport{
Dial: dialer.Dial,
},
dialer := &dialer{
host: h,
signer: key,
}
return httpClient, nil
return dialer.Dial, nil
}
func (d *sshDialer) Dial(network, addr string) (net.Conn, error) {
func (d *dialer) Dial(network, addr string) (net.Conn, error) {
sshAddr := d.host.Address + ":22"
// Build SSH client configuration
cfg, err := makeSSHConfig(d.host.User, d.signer)
@@ -51,3 +48,23 @@ func (d *sshDialer) Dial(network, addr string) (net.Conn, error) {
}
return remote, err
}
func (h *Host) newHTTPClient(dialerFactory DialerFactory) (*http.Client, error) {
var factory DialerFactory
if dialerFactory == nil {
factory = SSHFactory
} else {
factory = dialerFactory
}
dialer, err := factory(h)
if err != nil {
return nil, err
}
return &http.Client{
Transport: &http.Transport{
Dial: dialer,
},
}, nil
}