Fix remote exec bug and bug with save_cache and ssh mux socket file.
This commit is contained in:
		
					parent
					
						
							
								c790a2e906
							
						
					
				
			
			
				commit
				
					
						8191ea91e1
					
				
			
		
					 3 changed files with 14 additions and 18 deletions
				
			
		|  | @ -146,10 +146,9 @@ class Remote(object): | ||||||
|         # remotely in e.g. csh and setting up CDIST_REMOTE_SHELL to e.g. |         # remotely in e.g. csh and setting up CDIST_REMOTE_SHELL to e.g. | ||||||
|         # /bin/csh will execute this script in the right way. |         # /bin/csh will execute this script in the right way. | ||||||
|         if env: |         if env: | ||||||
|             cmd.append("/bin/sh") |  | ||||||
|             cmd.append("-c") |  | ||||||
|             remote_env = [" export %s=%s;" % item for item in env.items()] |             remote_env = [" export %s=%s;" % item for item in env.items()] | ||||||
|             string_cmd = " ".join(remote_env) + " ".join(command) |             string_cmd = ("/bin/sh -c '" + " ".join(remote_env) | ||||||
|  |                 + " ".join(command) + "'") | ||||||
|             cmd.append(string_cmd) |             cmd.append(string_cmd) | ||||||
|         else: |         else: | ||||||
|             cmd.extend(command) |             cmd.extend(command) | ||||||
|  |  | ||||||
|  | @ -155,9 +155,16 @@ class RemoteTestCase(test.CdistTestCase): | ||||||
|         r = remote.Remote(self.target_host, base_path=self.base_path, remote_exec=remote_exec, remote_copy=remote_copy) |         r = remote.Remote(self.target_host, base_path=self.base_path, remote_exec=remote_exec, remote_copy=remote_copy) | ||||||
|         output = r.run_script(script, return_output=True) |         output = r.run_script(script, return_output=True) | ||||||
|         self.assertEqual(output, "no_env\n") |         self.assertEqual(output, "no_env\n") | ||||||
|  | 
 | ||||||
|  |         handle, remote_exec_path = self.mkstemp(dir=self.temp_dir) | ||||||
|  |         with os.fdopen(handle, 'w') as fd: | ||||||
|  |             fd.writelines(["#!/bin/sh\n", 'shift; cmd=$1; eval $cmd\n']) | ||||||
|  |         os.chmod(remote_exec_path, 0o755) | ||||||
|  |         remote_exec = remote_exec_path | ||||||
|         env = { |         env = { | ||||||
|             '__object': 'test_object', |             '__object': 'test_object', | ||||||
|         } |         } | ||||||
|  |         r = remote.Remote(self.target_host, base_path=self.base_path, remote_exec=remote_exec, remote_copy=remote_copy) | ||||||
|         output = r.run_script(script, env=env, return_output=True) |         output = r.run_script(script, env=env, return_output=True) | ||||||
|         self.assertEqual(output, "test_object\n") |         self.assertEqual(output, "test_object\n") | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -26,7 +26,8 @@ def inspect_ssh_mux_opts(control_path_dir="~/.ssh/"): | ||||||
|     import subprocess |     import subprocess | ||||||
|     import os |     import os | ||||||
| 
 | 
 | ||||||
|     control_path = os.path.join(control_path_dir, "cdist.master-%l-%r@%h:%p") |     control_path = os.path.join(control_path_dir, | ||||||
|  |             "cdist.socket.master-%l-%r@%h:%p") | ||||||
|     wanted_mux_opts = { |     wanted_mux_opts = { | ||||||
|         "ControlPath": control_path, |         "ControlPath": control_path, | ||||||
|         "ControlMaster": "auto", |         "ControlMaster": "auto", | ||||||
|  | @ -133,22 +134,11 @@ def commandline(): | ||||||
|     args_dict = vars(args) |     args_dict = vars(args) | ||||||
|     # if command with remote_copy and remote_exec params |     # if command with remote_copy and remote_exec params | ||||||
|     if 'remote_copy' in args_dict and 'remote_exec' in args_dict: |     if 'remote_copy' in args_dict and 'remote_exec' in args_dict: | ||||||
|         # if out_path is not set then create temp dir here so |  | ||||||
|         # Local uses it for base_path and ssh mux socket is |  | ||||||
|         # created in it. |  | ||||||
|         if args_dict['out_path'] is None: |  | ||||||
|             args.out_path = tempfile.mkdtemp() |  | ||||||
|             is_temp_dir = True |  | ||||||
|         else: |  | ||||||
|             is_temp_dir = False |  | ||||||
|         # if remote-exec and/or remote-copy args are None then user |         # if remote-exec and/or remote-copy args are None then user | ||||||
|         # didn't specify command line options nor env vars: |         # didn't specify command line options nor env vars: | ||||||
|         # inspect multiplexing options for default cdist.REMOTE_COPY/EXEC |         # inspect multiplexing options for default cdist.REMOTE_COPY/EXEC | ||||||
|         if args_dict['remote_copy'] is None or args_dict['remote_exec'] is None: |         if args_dict['remote_copy'] is None or args_dict['remote_exec'] is None: | ||||||
|             control_path_dir = args.out_path |             control_path_dir = tempfile.mkdtemp() | ||||||
|             # only rmtree if it is temp directory; |  | ||||||
|             # if user specifies out_path do not remove it |  | ||||||
|             if is_temp_dir: |  | ||||||
|             import atexit |             import atexit | ||||||
|             atexit.register(lambda: shutil.rmtree(control_path_dir)) |             atexit.register(lambda: shutil.rmtree(control_path_dir)) | ||||||
|             mux_opts = inspect_ssh_mux_opts(control_path_dir) |             mux_opts = inspect_ssh_mux_opts(control_path_dir) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue