3 This file is used to make connections
4 Include ssh & exchange public-key to each other so that
5 it can run without password
10 # All rights reserved. This program and the accompanying materials
11 # are made available under the terms of the Apache License, Version 2.0
12 # which accompanies this distribution, and is available at
13 # http://www.apache.org/licenses/LICENSE-2.0
20 from foundation import foundation
21 import functest.utils.functest_logger as ft_logger
24 class connection(foundation):
26 logger = ft_logger.Logger("connection").getLogger()
29 foundation.__init__(self)
30 self.loginfo = foundation()
32 def AddKnownHost(self, handle, ipaddr, username, password):
34 Add an user to known host,so that onos can login in with onos $ipaddr.
37 username: login user name
38 password: login password
40 self.logger.info("Now Adding an user to known hosts " + ipaddr)
42 login.sendline("ssh -l %s -p 8101 %s" % (username, ipaddr))
45 index = login.expect(['assword:', 'yes/no', pexpect.EOF,
48 login.sendline(password)
49 login.sendline("logout")
50 index = login.expect(["closed", pexpect.EOF])
52 self.loginfo.log("Add SSH Known Host Success!")
55 self.loginfo.log("Add SSH Known Host Failed! "
63 def GetEnvValue(self, handle, envname):
65 os.getenv only returns current user value
66 GetEnvValue returns a environment value of
68 eg: GetEnvValue(handle,'HOME')
71 envhandle.sendline('echo $' + envname)
73 reg = envname + '\r\n(.*)\r'
74 envaluereg = re.compile(reg)
75 envalue = envaluereg.search(envhandle.before)
77 return envalue.groups()[0]
81 def Gensshkey(self, handle):
83 Generate ssh keys, used for some server have no sshkey.
85 self.logger.info("Now Generating SSH keys...")
86 # Here file name may be id_rsa or id_ecdsa or others
87 # So here will have a judgement
89 filepath = self.GetEnvValue(keysub, 'HOME') + '/.ssh'
90 filelist = os.listdir(filepath)
93 self.loginfo.log("SSH keys are exsit in ssh directory.")
95 keysub.sendline("ssh-keygen -t rsa")
98 Result = keysub.expect(["Overwrite", "Enter", pexpect.EOF,
99 'PEXPECT]#', pexpect.TIMEOUT])
102 if Result == 1 or Result == 2:
103 keysub.sendline("\n")
105 self.loginfo.log("Generate SSH key success.")
109 self.loginfo.log("Generate SSH key failed.")
113 def GetRootAuth(self, password):
117 password: root login password
119 self.logger.info("Now changing to user root")
120 login = pexpect.spawn("su - root")
123 index = login.expect(['assword:', "failure",
124 pexpect.EOF, pexpect.TIMEOUT])
126 login.sendline(password)
128 self.loginfo.log("Change user to root failed.")
132 def ReleaseRootAuth(self):
136 self.logger.info("Now Release user root")
137 login = pexpect.spawn("exit")
138 index = login.expect(['logout', pexpect.EOF, pexpect.TIMEOUT])
140 self.loginfo.log("Release root user success.")
142 self.loginfo.log("Release root user failed.")
146 def AddEnvIntoBashrc(self, envalue):
148 Add Env var into /etc/profile.
150 envalue: environment value to add
152 self.logger.info("Now Adding bash environment")
153 fileopen = open("/etc/profile", 'r')
156 findContext = fileopen.readline()
157 result = findContext.find(envalue)
162 envAdd = open("/etc/profile", 'a+')
163 envAdd.writelines("\n" + envalue)
165 self.loginfo.log("Add env to bashrc success!")
167 def OnosRootPathChange(self, onospath):
169 Change ONOS root path in file:bash_profile
170 onospath: path of onos root
172 self.logger.info("Now Changing ONOS Root Path")
173 filepath = onospath + 'onos/tools/dev/bash_profile'
174 line = open(filepath, 'r').readlines()
175 lenall = len(line) - 1
176 for i in range(lenall):
177 if "export ONOS_ROOT" in line[i]:
178 line[i] = 'export ONOS_ROOT=' + onospath + 'onos\n'
179 NewFile = open(filepath, 'w')
180 NewFile.writelines(line)
182 self.logger.info("Done!")
184 def OnosConnectionSet(self):
186 Intergrate for ONOS connection setup
188 if self.masterusername == 'root':
191 filepath = '/home/' + self.masterusername + '/'
192 filepath = os.path.join(filepath, "onos/tools/dev/bash_profile")
193 self.AddEnvIntoBashrc("source " + filepath + "\n")
194 self.AddEnvIntoBashrc("export OCT=" + self.OCT)
195 self.AddEnvIntoBashrc("export OC1=" + self.OC1)
196 self.AddEnvIntoBashrc("export OC2=" + self.OC2)
197 self.AddEnvIntoBashrc("export OC3=" + self.OC3)
198 self.AddEnvIntoBashrc("export OCN=" + self.OCN)
199 self.AddEnvIntoBashrc("export OCN2=" + self.OCN2)
200 self.AddEnvIntoBashrc("export localhost=" + self.localhost)