diff options
| author | Sander Vrijders <sander.vrijders@intec.ugent.be> | 2017-02-09 14:56:32 +0100 |
|---|---|---|
| committer | Sander Vrijders <sander.vrijders@intec.ugent.be> | 2017-02-09 14:56:32 +0100 |
| commit | 53a11eac43187ff12d82605cf8379803697db7b7 (patch) | |
| tree | 9e83d743b7178b10d901e42df2b3de421320230c /ssh_support.py | |
| parent | 22b3218c951ebfc0bd2b2bdb89adb59b8a3e5ee7 (diff) | |
| download | rumba-53a11eac43187ff12d82605cf8379803697db7b7.tar.gz rumba-53a11eac43187ff12d82605cf8379803697db7b7.zip | |
rhumba: Create Python package
This transforms the repository into a real Python package.
Diffstat (limited to 'ssh_support.py')
| -rw-r--r-- | ssh_support.py | 156 |
1 files changed, 0 insertions, 156 deletions
diff --git a/ssh_support.py b/ssh_support.py deleted file mode 100644 index 6bc892f..0000000 --- a/ssh_support.py +++ /dev/null @@ -1,156 +0,0 @@ -# -# SSH support for Rhumba -# -# Sander Vrijders <sander.vrijders@intec.ugent.be> -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -# MA 02110-1301 USA - -import paramiko - -def get_ssh_client(): - ssh_client = paramiko.SSHClient() - ssh_client.load_system_host_keys() - ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) - - return ssh_client - -def execute_commands(testbed, hostname, commands, time_out = 3): - ''' - Remote execution of a list of shell command on hostname. By - default this function will exit (timeout) after 3 seconds. - - @param testbed: testbed info - @param hostname: host name or ip address of the node - @param command: *nix shell command - @param time_out: time_out value in seconds, error will be generated if - no result received in given number of seconds, the value None can - be used when no timeout is needed - ''' - ssh_client = get_ssh_client() - - try: - ssh_client.connect(hostname, 22, - testbed.username, testbed.password, - look_for_keys = True, timeout = time_out) - for command in commands: - stdin, stdout, stderr = ssh_client.exec_command(command) - err = str(stderr.read()).strip('b\'\"\\n') - if err != "": - err_array = err.split('\\n') - for erra in err_array: - print(erra) - ssh_client.close() - - except Exception as e: - print(str(e)) - return - -def execute_command(testbed, hostname, command, time_out = 3): - ''' - Remote execution of a list of shell command on hostname. By - default this function will exit (timeout) after 3 seconds. - - @param testbed: testbed info - @param hostname: host name or ip address of the node - @param command: *nix shell command - @param time_out: time_out value in seconds, error will be generated if - no result received in given number of seconds, the value None can - be used when no timeout is needed - - @return: stdout resulting from the command - ''' - ssh_client = get_ssh_client() - - try: - ssh_client.connect(hostname, 22, - testbed.username, testbed.password, - look_for_keys = True, timeout = time_out) - stdin, stdout, stderr = ssh_client.exec_command(command) - err = str(stderr.read()).strip('b\'\"\\n') - if err != "": - print(err) - output = str(stdout.read()).strip('b\'\"\\n') - ssh_client.close() - - return output - - except Exception as e: - print(str(e)) - return - -def copy_file_to_testbed(testbed, hostname, text, file_name): - ''' - Write a string to a given remote file. - Overwrite the complete file if it already exists! - - @param testbed: testbed info - @param hostname: host name or ip address of the node - @param text: string to be written in file - @param file_name: file name (including full path) on the host - ''' - ssh_client = get_ssh_client() - - try: - ssh_client.connect(hostname, 22, - testbed.username, - testbed.password, - look_for_keys=True) - - cmd = "touch " + file_name + \ - "; chmod a+rwx " + file_name - - stdin, stdout, stderr = ssh_client.exec_command(cmd) - err = str(stderr.read()).strip('b\'\"\\n') - if err != "": - print(err) - - sftp_client = ssh_client.open_sftp() - remote_file = sftp_client.open(file_name, 'w') - - remote_file.write(text) - remote_file.close() - - except Exception as e: - print(str(e)) - -def setup_vlan(testbed, node_name, vlan_id, int_name): - ''' - Gets the interface (ethx) to link mapping - - @param testbed: testbed info - @param node_name: the node to create the VLAN on - @param vlan_id: the VLAN id - @param int_name: the name of the interface - ''' - print("Setting up VLAN on node " + node_name) - - node_full_name = full_name(node_name, testbed) - cmd = "sudo ip link add link " + \ - str(int_name) + \ - " name " + str(int_name) + \ - "." + str(vlan_id) + \ - " type vlan id " + str(vlan_id) - execute_command(testbed, node_full_name, cmd) - cmd = "sudo ifconfig " + \ - str(int_name) + "." + \ - str(vlan_id) + " up" - execute_command(node_full_name, cmd, testbed) - cmd = "sudo ethtool -K " + \ - str(int_name) + " rxvlan off" - execute_command(node_full_name, cmd, testbed) - cmd = "sudo ethtool -K " + \ - str(int_name) + " txvlan off" - execute_command(node_full_name, cmd, testbed) |
