Merge remote-tracking branch 'telmich/master'
This commit is contained in:
		
				commit
				
					
						6ec4cefe09
					
				
			
		
					 2 changed files with 33 additions and 2 deletions
				
			
		| 
						 | 
					@ -111,6 +111,10 @@ class Remote(object):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        assert isinstance(command, (list, tuple)), "list or tuple argument expected, got: %s" % command
 | 
					        assert isinstance(command, (list, tuple)), "list or tuple argument expected, got: %s" % command
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # export target_host for use in __remote_{exec,copy} scripts
 | 
				
			||||||
 | 
					        os_environ = os.environ.copy()
 | 
				
			||||||
 | 
					        os_environ['__target_host'] = self.target_host
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # can't pass environment to remote side, so prepend command with
 | 
					        # can't pass environment to remote side, so prepend command with
 | 
				
			||||||
        # variable declarations
 | 
					        # variable declarations
 | 
				
			||||||
        if env:
 | 
					        if env:
 | 
				
			||||||
| 
						 | 
					@ -122,7 +126,7 @@ class Remote(object):
 | 
				
			||||||
        self.log.debug("Remote run: %s", command)
 | 
					        self.log.debug("Remote run: %s", command)
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            if return_output:
 | 
					            if return_output:
 | 
				
			||||||
                return subprocess.check_output(command).decode()
 | 
					                return subprocess.check_output(command, env=os_environ).decode()
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                subprocess.check_call(command)
 | 
					                subprocess.check_call(command)
 | 
				
			||||||
        except subprocess.CalledProcessError:
 | 
					        except subprocess.CalledProcessError:
 | 
				
			||||||
| 
						 | 
					@ -140,6 +144,10 @@ class Remote(object):
 | 
				
			||||||
        command = self._exec.split()
 | 
					        command = self._exec.split()
 | 
				
			||||||
        command.append(self.target_host)
 | 
					        command.append(self.target_host)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # export target_host for use in __remote_{exec,copy} scripts
 | 
				
			||||||
 | 
					        os_environ = os.environ.copy()
 | 
				
			||||||
 | 
					        os_environ['__target_host'] = self.target_host
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # can't pass environment to remote side, so prepend command with
 | 
					        # can't pass environment to remote side, so prepend command with
 | 
				
			||||||
        # variable declarations
 | 
					        # variable declarations
 | 
				
			||||||
        if env:
 | 
					        if env:
 | 
				
			||||||
| 
						 | 
					@ -154,7 +162,7 @@ class Remote(object):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            if return_output:
 | 
					            if return_output:
 | 
				
			||||||
                return subprocess.check_output(command).decode()
 | 
					                return subprocess.check_output(command, env=os_environ).decode()
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                subprocess.check_call(command)
 | 
					                subprocess.check_call(command)
 | 
				
			||||||
        except subprocess.CalledProcessError as error:
 | 
					        except subprocess.CalledProcessError as error:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -117,3 +117,26 @@ class RemoteTestCase(test.CdistTestCase):
 | 
				
			||||||
        self.remote.create_directories()
 | 
					        self.remote.create_directories()
 | 
				
			||||||
        self.assertTrue(os.path.isdir(self.remote.base_path))
 | 
					        self.assertTrue(os.path.isdir(self.remote.base_path))
 | 
				
			||||||
        self.assertTrue(os.path.isdir(self.remote.conf_path))
 | 
					        self.assertTrue(os.path.isdir(self.remote.conf_path))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_run_target_host_in_env(self):
 | 
				
			||||||
 | 
					        handle, remote_exec_path = self.mkstemp(dir=self.temp_dir)
 | 
				
			||||||
 | 
					        with os.fdopen(handle, 'w') as fd:
 | 
				
			||||||
 | 
					            fd.writelines(["#!/bin/sh\n", "echo $__target_host"])
 | 
				
			||||||
 | 
					        os.chmod(remote_exec_path, 0o755)
 | 
				
			||||||
 | 
					        remote_exec = remote_exec_path
 | 
				
			||||||
 | 
					        remote_copy = "echo"
 | 
				
			||||||
 | 
					        r = remote.Remote(self.target_host, self.base_path, remote_exec, remote_copy)
 | 
				
			||||||
 | 
					        self.assertEqual(r.run('/bin/true', return_output=True), "%s\n" % self.target_host)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_run_script_target_host_in_env(self):
 | 
				
			||||||
 | 
					        handle, remote_exec_path = self.mkstemp(dir=self.temp_dir)
 | 
				
			||||||
 | 
					        with os.fdopen(handle, 'w') as fd:
 | 
				
			||||||
 | 
					            fd.writelines(["#!/bin/sh\n", "echo $__target_host"])
 | 
				
			||||||
 | 
					        os.chmod(remote_exec_path, 0o755)
 | 
				
			||||||
 | 
					        remote_exec = remote_exec_path
 | 
				
			||||||
 | 
					        remote_copy = "echo"
 | 
				
			||||||
 | 
					        r = remote.Remote(self.target_host, self.base_path, remote_exec, remote_copy)
 | 
				
			||||||
 | 
					        handle, script = self.mkstemp(dir=self.temp_dir)
 | 
				
			||||||
 | 
					        with os.fdopen(handle, "w") as fd:
 | 
				
			||||||
 | 
					            fd.writelines(["#!/bin/sh\n", "/bin/true"])
 | 
				
			||||||
 | 
					        self.assertEqual(r.run_script(script, return_output=True), "%s\n" % self.target_host)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue