diff --git a/lago/plugins/vm.py b/lago/plugins/vm.py index be498308..527d58b5 100644 --- a/lago/plugins/vm.py +++ b/lago/plugins/vm.py @@ -241,9 +241,7 @@ def extract_paths(self, paths, ignore_nopath): path was found on the VM, and ``ignore_nopath`` is True. :exc:`~lago.plugins.vm.ExtractPathError`: on all other failures. """ - if self.vm.alive() and self.vm.ssh_reachable( - tries=5, propagate_fail=False - ): + if self.vm.ssh_reachable(tries=5, propagate_fail=False): self._extract_paths_scp(paths=paths, ignore_nopath=ignore_nopath) else: raise ExtractPathError( @@ -558,7 +556,7 @@ def ssh_reachable(self, tries=None, propagate_fail=True): """ try: - ssh.get_ssh_client( + self._ssh_client = ssh.get_ssh_client( ip_addr=self.ip(), host_name=self.name(), ssh_tries=tries, @@ -686,19 +684,23 @@ def _normalize_spec(cls, spec): @contextlib.contextmanager def _scp(self, propagate_fail=True): - client = ssh.get_ssh_client( - propagate_fail=propagate_fail, - ip_addr=self.ip(), - host_name=self.name(), - ssh_key=self.virt_env.prefix.paths.ssh_id_rsa(), - username=self._spec.get('ssh-user'), - password=self._spec.get('ssh-password'), - ) + if self._ssh_client is not None: + client = self._ssh_client + else: + client = ssh.get_ssh_client( + propagate_fail=propagate_fail, + ip_addr=self.ip(), + host_name=self.name(), + ssh_key=self.virt_env.prefix.paths.ssh_id_rsa(), + username=self._spec.get('ssh-user'), + password=self._spec.get('ssh-password'), + ) scp = SCPClient(client.get_transport()) try: yield scp finally: client.close() + self._ssh_client = None def _detect_service_provider(self): LOGGER.debug('Detecting service provider for %s', self.name())