Skip to content

Commit

Permalink
automatically pull all custom container images on all nodes (#594)
Browse files Browse the repository at this point in the history
  • Loading branch information
zardus authored Oct 15, 2024
1 parent 587ce46 commit 626c245
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 0 deletions.
3 changes: 3 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,14 @@ RUN ln -s /opt/pwn.college/etc/systemd/system/pwn.college.service /etc/systemd/s
ln -s /opt/pwn.college/etc/systemd/system/pwn.college.backup.timer /etc/systemd/system/pwn.college.backup.timer && \
ln -s /opt/pwn.college/etc/systemd/system/pwn.college.cachewarmer.service /etc/systemd/system/pwn.college.cachewarmer.service && \
ln -s /opt/pwn.college/etc/systemd/system/pwn.college.cachewarmer.timer /etc/systemd/system/pwn.college.cachewarmer.timer && \
ln -s /opt/pwn.college/etc/systemd/system/pwn.college.imagepuller.service /etc/systemd/system/pwn.college.imagepuller.service && \
ln -s /opt/pwn.college/etc/systemd/system/pwn.college.imagepuller.timer /etc/systemd/system/pwn.college.imagepuller.timer && \
ln -s /opt/pwn.college/etc/systemd/system/pwn.college.cloud.backup.service /etc/systemd/system/pwn.college.cloud.backup.service && \
ln -s /opt/pwn.college/etc/systemd/system/pwn.college.cloud.backup.timer /etc/systemd/system/pwn.college.cloud.backup.timer && \
ln -s /etc/systemd/system/pwn.college.service /etc/systemd/system/multi-user.target.wants/pwn.college.service && \
ln -s /etc/systemd/system/pwn.college.backup.timer /etc/systemd/system/timers.target.wants/pwn.college.backup.timer && \
ln -s /etc/systemd/system/pwn.college.cachewarmer.timer /etc/systemd/system/timers.target.wants/pwn.college.cachewarmer.timer && \
ln -s /etc/systemd/system/pwn.college.imagepuller.timer /etc/systemd/system/timers.target.wants/pwn.college.imagepuller.timer && \
ln -s /etc/systemd/system/pwn.college.cloud.backup.timer /etc/systemd/system/timers.target.wants/pwn.college.cloud.backup.timer

WORKDIR /opt/pwn.college
Expand Down
3 changes: 3 additions & 0 deletions dojo/pull_images.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/sh

dojo flask /opt/CTFd/CTFd/plugins/dojo_plugin/scripts/pull_images.py
21 changes: 21 additions & 0 deletions dojo_plugin/scripts/pull_images.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import logging
import docker
import os

from ..utils import all_docker_clients

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

for image, in DojoChallenges.query.with_entities(db.distinct(DojoChallenges.data["image"])).all()
if not image or image.startswith("mac:") or image.startswith("pwncollege-"):
continue

for client in all_docker_clients():
logger.info(f"Pulling image {image} on {client.api.base_url}...")
try:
client.images.pull(image)
except docker.errors.ImageNotFound:
logger.error(f"... image not found: {image} on {client.api.base_url}...")
except Exception as e:
logger.error(f"... error: {image} on {client.api.base_url}...", exc_info=e)
7 changes: 7 additions & 0 deletions etc/systemd/system/pwn.college.imagepuller.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[Unit]
Description=Pull custom container images!

[Service]
Type=simple
ExecStart=pull_images.sh
ExecCondition=:/bin/sh -c '. /data/config.env; [ "${WORKSPACE_NODE}" -eq 0 ]'
8 changes: 8 additions & 0 deletions etc/systemd/system/pwn.college.imagepuller.timer
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[Unit]
Description=Timer to run pwn.college imagepuller service

[Timer]
OnCalendar=*-*-* *:*:00

[Install]
WantedBy=timers.target

0 comments on commit 626c245

Please sign in to comment.