forked from ungleich-public/cdist
		
	prepend variables to remote commands
Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
This commit is contained in:
		
					parent
					
						
							
								0a1418f4d3
							
						
					
				
			
			
				commit
				
					
						d47039e91e
					
				
			
		
					 1 changed files with 17 additions and 2 deletions
				
			
		| 
						 | 
					@ -102,9 +102,18 @@ 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
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        # can't pass environment to remote side, so prepend command with
 | 
				
			||||||
 | 
					        # variable declarations
 | 
				
			||||||
 | 
					        if env:
 | 
				
			||||||
 | 
					            cmd = ["%s=%s" % item for item in env.items()]
 | 
				
			||||||
 | 
					            cmd.extend(command)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            cmd = command
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.log.debug("Remote run: %s", command)
 | 
					        self.log.debug("Remote run: %s", command)
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            return subprocess.check_output(command, env=env).decode()
 | 
					            return subprocess.check_output(cmd).decode()
 | 
				
			||||||
        except subprocess.CalledProcessError:
 | 
					        except subprocess.CalledProcessError:
 | 
				
			||||||
            raise cdist.Error("Command failed: " + " ".join(command))
 | 
					            raise cdist.Error("Command failed: " + " ".join(command))
 | 
				
			||||||
        except OSError as error:
 | 
					        except OSError as error:
 | 
				
			||||||
| 
						 | 
					@ -117,6 +126,12 @@ class Remote(object):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        command = self._exec.split()
 | 
					        command = self._exec.split()
 | 
				
			||||||
        command.append(self.target_host)
 | 
					        command.append(self.target_host)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # can't pass environment to remote side, so prepend command with
 | 
				
			||||||
 | 
					        # variable declarations
 | 
				
			||||||
 | 
					        if env:
 | 
				
			||||||
 | 
					            command.extend(["%s=%s" % item for item in env.items()])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        command.extend(["/bin/sh", "-e"])
 | 
					        command.extend(["/bin/sh", "-e"])
 | 
				
			||||||
        command.append(script)
 | 
					        command.append(script)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -125,7 +140,7 @@ class Remote(object):
 | 
				
			||||||
            self.log.debug("Remote run script env: %s", env)
 | 
					            self.log.debug("Remote run script env: %s", env)
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            return subprocess.check_output(command, env=env).decode()
 | 
					            return subprocess.check_output(command).decode()
 | 
				
			||||||
        except subprocess.CalledProcessError as error:
 | 
					        except subprocess.CalledProcessError as error:
 | 
				
			||||||
            script_content = self.run(["cat", script])
 | 
					            script_content = self.run(["cat", script])
 | 
				
			||||||
            self.log.error("Code that raised the error:\n%s", script_content)
 | 
					            self.log.error("Code that raised the error:\n%s", script_content)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue