class UnixBuildServer(object): def __init__(self, server): self.sshOpts = SshConnectionOptions(server['host'], username=server['username'],password=server['password']) self.host = OverthereHost(self.sshOpts) self.session = OverthereHostSession(self.host) self.base_working_directory = server['BaseWorkingDirectory'] self.working_directory = self.base_working_directory self.create_working_directory(self.base_working_directory) workDir = self.session.remote_file(self.base_working_directory) self.session.get_conn().setWorkingDirectory(workDir) @staticmethod def createServer(server): return UnixBuildServer(server) def set_working_directory(self, relative_directory_path): self.working_directory = "%s/%s" % (self.base_working_directory, relative_directory_path) self.create_working_directory(self.working_directory) workDir = self.session.remote_file(self.working_directory) self.session.get_conn().setWorkingDirectory(workDir) # main interface # session related methods def close_session(selfs): self.session.close() def create_working_directory(self, dir_full_path): response = self.session.execute("/bin/mkdir -p %s" % (dir_full_path)) # File Handeling def read_file_in_workspace(self, file_name): print "not yet implemented" def write_file_in_workspace(self, file_name, content): print "not yet implemented" def create_directory(self, directory_name): self.execute_command(["/bin/mkdir -p %s" % (directory_name)]) # command Execution def filename_generator(self, size=9, chars=string.ascii_uppercase + string.digits): return ''.join(random.choice(chars) for _ in range(size)) def get_tmp_script_filename(self): return "%s.sh" % self.filename_generator() def execute_command(self, command, environment_variables=None): # get a BashScriptBuilder object command_object = BashScriptBuilder() # copy in the environment variables if environment_variables is not None: for key, value in environment_variables.items(): command_object.set_env_var(key, value) # add the rest of the possible multiline command command_object.add_lines(command) executable_command = command_object.build() print "executing command: %s " % (executable_command) tmp_script_filename = self.get_tmp_script_filename() self.session.upload_text_content_to_work_dir(command_object.build(), tmp_script_filename, executable=True) # response = self.session.execute("%s/%s" % (self.working_directory, tmp_script_filename), check_success=False, suppress_streaming_output=False) if response.rc != 0: print response.stderr print response.stdout print "unable to execute command %s" % (command) raise Exception('unable to execute command') else: print "Response:", str(response.stdout) return response