Skip to content

Here is information on how to deploy Pulp3 on Openshift with a plugin like pulp_ansible. I posted the resources we will use in a repo: pulp3-openshift.

Overview

The minimal install has 5 containers:

  • Webserver. I use pulp-manager runserver.
  • Resource manager
  • Worker
  • Postgresql
  • Redis

Postgresql and Redis config

The Postgresql and Redis services are deployed by hand from your Openshift Service Catalog. It's assumed your Postgresql database is named 'pulp' and the user accessing the db is also named 'pulp'.

After deploying Redis and Postgresql be sure you have the following settings available.

REDIS_IP REDIS_PORT REDIS_PASSWORD POSTGRESQL_HOST POSTGRESQL_PORT POSTGRESQL_PASSWORD

Clone the pulp3-openshift repo and enter all of the values of ^ variables into your pulp.json template file. Note each variable is set in multiple places.

Make a Persistant Storage

Pulp needs persistant storage, typically mounted at /var/lib/pulp/. I was able to apply this pv.yaml to create the PersistentVolumeClaim.

The names in pv.yaml are then referenced in the deployment config here so you may need to update your deployment config to match.

Additional settings

Make up a value for SECRET_KEY with the snippet below and set it also in both the pulp.json template file and the Dockerfile.

cat /dev/urandom | tr -dc 'a-z0-9!@#$%^&*(\-_=+)' | head -c 50

Invent your admin password and specify it here so it will run every time one of the pulp component starts.

Configuring What Is Installed

To include other plugins, source installs, or custom code you'll want to modify the pip commands in the Dockerfile where Pulp is installed [here](https://github.com/bmbouter/pulp3-openshift/blob/master/pulp_ansible/Dockerfile#L26-L28.

RUN pip install -e 'git://github.com/pulp/pulp#egg=pulpcore&subdirectory=pulpcore'
RUN pip install -e 'git://github.com/pulp/pulp#egg=pulpcore-plugin&subdirectory=plugin'
RUN pip install -e 'git://github.com/pulp/pulp_ansible#egg=pulp_ansible'

Migrations are made a image-build time. Make sure to makemigrations for any django apps that you are installing here.

RUN pulp-manager makemigrations pulp_app
RUN pulp-manager makemigrations pulp_ansible

Migrations are run at image-start time because its there that there is a connection to the real DB. Have the migrations apply upon image startup here.

Build your Image

Within the pulp_ansible run sudo make to build the image. This will run all the commands in the Dockerfile. Note you will need the docker daemon running locally for this to work.

Tag and Publish your Image

For now I get my images onto openshift through dockerhub. I tag and push the image like this:

sudo docker tag f897f98fd9 bmbouter/pulp_ansible:0.1.b2.34
sudo docker push bmbouter/pulp_ansible:0.1.b2.34

Then I use this name in my deployment config here.

Everytime I make a change I increment the number otherwise openshift uses the already downloaded and cached image from before.

Deploy your Image

With your deployment config, e.g. pulp.json customized you are ready to deploy Pulp using the 'Add to Project' dropdown and selecting 'Import YAML/JSON' then paste in your deployment config.

Expose a Service and Route

The last step is to expose a Service and then a Route to the Pulp webserver. I was able to deploy from configs for both the Service and the Route.

These thing should match up with the port and pod labels in the deployment config.

Test Pulp with the status API

For example in one test deployment I could receive my status at:

http example.com:24817/pulp/api/v3/status/

Pics or it Didn't Happen

The Deployment Config?

The Services?

Get Involved

I'm tracking bugs related to this mini-effort here. You can see some existing issues or file a new one for help.

PRs and collaboration is welcome. I'm 'bmbouter' on Freenode.