fab-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Fab-user] Add New Feature: expect object


From: lirudy
Subject: [Fab-user] Add New Feature: expect object
Date: Fri, 2 Nov 2012 16:37:40 +0800

I'm add new feature to Fabric:
I need deal this task: from client  connect to cent os linux , and from the linux connect to another linux :
 
like this:
def GenSSHKey():
    #generate ssh key
    with cd('~/'):
        run("ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ''")
        run("ssh-copy-id -i ~/.ssh/id_rsa.pub address@hidden")
 
but, second linux will prompt " Are you sure you want to continue connecting (yes/no)?  ",
task was freezed .
 
so, I modify the code io.py (line 147):
     class OutputLooper -----> def loop ----->
                    if prompt:
                        self.prompt()
                    elif try_again:
                        self.try_again()
 
                    #add by lirudy 2012-11-2
                    expectObj = env.expectObj;
                    if expectObj :
                        expectObj.deal(self.capture, self.chan)
 
 
and, in my task, add class expectObj():
 
class expectObj():
    
    expectDict = {
        "Are you sure you want to continue connecting (yes/no)? " : "yes",
        "address@hidden's password: " : "1"
        }
    
    def findString(self, script, str):
        tail = script[-1 * len(str):]
        src = ''.join(tail)
        start = src.find(str)
        end = src.find('\n',start)
        return start,end
    
    def deal(self, src, channel):
        for question in self.expectDict.keys():
            start, end = self.findString(src, question)
            if(start  > -1):
                val = self.expectDict[question]
                #print("----"+question+" : "+ val)
                channel.input_enabled = True
                channel.sendall(val+'\n')
 
now, my task function is:
 
def GenSSHKey():
    #generate ssh key
    with cd('~/'):
        env.expectObj = expectObj()    ####### add question responser
        run("ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ''")
        run("ssh-copy-id -i ~/.ssh/id_rsa.pub address@hidden")
        env.expectObj = None              ####### clear it
    
so, maybe someone have same problem.
Thanks, Fabric is Great!

lirudy

reply via email to

[Prev in Thread] Current Thread [Next in Thread]