示例#1
0
 def connect_remote(self, go_daemon=None):
     if go_daemon == 'done':
         return self.start_fd_client(*self.fd_pair)
     gconf.setup_ssh_ctl(tempfile.mkdtemp())
     deferred = go_daemon == 'postconn'
     ret = sup(self,
               gconf.ssh_command.split() + gconf.ssh_ctl_args +
               [self.remote_addr],
               slave=self.inner_rsc.url,
               deferred=deferred)
     if deferred:
         # send a message to peer so that we can wait for
         # the answer from which we know connection is
         # established and we can proceed with daemonization
         # (doing that too early robs the ssh passwd prompt...)
         # However, we'd better not start the RepceClient
         # before daemonization (that's not preserved properly
         # in daemon), we just do a an ad-hoc linear put/get.
         i, o = ret
         inf = os.fdopen(i)
         repce.send(o, None, '__repce_version__')
         select.select((inf, ), (), ())
         repce.recv(inf)
         # hack hack hack: store a global reference to the file
         # to save it from getting GC'd which implies closing it
         gconf.permanent_handles.append(inf)
         self.fd_pair = (i, o)
         return 'should'
示例#2
0
    def connect_remote(self, go_daemon=None):
        """connect to inner slave url through outer ssh url

        Wrap the connecting utility in ssh.

        Much care is put into daemonizing: in that case
        ssh is started before daemonization, but
        RePCe client is to be created after that (as ssh
        interactive password auth would be defeated by
        a daemonized ssh, while client should be present
        only in the final process). In that case the action
        is taken apart to two parts, this method is ivoked
        once pre-daemon, once post-daemon. Use @go_daemon
        to deiced what part to perform.

        [NB. ATM gluster product does not makes use of interactive
        authentication.]
        """
        if go_daemon == "done":
            return self.start_fd_client(*self.fd_pair)
        gconf.setup_ssh_ctl(tempfile.mkdtemp(prefix="gsyncd-aux-ssh-"))
        deferred = go_daemon == "postconn"
        ret = sup(
            self,
            gconf.ssh_command.split() + gconf.ssh_ctl_args + [self.remote_addr],
            slave=self.inner_rsc.url,
            deferred=deferred,
        )
        if deferred:
            # send a message to peer so that we can wait for
            # the answer from which we know connection is
            # established and we can proceed with daemonization
            # (doing that too early robs the ssh passwd prompt...)
            # However, we'd better not start the RepceClient
            # before daemonization (that's not preserved properly
            # in daemon), we just do a an ad-hoc linear put/get.
            i, o = ret
            inf = os.fdopen(i)
            repce.send(o, None, "__repce_version__")
            select((inf,), (), ())
            repce.recv(inf)
            # hack hack hack: store a global reference to the file
            # to save it from getting GC'd which implies closing it
            gconf.permanent_handles.append(inf)
            self.fd_pair = (i, o)
            return "should"
示例#3
0
    def connect_remote(self, go_daemon=None):
        """connect to inner slave url through outer ssh url

        Wrap the connecting utility in ssh.

        Much care is put into daemonizing: in that case
        ssh is started before daemonization, but
        RePCe client is to be created after that (as ssh
        interactive password auth would be defeated by
        a daemonized ssh, while client should be present
        only in the final process). In that case the action
        is taken apart to two parts, this method is ivoked
        once pre-daemon, once post-daemon. Use @go_daemon
        to deiced what part to perform.

        [NB. ATM gluster product does not makes use of interactive
        authentication.]
        """
        if go_daemon == 'done':
            return self.start_fd_client(*self.fd_pair)
        gconf.setup_ssh_ctl(tempfile.mkdtemp(prefix='gsyncd-aux-ssh-'))
        deferred = go_daemon == 'postconn'
        ret = sup(self,
                  gconf.ssh_command.split() + gconf.ssh_ctl_args +
                  [self.remote_addr],
                  slave=self.inner_rsc.url,
                  deferred=deferred)
        if deferred:
            # send a message to peer so that we can wait for
            # the answer from which we know connection is
            # established and we can proceed with daemonization
            # (doing that too early robs the ssh passwd prompt...)
            # However, we'd better not start the RepceClient
            # before daemonization (that's not preserved properly
            # in daemon), we just do a an ad-hoc linear put/get.
            i, o = ret
            inf = os.fdopen(i)
            repce.send(o, None, '__repce_version__')
            select((inf, ), (), ())
            repce.recv(inf)
            # hack hack hack: store a global reference to the file
            # to save it from getting GC'd which implies closing it
            gconf.permanent_handles.append(inf)
            self.fd_pair = (i, o)
            return 'should'
示例#4
0
 def connect_remote(self, go_daemon=None):
     if go_daemon == 'done':
         return self.start_fd_client(*self.fd_pair)
     gconf.setup_ssh_ctl(tempfile.mkdtemp())
     deferred = go_daemon == 'postconn'
     ret = sup(self, gconf.ssh_command.split() + gconf.ssh_ctl_args + [self.remote_addr], slave=self.inner_rsc.url, deferred=deferred)
     if deferred:
         # send a message to peer so that we can wait for
         # the answer from which we know connection is
         # established and we can proceed with daemonization
         # (doing that too early robs the ssh passwd prompt...)
         # However, we'd better not start the RepceClient
         # before daemonization (that's not preserved properly
         # in daemon), we just do a an ad-hoc linear put/get.
         i, o = ret
         inf = os.fdopen(i)
         repce.send(o, None, '__repce_version__')
         select.select((inf,), (), ())
         repce.recv(inf)
         # hack hack hack: store a global reference to the file
         # to save it from getting GC'd which implies closing it
         gconf.permanent_handles.append(inf)
         self.fd_pair = (i, o)
         return 'should'