func getRegistryClient() (client.API, error) { var dial func(string, string) (net.Conn, error) tun := getTunnelFlag() if tun != "" { sshClient, err := ssh.NewSSHClient("core", tun, getChecker(), false) if err != nil { return nil, fmt.Errorf("failed initializing SSH client: %v", err) } dial = func(network, addr string) (net.Conn, error) { tcpaddr, err := net.ResolveTCPAddr(network, addr) if err != nil { return nil, err } return sshClient.DialTCP(network, nil, tcpaddr) } } tlsConfig, err := etcd.ReadTLSConfigFiles(globalFlags.EtcdCAFile, globalFlags.EtcdCertFile, globalFlags.EtcdKeyFile) if err != nil { return nil, err } trans := http.Transport{ Dial: dial, TLSClientConfig: tlsConfig, } timeout := time.Duration(globalFlags.RequestTimeout*1000) * time.Millisecond return client.NewRegistryClient(&trans, globalFlags.Endpoint, globalFlags.EtcdKeyPrefix, timeout) }
func getRegistryClient() (client.API, error) { var dial func(string, string) (net.Conn, error) tun := getTunnelFlag() if tun != "" { sshClient, err := ssh.NewSSHClient(globalFlags.SSHUserName, tun, getChecker(), false) if err != nil { return nil, fmt.Errorf("failed initializing SSH client: %v", err) } dial = func(network, addr string) (net.Conn, error) { tcpaddr, err := net.ResolveTCPAddr(network, addr) if err != nil { return nil, err } return sshClient.DialTCP(network, nil, tcpaddr) } } tlsConfig, err := etcd.ReadTLSConfigFiles(globalFlags.EtcdCAFile, globalFlags.EtcdCertFile, globalFlags.EtcdKeyFile) if err != nil { return nil, err } trans := &http.Transport{ Dial: dial, TLSClientConfig: tlsConfig, } timeout := time.Duration(globalFlags.RequestTimeout*1000) * time.Millisecond machines := []string{globalFlags.Endpoint} eClient, err := etcd.NewClient(machines, trans, timeout) if err != nil { return nil, err } reg := registry.New(eClient, globalFlags.EtcdKeyPrefix) if msg, ok := checkVersion(reg); !ok { stderr(msg) } return &client.RegistryClient{reg}, nil }
func getEtcdClient() (*etcdClient, error) { var dial func(string, string) (net.Conn, error) tun := getTunnelFlag() if tun != "" { sshClient, err := ssh.NewSSHClient("core", tun, getChecker(), false) if err != nil { return nil, fmt.Errorf("failed initializing SSH client: %v", err) } dial = func(network, addr string) (net.Conn, error) { tcpaddr, err := net.ResolveTCPAddr(network, addr) if err != nil { return nil, err } return sshClient.DialTCP(network, nil, tcpaddr) } } tlsConfig, err := fleetEtcd.ReadTLSConfigFiles(fleet.Flags.EtcdCAFile, fleet.Flags.EtcdCertFile, fleet.Flags.EtcdKeyFile) if err != nil { return nil, err } trans := http.Transport{ Dial: dial, TLSClientConfig: tlsConfig, } timeout := time.Duration(fleet.Flags.RequestTimeout*1000) * time.Millisecond machines := []string{fleet.Flags.Endpoint} c := etcd.NewClient(machines) c.SetDialTimeout(timeout) // use custom transport with SSH tunnel capability c.SetTransport(&trans) return &etcdClient{etcd: c}, nil }
func New(cfg config.Config) (*Server, error) { mgr, err := systemd.NewSystemdUnitManager(systemd.DefaultUnitsDirectory) if err != nil { return nil, err } mach, err := newMachineFromConfig(cfg, mgr) if err != nil { return nil, err } tlsConfig, err := etcd.ReadTLSConfigFiles(cfg.EtcdCAFile, cfg.EtcdCertFile, cfg.EtcdKeyFile) if err != nil { return nil, err } eTrans := http.Transport{TLSClientConfig: tlsConfig} timeout := time.Duration(cfg.EtcdRequestTimeout*1000) * time.Millisecond eClient, err := etcd.NewClient(cfg.EtcdServers, eTrans, timeout) if err != nil { return nil, err } reg := registry.New(eClient, cfg.EtcdKeyPrefix) pub := agent.NewUnitStatePublisher(mgr, reg, mach) gen := unit.NewUnitStateGenerator(mgr) a, err := newAgentFromConfig(mach, reg, cfg, mgr, gen) if err != nil { return nil, err } ar, err := newAgentReconcilerFromConfig(reg, eClient, cfg) if err != nil { return nil, err } e, err := newEngineFromConfig(reg, eClient, mach, cfg) if err != nil { return nil, err } listeners, err := activation.Listeners(false) if err != nil { return nil, err } hrt, mon, err := newHeartMonitorFromConfig(mach, reg, cfg) if err != nil { return nil, err } apiServer := api.NewServer(listeners, api.NewServeMux(reg)) apiServer.Serve() eIval := time.Duration(cfg.EngineReconcileInterval*1000) * time.Millisecond srv := Server{ agent: a, aReconciler: ar, usGen: gen, usPub: pub, engine: e, mach: mach, hrt: hrt, mon: mon, api: apiServer, stop: nil, engineReconcileInterval: eIval, } return &srv, nil }