A few minor bugfixes.
This commit is contained in:
@@ -34,6 +34,9 @@ class RunnerFile:
|
|||||||
|
|
||||||
self.root_owned = root_owned
|
self.root_owned = root_owned
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return f"<RunnerFile: {self.basename}>"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def basename(self) -> str:
|
def basename(self) -> str:
|
||||||
return os.path.basename(self.destination_path)
|
return os.path.basename(self.destination_path)
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ echo "Ending now.."
|
|||||||
job_setup_script = """#!/bin/bash
|
job_setup_script = """#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
PACKETSERVER_JOB_DIR="/home/${PACKETSERVER_USER}/.packetserver/${PACKETSERVER_JOBID}"
|
PACKETSERVER_JOB_DIR="/home/${PACKETSERVER_USER}/.packetserver/${PACKETSERVER_JOBID}"
|
||||||
mkdir -pv "${PACKETSERVER_JOB_DIR}/files"
|
|
||||||
mkdir -pv "${PACKETSERVER_JOB_DIR}/artifacts"
|
mkdir -pv "${PACKETSERVER_JOB_DIR}/artifacts"
|
||||||
chown ${PACKETSERVER_USER} "/home/${PACKETSERVER_USER}"
|
chown ${PACKETSERVER_USER} "/home/${PACKETSERVER_USER}"
|
||||||
chown -R ${PACKETSERVER_USER} "${PACKETSERVER_JOB_DIR}"
|
chown -R ${PACKETSERVER_USER} "${PACKETSERVER_JOB_DIR}"
|
||||||
|
|||||||
@@ -102,6 +102,14 @@ class PodmanRunner(Runner):
|
|||||||
def output(self) -> bytes:
|
def output(self) -> bytes:
|
||||||
return self._result[1][0]
|
return self._result[1][0]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def str_output(self) -> str:
|
||||||
|
try:
|
||||||
|
output = self.output.decode()
|
||||||
|
except:
|
||||||
|
output = str(self.output)
|
||||||
|
return output
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def errors(self) -> str:
|
def errors(self) -> str:
|
||||||
return self._result[1][1].decode()
|
return self._result[1][1].decode()
|
||||||
@@ -117,18 +125,25 @@ class PodmanRunner(Runner):
|
|||||||
logging.debug(f"Running job setup script for {self.job_id} runner")
|
logging.debug(f"Running job setup script for {self.job_id} runner")
|
||||||
setup_res = self.container.exec_run("bash /root/scripts/job_setup_script.sh",
|
setup_res = self.container.exec_run("bash /root/scripts/job_setup_script.sh",
|
||||||
environment=self.env, user="root", tty=True)
|
environment=self.env, user="root", tty=True)
|
||||||
logging.debug(f"{self.job_id} Setup script:\n{str(setup_res[1])}")
|
logging.debug(f"Job {self.job_id} setup script:\n{str(setup_res[1])}")
|
||||||
if setup_res[0] != 0:
|
if setup_res[0] != 0:
|
||||||
self.status = RunnerStatus.FAILED
|
self.status = RunnerStatus.FAILED
|
||||||
raise RuntimeError(f"Couldn't run setup scripts for {self.job}:\n{setup_res[1]}")
|
raise RuntimeError(f"Couldn't run setup scripts for {self.job_id}:\n{setup_res[1]}")
|
||||||
# put files where they need to be
|
# put files where they need to be
|
||||||
for f in self.files:
|
for f in self.files:
|
||||||
logging.debug(f"Adding file {f}")
|
logging.debug(f"Adding file {f} for job {self.job_id}")
|
||||||
if not f.isabs:
|
if not f.isabs:
|
||||||
f.destination_path = os.path.join(self.job_path, f.destination_path)
|
dest = os.path.join(self.job_path, f.destination_path)
|
||||||
self.container.put_archive(f.dirname, f.tar_data())
|
dirn = os.path.dirname(dest)
|
||||||
|
else:
|
||||||
|
dest = f.destination_path
|
||||||
|
dirn = f.dirname
|
||||||
|
if self.container.put_archive(dirn, f.tar_data()):
|
||||||
|
logging.debug(f"Placed file {dest} for job {self.job_id}")
|
||||||
|
else:
|
||||||
|
logging.warning(f"Failed to place file {dest} for job {self.job_id}!!")
|
||||||
if not f.root_owned:
|
if not f.root_owned:
|
||||||
self.container.exec_run(f"chown -R {self.username} {f.destination_path}")
|
self.container.exec_run(f"chown -R {self.username} {dest}")
|
||||||
|
|
||||||
# start thread
|
# start thread
|
||||||
logging.debug(f"Starting runner thread for {self.job_id}")
|
logging.debug(f"Starting runner thread for {self.job_id}")
|
||||||
@@ -184,7 +199,6 @@ class PodmanOrchestrator(Orchestrator):
|
|||||||
|
|
||||||
def podman_container_env(self, container_name: str) -> dict:
|
def podman_container_env(self, container_name: str) -> dict:
|
||||||
cli = self.client
|
cli = self.client
|
||||||
logging.debug(f"Attempting to remove container named {container_name}")
|
|
||||||
try:
|
try:
|
||||||
con = cli.containers.get(container_name)
|
con = cli.containers.get(container_name)
|
||||||
splitter = re.compile(env_splitter_rex)
|
splitter = re.compile(env_splitter_rex)
|
||||||
@@ -195,22 +209,13 @@ class PodmanOrchestrator(Orchestrator):
|
|||||||
env[m.groups()[0]] = m.groups()[1]
|
env[m.groups()[0]] = m.groups()[1]
|
||||||
return env
|
return env
|
||||||
except podman.errors.exceptions.NotFound as e:
|
except podman.errors.exceptions.NotFound as e:
|
||||||
return
|
return {}
|
||||||
|
|
||||||
def podman_container_version(self, container_name: str) -> str:
|
|
||||||
try:
|
|
||||||
env = self.podman_container_env(container_name)
|
|
||||||
except:
|
|
||||||
env = {}
|
|
||||||
return env.get("PACKETSERVER_VERSION", "0.0.0")
|
|
||||||
|
|
||||||
def podman_user_container_env(self, username: str) -> dict:
|
def podman_user_container_env(self, username: str) -> dict:
|
||||||
container_name = self.get_container_name(username)
|
container_name = self.get_container_name(username)
|
||||||
return self.podman_container_env(container_name)
|
return self.podman_container_env(container_name)
|
||||||
|
|
||||||
def podman_user_container_version(self, username: str) -> str:
|
|
||||||
container_name = self.get_container_name(username)
|
|
||||||
return self.podman_container_version(container_name)
|
|
||||||
|
|
||||||
def podman_start_user_container(self, username: str) -> Container:
|
def podman_start_user_container(self, username: str) -> Container:
|
||||||
container_env = {
|
container_env = {
|
||||||
@@ -339,12 +344,6 @@ class PodmanOrchestrator(Orchestrator):
|
|||||||
if (datetime.datetime.now() - self.user_containers[c]).total_seconds() > self.opts.container_keepalive:
|
if (datetime.datetime.now() - self.user_containers[c]).total_seconds() > self.opts.container_keepalive:
|
||||||
logging.debug(f"Container {c} no activity for {self.opts.container_keepalive} seconds. Clearing.")
|
logging.debug(f"Container {c} no activity for {self.opts.container_keepalive} seconds. Clearing.")
|
||||||
containers_to_clean.add(c)
|
containers_to_clean.add(c)
|
||||||
else:
|
|
||||||
if packetserver_version < self.podman_container_version(c):
|
|
||||||
logging.debug(f"Container {c} was created using older code version. Clearing.")
|
|
||||||
un = self.get_username_from_container_name(c)
|
|
||||||
if not self.user_running(un):
|
|
||||||
containers_to_clean.add(c)
|
|
||||||
for c in list(containers_to_clean):
|
for c in list(containers_to_clean):
|
||||||
self.podman_remove_container_name(c)
|
self.podman_remove_container_name(c)
|
||||||
del self.user_containers[c]
|
del self.user_containers[c]
|
||||||
|
|||||||
Reference in New Issue
Block a user