From 05a6aae466d9e014d2b7b7b4835360eb808e5e1f Mon Sep 17 00:00:00 2001 From: Sander Vrijders Date: Tue, 11 Apr 2017 16:38:41 +0200 Subject: prototypes: ouroboros: Implement all commands This will implement all the commands necessary for bootstrapping a network that runs Ouroboros. APs are be bound to a name, IPCPs either bootstrapped or enrolled, and names registered in DIFs. --- rumba/prototypes/ouroboros.py | 96 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 91 insertions(+), 5 deletions(-) (limited to 'rumba') diff --git a/rumba/prototypes/ouroboros.py b/rumba/prototypes/ouroboros.py index 4f78361..00fdb6b 100644 --- a/rumba/prototypes/ouroboros.py +++ b/rumba/prototypes/ouroboros.py @@ -20,6 +20,7 @@ import rumba.ssh_support as ssh import rumba.model as mod +import time # An experiment over the Ouroboros implementation class Experiment(mod.Experiment): @@ -32,7 +33,7 @@ class Experiment(mod.Experiment): cmds.append("sudo apt-get update") cmds.append("sudo apt-get install cmake protobuf-c-compiler git --yes") cmds.append("sudo rm -r ~/ouroboros/build") - cmds.append("cd ~/ouroboros; sudo ./install_release.sh") + cmds.append("cd ~/ouroboros; sudo ./install_debug.sh /") cmds.append("sudo nohup irmd > /dev/null &") for node in self.nodes: @@ -47,13 +48,98 @@ class Experiment(mod.Experiment): cmds.append("irm b ap " + ap + " n " + name) ssh.execute_commands(self.testbed, node.full_name, - cmds, time_out=None) + cmds, time_out = None) + + def reg_names(self): + for node in self.nodes: + cmds = list() + for name, difs in node.registrations.items(): + cmd = "irm r n " + name + for dif in difs: + cmd += " dif " + dif.name + cmds.append(cmd) + + ssh.execute_commands(self.testbed, node.full_name, cmds, + time_out = None) + + def create_ipcps(self): + for node in self.nodes: + cmds = list() + for ipcp in node.ipcps: + cmds2 = list() + if ipcp.dif_bootstrapper == True: + cmd = "irm i b n " + ipcp.name + else: + cmd = "irm i c n " + ipcp.name + + if type(ipcp.dif) is mod.ShimEthDIF: + # NOTE: Here to test with fake testbed + if ipcp.ifname is None: + ipcp.ifname = "eth0" + cmd += " type shim-eth-llc if_name " + ipcp.ifname + cmd += " dif " + ipcp.dif.name + elif type(ipcp.dif) is mod.NormalDIF: + cmd += " type normal" + if ipcp.dif_bootstrapper == True: + cmd += " dif " + ipcp.dif.name + cmd2 = "irm b i " + ipcp.name + " name " + ipcp.dif.name + cmds2.append(cmd2) + cmd2 = "irm r n " + ipcp.name + for dif_b in node.dif_registrations[ipcp.dif]: + cmd2 += " dif " + dif_b.name + cmds2.append(cmd2) + cmd2 = "irm r n " + ipcp.dif.name + for dif_b in node.dif_registrations[ipcp.dif]: + cmd2 += " dif " + dif_b.name + cmds2.append(cmd2) + elif type(ipcp.dif) is mod.ShimUDPDIF: + # FIXME: Will fail, since we don't keep IPs yet + cmd += " type shim-udp" + cmd += " dif " + ipcp.dif.name + else: + print("Unsupported IPCP type") + continue + + cmds.append(cmd) + for cmd in cmds2: + cmds.append(cmd) + + ssh.execute_commands(self.testbed, node.full_name, cmds, + time_out = None) + + def enroll_ipcps(self): + for el in self.enrollments: + for e in el: + for ipcp in e['enrollee'].ipcps: + if ipcp.dif == e['dif']: + cmds = list() + cmd = "irm i e n " + ipcp.name + " dif " + e['dif'].name + cmds.append(cmd) + cmd = "irm b i " + ipcp.name + " name " + ipcp.dif.name + cmds.append(cmd) + cmd = "irm r n " + ipcp.name + for dif_b in e['enrollee'].dif_registrations[ipcp.dif]: + cmd += " dif " + dif_b.name + cmds.append(cmd) + cmd = "irm r n " + ipcp.dif.name + for dif_b in e['enrollee'].dif_registrations[ipcp.dif]: + cmd += " dif " + dif_b.name + cmds.append(cmd) + + ssh.execute_commands(self.testbed, + e['enrollee'].full_name, + cmds, time_out = None) + time.sleep(2) def run_prototype(self): - print("[Ouroboros experiment] start") - print("Creating resources...") print("Setting up Ouroboros...") self.setup_ouroboros() print("Binding names...") self.bind_names() - print("[Ouroboros experiment] end") + print("Creating IPCPs") + self.create_ipcps() + print("Enrolling IPCPs...") + self.enroll_ipcps() + print("Registering names...") + self.reg_names() + print("All done, have fun!") -- cgit v1.2.3 From f5f9fba3d6b657fd5daa31e4981c055a05c596e8 Mon Sep 17 00:00:00 2001 From: Sander Vrijders Date: Tue, 11 Apr 2017 19:12:53 +0200 Subject: ssh_support: Pass SSHConfig instead of only hostname Only the hostname was passed to the ssh_support component. This passes an object that can also hold the port number. It can be extended to take other things as well, such as a proxy. --- rumba/model.py | 14 ++++++++++---- rumba/prototypes/irati.py | 2 +- rumba/prototypes/ouroboros.py | 10 +++++----- rumba/prototypes/rlite.py | 2 +- rumba/ssh_support.py | 25 +++++++++++++------------ rumba/testbeds/emulab.py | 23 ++++++++++++----------- rumba/testbeds/jfed.py | 4 ++-- rumba/testbeds/qemu.py | 4 +++- 8 files changed, 47 insertions(+), 37 deletions(-) (limited to 'rumba') diff --git a/rumba/model.py b/rumba/model.py index faf353c..5ec36cc 100644 --- a/rumba/model.py +++ b/rumba/model.py @@ -125,6 +125,13 @@ class NormalDIF(DIF): s += "\n Component %s has policy %s" % (comp, pol) return s +# SSH Configuration +# +class SSHConfig: + def __init__(self, hostname, port=22): + self.hostname = hostname + self.port = port + # A node in the experiment # # @difs: DIFs the node will have an IPCP in @@ -150,7 +157,7 @@ class Node: if bindings is None: bindings = dict() self.bindings = bindings - self.full_name = name + self.ssh_config = SSHConfig(name) self.ipcps = [] self._validate() @@ -313,10 +320,10 @@ class Experiment: @staticmethod def from_config_file(testbed, filename='demo.conf'): """ - :type testbed: Testbed + :type testbed: Testbed :rtype: Experiment :param testbed: the testbed for the experiment - :param filename: name of the .conf file + :param filename: name of the .conf file :return: an Experiment object """ @@ -624,4 +631,3 @@ class Experiment: finally: # No matter what happens, undo the testbed (testbed-specific) self.testbed.swap_out(self) - diff --git a/rumba/prototypes/irati.py b/rumba/prototypes/irati.py index 37a6fbe..e8766da 100644 --- a/rumba/prototypes/irati.py +++ b/rumba/prototypes/irati.py @@ -38,7 +38,7 @@ class Experiment(mod.Experiment): cmds.append("sudo nohup ipcm &> ipcm.log &") for node in self.nodes: - ssh.execute_commands(self.testbed, node.full_name, + ssh.execute_commands(self.testbed, node.ssh_config, cmds, time_out=None) def run_prototype(self): diff --git a/rumba/prototypes/ouroboros.py b/rumba/prototypes/ouroboros.py index 00fdb6b..4fdacd6 100644 --- a/rumba/prototypes/ouroboros.py +++ b/rumba/prototypes/ouroboros.py @@ -37,7 +37,7 @@ class Experiment(mod.Experiment): cmds.append("sudo nohup irmd > /dev/null &") for node in self.nodes: - ssh.execute_commands(self.testbed, node.full_name, + ssh.execute_commands(self.testbed, node.ssh_config, cmds, time_out=None) return @@ -47,7 +47,7 @@ class Experiment(mod.Experiment): for name, ap in node.bindings.items(): cmds.append("irm b ap " + ap + " n " + name) - ssh.execute_commands(self.testbed, node.full_name, + ssh.execute_commands(self.testbed, node.ssh_config, cmds, time_out = None) def reg_names(self): @@ -59,7 +59,7 @@ class Experiment(mod.Experiment): cmd += " dif " + dif.name cmds.append(cmd) - ssh.execute_commands(self.testbed, node.full_name, cmds, + ssh.execute_commands(self.testbed, node.ssh_config, cmds, time_out = None) def create_ipcps(self): @@ -104,7 +104,7 @@ class Experiment(mod.Experiment): for cmd in cmds2: cmds.append(cmd) - ssh.execute_commands(self.testbed, node.full_name, cmds, + ssh.execute_commands(self.testbed, node.ssh_config, cmds, time_out = None) def enroll_ipcps(self): @@ -127,7 +127,7 @@ class Experiment(mod.Experiment): cmds.append(cmd) ssh.execute_commands(self.testbed, - e['enrollee'].full_name, + e['enrollee'].ssh_config, cmds, time_out = None) time.sleep(2) diff --git a/rumba/prototypes/rlite.py b/rumba/prototypes/rlite.py index f4ff825..ed6db88 100644 --- a/rumba/prototypes/rlite.py +++ b/rumba/prototypes/rlite.py @@ -40,7 +40,7 @@ class Experiment(mod.Experiment): cmds.append("sudo nohup rlite-uipcps -v DBG -k 0 -U -A &> uipcp.log &") for node in self.nodes: - ssh.execute_commands(self.testbed, node.full_name, + ssh.execute_commands(self.testbed, node.ssh_config, cmds, time_out=None) def run_prototype(self): diff --git a/rumba/ssh_support.py b/rumba/ssh_support.py index 13ac1c6..ca4893c 100644 --- a/rumba/ssh_support.py +++ b/rumba/ssh_support.py @@ -27,13 +27,13 @@ def get_ssh_client(): return ssh_client -def execute_commands(testbed, hostname, commands, time_out=3): +def execute_commands(testbed, ssh_config, 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 ssh_config: ssh config 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 @@ -42,7 +42,7 @@ def execute_commands(testbed, hostname, commands, time_out=3): ssh_client = get_ssh_client() try: - ssh_client.connect(hostname, 22, + ssh_client.connect(ssh_config.hostname, ssh_config.port, testbed.username, testbed.password, look_for_keys=True, timeout=time_out) for command in commands: @@ -59,13 +59,13 @@ def execute_commands(testbed, hostname, commands, time_out=3): print(str(e)) return -def execute_command(testbed, hostname, command, time_out=3): +def execute_command(testbed, ssh_config, 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 ssh_config: ssh config 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 @@ -76,7 +76,7 @@ def execute_command(testbed, hostname, command, time_out=3): ssh_client = get_ssh_client() try: - ssh_client.connect(hostname, 22, + ssh_client.connect(ssh_config.hostname, ssh_config.port, testbed.username, testbed.password, look_for_keys=True, timeout=time_out) stdin, stdout, stderr = ssh_client.exec_command(command) @@ -93,13 +93,13 @@ def execute_command(testbed, hostname, command, time_out=3): print(str(e)) return -def copy_file_to_testbed(testbed, hostname, text, file_name): +def copy_file_to_testbed(testbed, ssh_config, 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 ssh_config: ssh config of the node @param text: string to be written in file @param file_name: file name (including full path) on the host ''' @@ -140,19 +140,20 @@ def setup_vlan(testbed, node, vlan_id, int_name): ''' print("Setting up VLAN on node " + node.name) + cmds = list() 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) + cmds.append(cmd) cmd = "sudo ifconfig " + \ str(int_name) + "." + \ str(vlan_id) + " up" - execute_command(node.full_name, cmd, testbed) + cmds.append(cmd) cmd = "sudo ethtool -K " + \ str(int_name) + " rxvlan off" - execute_command(node.full_name, cmd, testbed) + cmds.append(cmd) cmd = "sudo ethtool -K " + \ str(int_name) + " txvlan off" - execute_command(node.full_name, cmd, testbed) + execute_commands(testbed, node.ssh_config, cmds) diff --git a/rumba/testbeds/emulab.py b/rumba/testbeds/emulab.py index c4dbe36..aee438e 100644 --- a/rumba/testbeds/emulab.py +++ b/rumba/testbeds/emulab.py @@ -43,6 +43,7 @@ class Testbed(mod.Testbed): self.url = url self.image = image self.ip = dict() + self.ops_ssh_config = mod.SSHConfig(self.ops_server()) def ops_server(self): ''' @@ -76,7 +77,7 @@ class Testbed(mod.Testbed): @return: list of created experiments (strings) ''' cmd = '/usr/testbed/bin/sslxmlrpc_client.py -m experiment getlist' - out = ssh.execute_command(self, self.ops_server(), cmd) + out = ssh.execute_command(self, self.ops_ssh_config, cmd) try: if project_name != None: @@ -98,7 +99,7 @@ class Testbed(mod.Testbed): self.exp_name + \ ' direction=in' - output = ssh.execute_command(self, self.ops_server(), cmd) + output = ssh.execute_command(self, self.ops_ssh_config, cmd) return output @@ -131,8 +132,8 @@ class Testbed(mod.Testbed): '" exp="' + exp_name + '" noswapin=true ' + \ 'nsfilepath="' + dest_file_name + '"' - ssh.execute_command(self, self.ops_server(), cmd, time_out=None) - ssh.execute_command(self, self.ops_server(), 'rm ' + dest_file_name) + ssh.execute_command(self, self.ops_ssh_config, cmd, time_out=None) + ssh.execute_command(self, self.ops_ssh_config, 'rm ' + dest_file_name) print("New experiment succesfully created.") def generate_ns_script(self, experiment): @@ -182,12 +183,12 @@ class Testbed(mod.Testbed): self.exp_name + \ ' -a | grep State | cut -f2,2 -d " "' - res = ssh.execute_command(self, self.ops_server(), cmd) + res = ssh.execute_command(self, self.ops_ssh_config, cmd) active = False if res == "active": active = True while active != True: - res = ssh.execute_command(self, self.ops_server(), cmd) + res = ssh.execute_command(self, self.ops_ssh_config, cmd) if res == "active": active = True print("Still waiting") @@ -201,9 +202,11 @@ class Testbed(mod.Testbed): @param experiment: the experiment ''' - node_full_name = self.full_name(experiment.nodes[0].name) + for node in experiment.nodes: + node.ssh_config.hostname = self.full_name(experiment.nodes[0].name) + cmd = 'cat /var/emulab/boot/topomap' - topomap = ssh.execute_command(self, node_full_name, cmd) + topomap = ssh.execute_command(self, experiment.nodes[0].ssh_config, cmd) # Almost as ugly as yo momma index = topomap.rfind("# lans") topo_array = topomap[:index].split('\\n')[1:-1] @@ -224,8 +227,7 @@ class Testbed(mod.Testbed): for node in experiment.nodes: cmd = 'cat /var/emulab/boot/ifmap' - node_full_name = self.full_name(node.name) - output = ssh.execute_command(self, node_full_name, cmd) + output = ssh.execute_command(self, node.ssh_config, cmd) output = re.split('\\\\n', output) for item in output: item = item.split() @@ -233,7 +235,6 @@ class Testbed(mod.Testbed): if isinstance(ipcp, mod.ShimEthIPCP): if self.ip[ipcp] == item[1]: ipcp.ifname = item[0] - node.full_name = self.full_name(node.name) def swap_in(self, experiment): self._create_experiment(experiment) diff --git a/rumba/testbeds/jfed.py b/rumba/testbeds/jfed.py index f56e5ba..0dfc904 100644 --- a/rumba/testbeds/jfed.py +++ b/rumba/testbeds/jfed.py @@ -111,8 +111,8 @@ class Testbed(mod.Testbed): for node in experiment.nodes: auth_name_r = self.auth_name.replace(".", "-") - node.full_name = node.name + "." + self.exp_name + "." + \ - auth_name_r + "." + self.auth_name + node.ssh_config.hostname = node.name + "." + self.exp_name + "." + \ + auth_name_r + "." + self.auth_name subprocess.call(["java", "-jar", self.jfed_jar, "create", "-S", \ self.proj_name, "--rspec", \ diff --git a/rumba/testbeds/qemu.py b/rumba/testbeds/qemu.py index 1c5d486..b42cf5d 100644 --- a/rumba/testbeds/qemu.py +++ b/rumba/testbeds/qemu.py @@ -165,13 +165,15 @@ class Testbed(mod.Testbed): vmid = 1 for node in experiment.nodes: - name = node.full_name + name = node.name vm = self.vms.setdefault(name, {'vm': node, 'ports': []}) fwdp = base_port + vmid fwdc = fwdp + 10000 mac = '00:0a:0a:0a:%02x:%02x' % (vmid, 99) vm['ssh'] = fwdp vm['id'] = vmid + node.ssh_config.hostname = "localhost" + node.ssh_config.port = fwdp vars_dict = {'fwdp': fwdp, 'id': vmid, 'mac': mac, 'bzimage': self.bzimage, -- cgit v1.2.3 From c5471a128e2164abe113f4b0bf1276673e6c01d0 Mon Sep 17 00:00:00 2001 From: Vincenzo Maffione Date: Wed, 12 Apr 2017 12:12:26 +0200 Subject: examples: minor changes to use "root" user and password --- examples/example.py | 3 ++- examples/two-layers.py | 3 ++- rumba/prototypes/rlite.py | 1 - rumba/ssh_support.py | 2 ++ 4 files changed, 6 insertions(+), 3 deletions(-) (limited to 'rumba') diff --git a/examples/example.py b/examples/example.py index 0d8fcd9..54ecd37 100755 --- a/examples/example.py +++ b/examples/example.py @@ -31,7 +31,8 @@ b = Node("b", dif_registrations = {n1 : [e1]}) tb = qemu.Testbed(exp_name = "example1", - username = "vmaffione", + username = "root", + password = "root", bzimage = '/home/vmaffione/git/rlite/demo/buildroot/bzImage', initramfs = '/home/vmaffione/git/rlite/demo/buildroot/rootfs.cpio') diff --git a/examples/two-layers.py b/examples/two-layers.py index 687c99f..9032588 100755 --- a/examples/two-layers.py +++ b/examples/two-layers.py @@ -43,7 +43,8 @@ d = Node("d", dif_registrations = {n3: [n2], n2 : [e3]}) tb = qemu.Testbed(exp_name = "twolayers", - username = "vmaffione", + username = "root", + password = "root", bzimage = '/home/vmaffione/git/rlite/demo/buildroot/bzImage', initramfs = '/home/vmaffione/git/rlite/demo/buildroot/rootfs.cpio') diff --git a/rumba/prototypes/rlite.py b/rumba/prototypes/rlite.py index ed6db88..d8bfc1e 100644 --- a/rumba/prototypes/rlite.py +++ b/rumba/prototypes/rlite.py @@ -47,5 +47,4 @@ class Experiment(mod.Experiment): print("[RLITE experiment] start") print("Setting up rlite on the nodes...") self.setup() - time.sleep(20) print("[RLITE experiment] end") diff --git a/rumba/ssh_support.py b/rumba/ssh_support.py index ca4893c..137c58b 100644 --- a/rumba/ssh_support.py +++ b/rumba/ssh_support.py @@ -42,6 +42,8 @@ def execute_commands(testbed, ssh_config, commands, time_out=3): ssh_client = get_ssh_client() try: + #print("Connecting to %s@%s:%s (pwd=%s)" % (testbed.username, + # ssh_config.hostname, ssh_config.port, testbed.password)) ssh_client.connect(ssh_config.hostname, ssh_config.port, testbed.username, testbed.password, look_for_keys=True, timeout=time_out) -- cgit v1.2.3 From 0b0eca7d993ac2f6e3a676c5817e69df3014993e Mon Sep 17 00:00:00 2001 From: Vincenzo Maffione Date: Wed, 12 Apr 2017 12:33:47 +0200 Subject: testbed: qemu: minor changes to allow last VM batch to boot --- rumba/testbeds/qemu.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'rumba') diff --git a/rumba/testbeds/qemu.py b/rumba/testbeds/qemu.py index b42cf5d..3573554 100644 --- a/rumba/testbeds/qemu.py +++ b/rumba/testbeds/qemu.py @@ -157,9 +157,9 @@ class Testbed(mod.Testbed): boot_batch_size = max(1, multiprocessing.cpu_count() // 2) booting_budget = boot_batch_size - boot_backoff = 12 + boot_backoff = 12 # in seconds base_port = 2222 - vm_memory = 164 + vm_memory = 164 # in megabytes vm_frontend = 'virtio-net-pci' vmid = 1 @@ -220,7 +220,7 @@ class Testbed(mod.Testbed): booting_budget -= 1 if booting_budget <= 0: - print('Sleeping for %s seconds to give the machines time to boot up.' % boot_backoff) + print('Sleeping %s secs waiting for the VMs to boot' % boot_backoff) time.sleep(boot_backoff) booting_budget = boot_batch_size @@ -231,6 +231,14 @@ class Testbed(mod.Testbed): vmid += 1 + # Wait for the last batch of VMs to start + if booting_budget < boot_backoff: + tsleep = boot_backoff * (boot_batch_size - booting_budget) / \ + boot_batch_size + print('Sleeping %s secs waiting for the last VMs to boot' % tsleep) + time.sleep(tsleep) + + def swap_out(self, experiment): """ :rtype str -- cgit v1.2.3 From 27515c90d65f608969dee8c4b32df6a44e45c41b Mon Sep 17 00:00:00 2001 From: Vincenzo Maffione Date: Wed, 12 Apr 2017 12:43:29 +0200 Subject: prototypes: rlite: only modprobe modules for the moment being --- rumba/prototypes/rlite.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'rumba') diff --git a/rumba/prototypes/rlite.py b/rumba/prototypes/rlite.py index d8bfc1e..0ff680d 100644 --- a/rumba/prototypes/rlite.py +++ b/rumba/prototypes/rlite.py @@ -30,14 +30,20 @@ class Experiment(mod.Experiment): def setup(self): cmds = list() - cmds.append("sudo apt-get update") - cmds.append("sudo apt-get install g++ gcc cmake " - "linux-headers-$(uname -r) " - "protobuf-compiler libprotobuf-dev git --yes") - cmds.append("sudo rm -rf ~/rlite") - cmds.append("cd ~; git clone https://github.com/vmaffione/rlite") - cmds.append("cd ~/rlite && ./configure && make && sudo make install") - cmds.append("sudo nohup rlite-uipcps -v DBG -k 0 -U -A &> uipcp.log &") + if False: # ubuntu + cmds.append("apt-get update") + cmds.append("apt-get install g++ gcc cmake " + "linux-headers-$(uname -r) " + "protobuf-compiler libprotobuf-dev git --yes") + cmds.append("rm -rf ~/rlite") + cmds.append("cd ~; git clone https://github.com/vmaffione/rlite") + cmds.append("cd ~/rlite && ./configure && make && sudo make install") + cmds.append("modprobe rlite") + cmds.append("modprobe rlite-normal") + cmds.append("modprobe rlite-shim-eth") + cmds.append("modprobe rlite-shim-udp4") + cmds.append("modprobe rlite-shim-loopback") + cmds.append("nohup rlite-uipcps -v DBG -k 0 -U -A &> uipcp.log &") for node in self.nodes: ssh.execute_commands(self.testbed, node.ssh_config, -- cgit v1.2.3 From 443ed561660bd5f37d85042da841b2472b97f129 Mon Sep 17 00:00:00 2001 From: Vincenzo Maffione Date: Wed, 12 Apr 2017 12:46:09 +0200 Subject: ssh_support: use ssh_config in copy_file_to_testbed --- rumba/ssh_support.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'rumba') diff --git a/rumba/ssh_support.py b/rumba/ssh_support.py index 137c58b..ad32d13 100644 --- a/rumba/ssh_support.py +++ b/rumba/ssh_support.py @@ -108,7 +108,7 @@ def copy_file_to_testbed(testbed, ssh_config, text, file_name): ssh_client = get_ssh_client() try: - ssh_client.connect(hostname, 22, + ssh_client.connect(ssh_config.hostname, ssh_config.port, testbed.username, testbed.password, look_for_keys=True) -- cgit v1.2.3