Skip to content

Commit

Permalink
Split up some responsabilities from the entrypoint to a service conta…
Browse files Browse the repository at this point in the history
…iner.

Closes pulp#544
  • Loading branch information
decko committed Sep 26, 2023
1 parent 4d07c02 commit d1bc2c3
Show file tree
Hide file tree
Showing 8 changed files with 116 additions and 44 deletions.
40 changes: 2 additions & 38 deletions images/assets/pulp-api
Original file line number Diff line number Diff line change
@@ -1,44 +1,8 @@
#!/bin/bash -x

mkdir -p /var/lib/pulp/media \
/var/lib/pulp/assets \
/var/lib/pulp/tmp

/usr/bin/wait_on_postgres.py

# Get list of installed plugins via pip
# Assumes they are all named like "pulp-file" -> "file", with no 2nd dash.
# (Was previously needed when we ran `pulpcore-manager makemigrations`)
# PLUGINS=$(pip list | awk -F '[[:space:]]+|[-]' '/pulp-/{printf $2 " " }')

/usr/local/bin/pulpcore-manager migrate --noinput

set +x

if [ -n "${PULP_SIGNING_KEY_FINGERPRINT}" ]; then
/usr/local/bin/pulpcore-manager add-signing-service "${COLLECTION_SIGNING_SERVICE}" /var/lib/pulp/scripts/collection_sign.sh "${PULP_SIGNING_KEY_FINGERPRINT}"
/usr/local/bin/pulpcore-manager add-signing-service "${CONTAINER_SIGNING_SERVICE}" /var/lib/pulp/scripts/container_sign.sh "${PULP_SIGNING_KEY_FINGERPRINT}" --class container:ManifestSigningService
fi

if [[ -n "$PULP_DEFAULT_ADMIN_PASSWORD" ]]
then
PASSWORD_SET=$(/usr/local/bin/pulpcore-manager shell -c "from django.contrib.auth import get_user_model; print(get_user_model().objects.filter(username=\"admin\").exists())")
if [ "$PASSWORD_SET" = "False" ]
then
/usr/local/bin/pulpcore-manager reset-admin-password --password "${PULP_DEFAULT_ADMIN_PASSWORD}"
fi
else
ADMIN_PASSWORD_FILE=/etc/pulp/pulp-admin-password
if [[ -f "$ADMIN_PASSWORD_FILE" ]]; then
echo "pulp admin can be initialized."
PULP_ADMIN_PASSWORD=$(cat $ADMIN_PASSWORD_FILE)
fi

if [ -n "${PULP_ADMIN_PASSWORD}" ]; then
/usr/local/bin/pulpcore-manager reset-admin-password --password "${PULP_ADMIN_PASSWORD}"
fi
fi
set -x
# /usr/bin/wait_on_migrations.py
/usr/bin/wait_on_database_migrations.sh

if which pulpcore-api
then
Expand Down
3 changes: 2 additions & 1 deletion images/assets/pulp-content
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/bin/bash -x
#!/bin/bash

/usr/bin/wait_on_postgres.py
# /usr/bin/wait_on_migrations.py
/usr/bin/wait_on_database_migrations.sh

if which pulpcore-content
Expand Down
3 changes: 2 additions & 1 deletion images/assets/pulp-worker
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/bin/bash -x
#!/bin/bash

/usr/bin/wait_on_postgres.py
# /usr/bin/wait_on_migrations.py
/usr/bin/wait_on_database_migrations.sh

export PATH=/usr/local/bin:/usr/bin/
Expand Down
20 changes: 20 additions & 0 deletions images/assets/set_init_password.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
if [[ -n "$PULP_DEFAULT_ADMIN_PASSWORD" ]]
then
PASSWORD_SET=$(/usr/local/bin/pulpcore-manager shell -c "from django.contrib.auth import get_user_model; print(get_user_model().objects.filter(username=\"admin\").exists())")
if [ "$PASSWORD_SET" = "False" ]
then
/usr/local/bin/pulpcore-manager reset-admin-password --password "${PULP_DEFAULT_ADMIN_PASSWORD}"
fi
else
ADMIN_PASSWORD_FILE=/etc/pulp/pulp-admin-password
if [[ -f "$ADMIN_PASSWORD_FILE" ]]; then
echo "pulp admin can be initialized."
PULP_ADMIN_PASSWORD=$(cat $ADMIN_PASSWORD_FILE)
fi

if [ -n "${PULP_ADMIN_PASSWORD}" ]; then
/usr/local/bin/pulpcore-manager reset-admin-password --password "${PULP_ADMIN_PASSWORD}"
fi
fi
set -x

2 changes: 1 addition & 1 deletion images/assets/wait_on_database_migrations.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,5 @@ while true; do
# which is probably because the database is not "up enough" to continue yet.
echo "Waiting for migration, last exit code $exit_code"
fi
sleep 5
sleep 30
done
31 changes: 31 additions & 0 deletions images/assets/wait_on_migrations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/usr/bin/env python3

import sys
import time
from django.core.exceptions import AppRegistryNotReady
from django.db import connection
from django.db.migrations.executor import MigrationExecutor


