def _unpack_play_application(self, extension): service_data = self.service_data microservice_path = self.context.application.workspace + service_data[ "location"] + "/target/" force_pushdir(microservice_path) microservice_filename = service_data["binary"]["artifact"] + extension unpacked_dir = SmPlayService.unzipped_dir_path( self.context, service_data["location"]) remove_folder_if_exists(unpacked_dir) os.makedirs(unpacked_dir) if extension == ".zip": self._unzip_play_application(microservice_filename, unpacked_dir) elif extension == ".tgz": self._untar_play_application(microservice_filename, unpacked_dir) else: print "ERROR: unsupported atrifact extension: " + extension folder = [ name for name in os.listdir(unpacked_dir) if os.path.isdir(os.path.join(unpacked_dir, name)) ][0] target_dir = unpacked_dir + "/" + service_data["binary"][ "destinationSubdir"] shutil.move(unpacked_dir + "/" + folder, target_dir) return target_dir
def start_from_sources(self): sbt_extra_params = self.sbt_extra_params() service_data = self.context.service_data(self.service_name) microservice_path = self.context.application.workspace + service_data[ "location"] force_pushdir(microservice_path) env_copy = os.environ.copy() env_copy["SBT_EXTRA_PARAMS"] = " ".join( sbt_extra_params) # TODO: not needed i think anymore... makedirs_if_not_exists("logs") with open("logs/stdout.txt", "wb") as out, open("logs/stderr.txt", "wb") as err: process = Popen(self.get_start_command("SOURCE"), env=env_copy, stdout=out, stderr=err, stdin=subprocess.PIPE) process.stdin.close() if process.returncode == 1: print b.fail + "ERROR: could not start '" + self.service_name + "' " + b.endc return process.pid # Note: This is the parent pid
def _start_from_sources(self): service_data = self.context.service_data(self.service_name) assets_path = self.context.application.workspace + service_data["location"] cmd_with_params = self.service_data["sources"]["cmd"] force_pushdir(assets_path) run_from_file = open("RUNNING_FROM", 'w') run_from_file.write(self.run_from) run_from_file.close() makedirs_if_not_exists("logs") seconds_remaining = SmPythonServiceStarter.PROCESS_STARTUP_TIMEOUT_SECONDS with open("logs/stdout.txt", "wb") as out, open("logs/stderr.txt", "wb") as err: subprocess.Popen(cmd_with_params, shell=False, env=os.environ.copy(), stdout=out, stderr=err, close_fds=True) while seconds_remaining > 0 and not len(SmProcess.processes_matching("grunt")) > 0: time.sleep(1) seconds_remaining -= 1 if seconds_remaining < 10 or seconds_remaining % 5 == 0: self.log("Waiting for Assets service to start: %s second%s before timeout" % ( seconds_remaining, "s" if seconds_remaining > 1 else "")) if len(SmProcess.processes_matching("grunt")) == 1: process = SmProcess.processes_matching("grunt") for i, v in enumerate(process): return v.pid
def start_from_binary(self): microservice_target_path = self.context.get_microservice_target_path(self.service_name) force_chdir(microservice_target_path) binaryConfig = self.service_data["binary"] if not self.context.offline: artifactRepo = SmArtifactRepoFactory.get_repository(self.context, self.service_name, binaryConfig) if not self.version: self.version = artifactRepo.find_latest_version(self.run_from, binaryConfig["artifact"], binaryConfig["groupId"]) artifactRepo.download_jar_if_necessary(self.run_from, self.version) unzip_dir = self._unpack_play_application(SmArtifactRepoFactory.get_play_app_extension(binaryConfig)) parent, _ = os.path.split(unzip_dir) force_pushdir(parent) if "frontend" in self.service_data and self.service_data["frontend"]: assets_versions = self._get_assets_version(unzip_dir) self.context.assets_versions_to_start(assets_versions) cmd_with_params = self.get_start_command("BINARY") if os.path.exists(cmd_with_params[0]): os.chmod(cmd_with_params[0], stat.S_IRWXU) else: print b.fail + "ERROR: unable to chmod on non existent file '" + parent + cmd_with_params[0] + "'" + b.endc makedirs_if_not_exists("logs") print(cmd_with_params) with open("logs/stdout.txt", "wb") as out, open("logs/stderr.txt", "wb") as err: popen_output = Popen(cmd_with_params, env=os.environ.copy(), stdout=out, stderr=err, close_fds=True) if popen_output.returncode == 1: print b.fail + "ERROR: could not start '" + self.service_name + "' " + b.endc return popen_output.pid
def start_from_binary(self): microservice_target_path = self.context.get_microservice_target_path( self.service_name) force_chdir(microservice_target_path) binaryConfig = self.service_data["binary"] if not self.context.offline: artifactRepo = SmArtifactRepoFactory.get_repository( self.context, self.service_name, binaryConfig) if not self.version: self.version = artifactRepo.find_latest_version( self.run_from, binaryConfig["artifact"], binaryConfig["groupId"]) artifactRepo.download_jar_if_necessary(self.run_from, self.version) unzip_dir = self._unpack_play_application( SmArtifactRepoFactory.get_play_app_extension(binaryConfig)) parent, _ = os.path.split(unzip_dir) force_pushdir(parent) if "frontend" in self.service_data and self.service_data["frontend"]: assets_versions = self._get_assets_version(unzip_dir) self.context.assets_versions_to_start(assets_versions) cmd_with_params = self.get_start_command("BINARY") if os.path.exists(cmd_with_params[0]): os.chmod(cmd_with_params[0], stat.S_IRWXU) else: print b.fail + "ERROR: unable to chmod on non existent file '" + parent + cmd_with_params[ 0] + "'" + b.endc makedirs_if_not_exists("logs") print(cmd_with_params) with open("logs/stdout.txt", "wb") as out, open("logs/stderr.txt", "wb") as err: popen_output = Popen(cmd_with_params, env=os.environ.copy(), stdout=out, stderr=err, close_fds=True) if popen_output.returncode == 1: print b.fail + "ERROR: could not start '" + self.service_name + "' " + b.endc return popen_output.pid
def _unzip_assets(self, versions): service_data = self.service_data assets_zip_path = self.context.get_microservice_target_path(self.service_name) force_pushdir(assets_zip_path) unzipped_dir = "assets" if not os.path.exists(unzipped_dir): os.makedirs(unzipped_dir) for version in versions: zip_filename = service_data["binary"]["artifact"] + "-" + version + ".zip" extracted_dir = version if not os.path.exists(assets_zip_path + "/assets/" + extracted_dir): os.makedirs(extracted_dir) zipfile.ZipFile(zip_filename, 'r').extractall(extracted_dir) shutil.move(extracted_dir, unzipped_dir) target_dir = unzipped_dir return target_dir
def _unpack_play_application(self, extension): service_data = self.service_data microservice_path = self.context.application.workspace + service_data["location"] + "/target/" force_pushdir(microservice_path) microservice_filename = service_data["binary"]["artifact"] + extension unpacked_dir = SmPlayService.unzipped_dir_path(self.context, service_data["location"]) remove_folder_if_exists(unpacked_dir) os.makedirs(unpacked_dir) if extension == ".zip": self._unzip_play_application(microservice_filename, unpacked_dir) elif extension == ".tgz": self._untar_play_application(microservice_filename, unpacked_dir) else: print "ERROR: unsupported atrifact extension: " + extension folder = [ name for name in os.listdir(unpacked_dir) if os.path.isdir(os.path.join(unpacked_dir, name)) ][0] target_dir = unpacked_dir + "/" + service_data["binary"]["destinationSubdir"] shutil.move(unpacked_dir + "/" + folder, target_dir) return target_dir
def start_from_sources(self): sbt_extra_params = self.sbt_extra_params() service_data = self.context.service_data(self.service_name) microservice_path = self.context.application.workspace + service_data["location"] curr_dir = force_pushdir(microservice_path) env_copy = os.environ.copy() env_copy["SBT_EXTRA_PARAMS"] = " ".join(sbt_extra_params) # TODO: not needed i think anymore... makedirs_if_not_exists("logs") with open("logs/stdout.txt", "wb") as out, open("logs/stderr.txt", "wb") as err: process = Popen(self.get_start_command("SOURCE"), env=env_copy, stdout=out, stderr=err, stdin=subprocess.PIPE) process.stdin.close() if process.returncode == 1: print b.fail + "ERROR: could not start '" + self.service_name + "' " + b.endc return process.pid # Note: This is the parent pid