def is_database_synced():
connection.prepare_database()
executor = MigrationExecutor(connection)
targets = executor.loader.graph.leaf_nodes()
return not executor.migration_plan(targets)


if __name__ == "__main__":

print("Waiting for migrations to be done...")
for _ in range(100):
try:
print("Migrations not done yet")
if is_database_synced():
break
time.sleep(3)
except AppRegistryNotReady:
print("AppRegistryNotReady")
time.sleep(3)

print("Migrations applied.")
sys.exit(0)
49 changes: 47 additions & 2 deletions images/compose/compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,43 @@ services:
timeout: 5s
retries: 5

migration_service:
image: "pulp/pulp-minimal:latest"
depends_on:
postgres:
condition: service_healthy
command: >
sh -c "pulpcore-manager migrate --noinput"
volumes:
- "./assets/settings.py:/etc/pulp/settings.py:z"
- "./assets/certs:/etc/pulp/certs:z"
- "pulp:/var/lib/pulp"

signing_key_service:
image: "pulp/pulp-minimal:latest"
command: >
sh -c "if [ -n "${PULP_SIGNING_KEY_FINGERPRINT}" ]; then
/usr/local/bin/pulpcore-manager add-signing-service "${COLLECTION_SIGNING_SERVICE}" /var/lib/pulp/scripts/collection_sign.sh "${PULP_SIGNING_KEY_FINGERPRINT}" \
/usr/local/bin/pulpcore-manager add-signing-service "${CONTAINER_SIGNING_SERVICE}" /var/lib/pulp/scripts/container_sign.sh "${PULP_SIGNING_KEY_FINGERPRINT}" --class container:ManifestSigningService \
fi"
depends_on:
migration_service:
condition: service_completed_successfully
volumes:
- "./assets/settings.py:/etc/pulp/settings.py:z"
- "./assets/certs:/etc/pulp/certs:z"
- "pulp:/var/lib/pulp"

admin_password_service:
image: "pulp/pulp-minimal:latest"
command: set_init_password.sh
environment:
PULP_DEFAULT_ADMIN_PASSWORD: password
volumes:
- "./assets/settings.py:/etc/pulp/settings.py:z"
- "./assets/certs:/etc/pulp/certs:z"
- "pulp:/var/lib/pulp"

redis:
image: "docker.io/library/redis:latest"
volumes:
Expand All @@ -36,7 +73,9 @@ services:
command: ['/usr/bin/nginx.sh']
depends_on:
pulp_api:
condition: service_healthy
pulp_content:
condition: service_healthy
ports:
- "8080:8080"
hostname: pulp
Expand All @@ -56,14 +95,16 @@ services:
condition: service_healthy
postgres:
condition: service_healthy
migration_service:
condition: service_completed_successfully
signing_key_service:
condition: service_completed_successfully
hostname: pulp-api
user: pulp
volumes:
- "./assets/settings.py:/etc/pulp/settings.py:z"
- "./assets/certs:/etc/pulp/certs:z"
- "pulp:/var/lib/pulp"
environment:
PULP_DEFAULT_ADMIN_PASSWORD: password
restart: always
healthcheck:
test: [ "CMD-SHELL", "readyz.py /pulp/api/v3/status/" ]
Expand All @@ -81,6 +122,8 @@ services:
condition: service_healthy
postgres:
condition: service_healthy
migration_service:
condition: service_completed_successfully
hostname: pulp-content
user: pulp
volumes:
Expand All @@ -104,6 +147,8 @@ services:
condition: service_healthy
postgres:
condition: service_healthy
migration_service:
condition: service_completed_successfully
user: pulp
volumes:
- "./assets/settings.py:/etc/pulp/settings.py:z"
Expand Down
12 changes: 11 additions & 1 deletion images/pulp-minimal/stable/Containerfile.core
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,17 @@ RUN pip3 install --upgrade \

# Prevent pip-installed /usr/local/bin/pulp-content from getting run instead of
# our /usr/bin/pulp-content script.
RUN rm -f /usr/local/bin/pulp-content
# RUN rm -r /usr/local/bin/pulp-content

COPY images/assets/readyz.py /usr/bin/readyz.py
COPY images/assets/route_paths.py /usr/bin/route_paths.py
COPY images/assets/wait_on_postgres.py /usr/bin/wait_on_postgres.py
COPY images/assets/wait_on_migrations.py /usr/bin/wait_on_migrations.py
COPY images/assets/wait_on_database_migrations.sh /usr/bin/wait_on_database_migrations.sh
COPY images/assets/set_init_password.sh /usr/bin/set_init_password.sh
COPY images/assets/pulp-api /usr/bin/pulp-api
COPY images/assets/pulp-content /usr/bin/pulp-content
COPY images/assets/pulp-worker /usr/bin/pulp-worker

USER pulp:pulp
RUN PULP_STATIC_ROOT=/var/lib/operator/static/ PULP_CONTENT_ORIGIN=localhost \
Expand Down

0 comments on commit d1bc2c3

Please sign in to comment.