Skip to main content

Openshift Local

Get it​

https://console.redhat.com/openshift/create/local

Install it​

cd ~/Downloads
tar xvf crc-linux-amd64.tar.xz
cp ~/Downloads/crc-linux-*-amd64/crc ~/bin

View credentials​

crc console --credentials

This command will print out the commands you can use to login into the cluster:

To login as a regular user, run 'oc login -u developer -p developer https://api.crc.testing:6443'.
To login as an admin, run 'oc login -u kubeadmin -p fkjhskjhks https://api.crc.testing:6443'

Setup and start the cluster​

crc setup
crc start

Web console​

crc console url

Tweak memory and disk size setup​

The cluster is using 9GiB of memory and 30GiB of disk-size by default. Both need to be increased to run packit-service.

crc config set memory 11264 MiB
crc config set disk-size 41 Gi

if the cluster is already running then

crc stop
crc start

Use Openshift Local internal registry

Verify a route to the registry exist​

oc get route -n openshift-image-registry

Access the registry using port forwarding​

oc port-forward pod/$(oc get pods -n openshift-image-registry | awk '/^image-registry/{print $1}') -n openshift-image-registry 5000 &
export REGISTRY_SERVICE="localhost:5000/myproject"
podman login --tls-verify=false -u unused -p $(oc whoami -t) ${REGISTRY_SERVICE}
export REGISTRY_SANDBOX="localhost:5000/packit-dev-sandbox"
podman login --tls-verify=false -u unused -p $(oc whoami -t) ${REGISTRY_SANDBOX}

Push local images to the registry​

podman push 3c0d620f8caf ${REGISTRY_SERVICE}/packit-service:dev
podman push 4a087c98c604 ${REGISTRY_SERVICE}/packit-worker:dev
podman push ab2209c59df0 ${REGISTRY_SANDBOX}/sandcastle:dev

To be able to successfully deploy images, myproject and packit-dev-sandbox projects have to exist in the cluster.

Deploy packit-service

Be sure to login with the same token you have in your deployment configuration

cd where-this-repo-is
oc login --token=taken-from-webapp --server=https://api.crc.testing:6443
DEPLOYMENT=dev make deploy

How to patch and configure the projects (just an example)​

Deployment project patches​

diff --git a/playbooks/deploy.yml b/playbooks/deploy.yml
index feb7ef6..442a5c8 100644
--- a/playbooks/deploy.yml
+++ b/playbooks/deploy.yml
@@ -22,12 +22,16 @@
push_dev_images: false
with_fluentd_sidecar: false
postgres_version: 13
- image: quay.io/packit/packit-service:{{ deployment }}
- image_worker: quay.io/packit/packit-worker:{{ deployment }}
- image_fedmsg: quay.io/packit/packit-service-fedmsg:{{ deployment }}
- image_dashboard: quay.io/packit/dashboard:{{ deployment }}
- image_tokman: quay.io/packit/tokman:{{ deployment }}
- image_fluentd: quay.io/packit/fluentd-splunk-hec:latest
+ # registry: quay.io
+ registry: image-registry.openshift-image-registry.svc:5000
+ # registry_project: packit
+ registry_project: myproject
+ image: "{{ registry }}/{{ registry_project }}/packit-service:{{ deployment }}"
+ image_worker: "{{ registry }}/{{ registry_project }}/packit-worker:{{ deployment }}"
+ image_fedmsg: "{{ registry }}/{{ registry_project }}/packit-service-fedmsg:{{ deployment }}"
+ image_dashboard: "{{ registry }}/{{ registry_project }}/dashboard:{{ deployment }}"
+ image_tokman: "{{ registry }}/{{ registry_project }}/tokman:{{ deployment }}"
+ image_fluentd: "{{ registry }}/{{ registry_project }}/fluentd:{{ deployment }}"
# project_dir is set in tasks/project-dir.yml
path_to_secrets: "{{ project_dir }}/secrets/{{ service }}/{{ deployment }}"
# to be used in Image streams as importPolicy:scheduled value
@@ -35,7 +39,7 @@
# used in dev/zuul deployment to tag & push images to cluster
# https://github.com/packit/deployment/issues/112#issuecomment-673343049
# container_engine: "{{ lookup('pipe', 'command -v podman 2> /dev/null || echo docker') }}"
- container_engine: docker
+ container_engine: podman
celery_app: packit_service.worker.tasks
celery_retry_limit: 2
celery_retry_backoff: 3
diff --git a/playbooks/import-images.yml b/playbooks/import-images.yml
index 959bc78..7c0be12 100644
--- a/playbooks/import-images.yml
+++ b/playbooks/import-images.yml
@@ -10,7 +10,7 @@
with_fedmsg: true
with_dashboard: true
with_tokman: true
- with_fluentd_sidecar: true
+ with_fluentd_sidecar: false
tasks:
- name: Include variables
ansible.builtin.include_vars: ../vars/{{ service }}/{{ deployment }}.yml

Deployment configuration file: vars/packit/dev.yaml​

# Copyright Contributors to the Packit project.
# SPDX-License-Identifier: MIT

# -------------------------------------------------------------------
# Variables needed by Ansible playbooks in playbooks/
# -------------------------------------------------------------------

# Openshift project/namespace name
project: myproject

# Openshift cluster url
host: https://api.crc.testing:6443

# oc login <the above host value>, oc whoami -t
# OR via Openshift web GUI: click on your login in top right corner, 'Copy Login Command', take the part after --token=
api_key: ""
validate_certs: false
check_up_to_date: false
push_dev_images: false # pushing dev images manually!

# Check that the deployment resources are up-to-date
# check_up_to_date: true

# Check that the current vars file us up to date with the template
# check_vars_template_diff: true

with_tokman: false

# if you want to deploy fedmsg, please make sure to
# edit the queue name in secrets/*/fedora.toml
with_fedmsg: false

with_redis_commander: false

with_flower: false

with_beat: false

with_dashboard: false

with_pushgateway: false

with_fluentd_sidecar: false

managed_platform: false

# with_repository_cache: true
# repository_cache_storage: 4Gi

# image to use for service
# image: quay.io/packit/packit-service:{{ deployment }}

# image to use for worker
# image_worker: quay.io/packit/packit-worker:{{ deployment }}

# image to use for fedora messaging consumer
# image_fedmsg: quay.io/packit/packit-service-fedmsg:{{ deployment }}

# image to use for dashboard
# image_dashboard: "quay.io/packit/dashboard:{{ deployment }}"

# image to use for tokman
# image_tokman: "quay.io/packit/tokman:{{ deployment }}"

# image to use for fluentd sidecar
# image_fluentd: quay.io/packit/fluentd-splunk-hec:latest

# Path to secrets (in case you don't have it in the root of this project)
# path_to_secrets: ../secrets

# Used in dev/Zuul deployment to tag & push images to cluster.
# It's set to "/usr/bin/podman" if there's podman installed, or to 'docker' otherwise.
# If you still want to use docker even when podman is installed, set:
# container_engine: docker

# postgres_version: 15 # MP+

# Celery retry parameters
# celery_retry_limit: 2
# celery_retry_backoff: 3

# Number of worker pods to be deployed to serve the queues
workers_all_tasks: 1
workers_short_running: 0
workers_long_running: 0
# pushgateway_address: http://pushgateway

Deployment configuration file: secrets/packit/dev/packit-service.yaml.j2​

--
deployment: stg
debug: true
fas_user: packit-stg
keytab_path: /secrets/fedora.keytab
comment_command_prefix: "/packit-stg"
validate_webhooks: true

{{ vault.packit_service | to_nice_yaml }}

testing_farm_api_url: https://api.dev.testing-farm.io/v0.1/
enabled_projects_for_internal_tf:
- github.com/packit/hello-world

command_handler: sandcastle
command_handler_work_dir: /tmp/sandcastle
command_handler_image_reference: image-registry.openshift-image-registry.svc:5000/packit-dev-sandbox/sandcastle:dev
command_handler_k8s_namespace: {{ sandbox_namespace }}
command_handler_pvc_volume_specs:
- path: /repository-cache
pvc_from_env: SANDCASTLE_REPOSITORY_CACHE_VOLUME
read_only: true
command_handler_storage_class: crc-csi-hostpath-provisioner

repository_cache: /repository-cache
# The maintenance of the cache (adding, updating) is done externally,
# not in the packit/packit-service code.
add_repositories_to_repository_cache: false

appcode: PCKT-002

admins: # GitHub usernames
- jpopelka
- lachmanfrantisek
- lbarcziova
- TomasTomecek
- thrix # Miro Vadkerti
- psss # Petr Splichal
- csomh
- mfocko
- majamassarini
- nforro

enabled_private_namespaces:
- gitlab.com/redhat/centos-stream
- gitlab.com/redhat/centos-stream/src

enabled_projects_for_srpm_in_copr:
- github.com/packit/hello-world

server_name: stg.packit.dev
dashboard_url: https://dashboard.stg.packit.dev

projects_to_sync:
- forge: https://github.com
repo_namespace: packit
repo_name: packit
branch: main
dg_branch: rawhide
dg_repo_name: packit

- forge: https://github.com
repo_namespace: packit
repo_name: ogr
branch: main
dg_branch: rawhide
dg_repo_name: python-ogr

- forge: https://github.com
repo_namespace: packit
repo_name: requre
branch: main
dg_branch: rawhide
dg_repo_name: python-requre

packit-service project patches​

One way for building a debuggable packit-service:dev image is running podman-compose.

podman-compose build --no-cache

after applying this patches (and customizing the celerizer.py message as you want):

diff --git a/docker-compose.yml b/docker-compose.yml
index d1a592dc..8ef9675f 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -81,11 +81,14 @@ services:
- tokman
- redis
- postgres
+ ports:
+ - 5678:5678
environment:
DEPLOYMENT: dev
+ PACKIT_HOME: /home/packit
REDIS_SERVICE_HOST: redis
APP: packit_service.worker.tasks
- KRB5CCNAME: FILE:/tmp/krb5cc_packit
+ KRB5CCNAME: "DIR:/home/packit/kerberos/"
POSTGRESQL_USER: packit
POSTGRESQL_PASSWORD: secret-password
POSTGRESQL_HOST: postgres
diff --git a/files/docker/Dockerfile b/files/docker/Dockerfile
index f2a82282..19013b98 100644
--- a/files/docker/Dockerfile
+++ b/files/docker/Dockerfile
@@ -32,6 +32,9 @@ RUN git rev-parse HEAD >/.packit-service.git.commit.hash \
COPY alembic.ini ./
COPY alembic/ ./alembic/

+# Allow remote debugging
+RUN pip install --upgrade debugpy
+
EXPOSE 8443

CMD ["/usr/bin/run_httpd.sh"]
diff --git a/files/docker/Dockerfile.worker b/files/docker/Dockerfile.worker
index aa06755e..a292ef52 100644
--- a/files/docker/Dockerfile.worker
+++ b/files/docker/Dockerfile.worker
@@ -15,6 +15,9 @@ ENV USER=packit \
# Ansible doesn't like /tmp
WORKDIR /src

+# Allow remote debugging
+RUN pip install --upgrade debugpy
+
COPY files/install-deps-worker.yaml ./files/
COPY files/tasks/ ./files/tasks/
RUN ansible-playbook -vv -c local -i localhost, files/install-deps-worker.yaml \
diff --git a/files/install-deps-worker.yaml b/files/install-deps-worker.yaml
index c348944e..97727a49 100644
--- a/files/install-deps-worker.yaml
+++ b/files/install-deps-worker.yaml
@@ -46,7 +46,7 @@
- name: Install pip deps
ansible.builtin.pip:
name:
- - git+https://github.com/packit/sandcastle.git@{{ source_branch }}
+ - git+https://github.com/majamassarini/sandcastle.git@static-execute-dir-name
# The above bodhi-client RPM installs python3-requests-2.25.1 and python3-urllib3-1.26.5
# The below sentry_sdk would then install urllib3-2.x because of its urllib3>=1.26.11 requirement
# and 'pip check' would then scream that "requests 2.25.1 has requirement urllib3<1.27"
diff --git a/packit_service/celerizer.py b/packit_service/celerizer.py
index e9279919..1e0b9710 100644
--- a/packit_service/celerizer.py
+++ b/packit_service/celerizer.py
@@ -42,4 +42,176 @@ def get_celery_application():
return app


+# Let a remote debugger (Visual Studio Code client)
+# access this running instance.
+import debugpy
+
+# Allow other computers to attach to debugpy at this IP address and port.
+try:
+ debugpy.listen(("0.0.0.0", 5678))
+
+ # Uncomment the following lines if you want to
+ # pause the program until a remote debugger is attached
+
+ # print("Waiting for debugger attach")
+ debugpy.wait_for_client()
+
+except RuntimeError as e:
+ pass
+
+
+
+import json
+
+comment_copr_build_event = """
+{
+ "agent": "mmassari",
+ "pullrequest": {
+ "assignee": null,
+ "branch": "rawhide",
+ "branch_from": "custumized-packit-action",
+ "cached_merge_status": "FFORWARD",
+ "closed_at": null,
+ "closed_by": null,
+ "comments": [
+ {
+ "comment": "/packit-stg pull-from-upstream --with-pr-config",
+ "commit": null,
+ "date_created": "1693297834",
+ "edited_on": null,
+ "editor": null,
+ "filename": null,
+ "id": 155947,
+ "line": null,
+ "notification": false,
+ "parent": null,
+ "reactions": {},
+ "tree": null,
+ "user": {
+ "full_url": "https://src.fedoraproject.org/user/mmassari",
+ "fullname": "Maja Massarini",
+ "name": "mmassari",
+ "url_path": "user/mmassari"
+ }
+ }
+ ],
+ "commit_start": "62df8b5ad073d4b299620e7aa81aaafeaee71bb9",
+ "commit_stop": "62df8b5ad073d4b299620e7aa81aaafeaee71bb9",
+ "date_created": "1693297764",
+ "full_url": "https://src.fedoraproject.org/rpms/python-teamcity-messages/pull-request/45",
+ "id": 45,
+ "initial_comment": null,
+ "last_updated": "1693297834",
+ "project": {
+ "access_groups": {
+ "admin": [],
+ "collaborator": [],
+ "commit": [],
+ "ticket": []
+ },
+ "access_users": {
+ "admin": [
+ "limb"
+ ],
+ "collaborator": [],
+ "commit": [],
+ "owner": [
+ "mmassari"
+ ],
+ "ticket": []
+ },
+ "close_status": [],
+ "custom_keys": [],
+ "date_created": "1643654065",
+ "date_modified": "1675768016",
+ "description": "The python-teamcity-messages package",
+ "full_url": "https://src.fedoraproject.org/rpms/python-teamcity-messages",
+ "fullname": "rpms/python-teamcity-messages",
+ "id": 54766,
+ "milestones": {},
+ "name": "python-teamcity-messages",
+ "namespace": "rpms",
+ "parent": null,
+ "priorities": {},
+ "tags": [],
+ "url_path": "rpms/python-teamcity-messages",
+ "user": {
+ "full_url": "https://src.fedoraproject.org/user/mmassari",
+ "fullname": "Maja Massarini",
+ "name": "mmassari",
+ "url_path": "user/mmassari"
+ }
+ },
+ "remote_git": null,
+ "repo_from": {
+ "access_groups": {
+ "admin": [],
+ "collaborator": [],
+ "commit": [],
+ "ticket": []
+ },
+ "access_users": {
+ "admin": [
+ "limb"
+ ],
+ "collaborator": [],
+ "commit": [],
+ "owner": [
+ "mmassari"
+ ],
+ "ticket": []
+ },
+ "close_status": [],
+ "custom_keys": [],
+ "date_created": "1643654065",
+ "date_modified": "1675768016",
+ "description": "The python-teamcity-messages package",
+ "full_url": "https://src.fedoraproject.org/rpms/python-teamcity-messages",
+ "fullname": "rpms/python-teamcity-messages",
+ "id": 54766,
+ "milestones": {},
+ "name": "python-teamcity-messages",
+ "namespace": "rpms",
+ "parent": null,
+ "priorities": {},
+ "tags": [],
+ "url_path": "rpms/python-teamcity-messages",
+ "user": {
+ "full_url": "https://src.fedoraproject.org/user/mmassari",
+ "fullname": "Maja Massarini",
+ "name": "mmassari",
+ "url_path": "user/mmassari"
+ }
+ },
+ "status": "Open",
+ "tags": [],
+ "threshold_reached": null,
+ "title": "Add actions for testing purpose",
+ "uid": "139c2b91041b4e939384283169f389d6",
+ "updated_on": "1693297834",
+ "user": {
+ "full_url": "https://src.fedoraproject.org/user/mmassari",
+ "fullname": "Maja Massarini",
+ "name": "mmassari",
+ "url_path": "user/mmassari"
+ }
+ },
+ "headers": {
+ "fedora_messaging_schema": "pagure.pull-request.comment.added",
+ "fedora_messaging_severity": 20,
+ "fedora_messaging_user_mmassari": true,
+ "sent-at": "2023-08-29T08:30:35+00:00"
+ },
+ "topic": "org.fedoraproject.prod.pagure.pull-request.comment.added"
+}
+"""
+
+event = json.loads(comment_copr_build_event)
celery_app: Celery = Proxy(get_celery_application)
+celery_app.send_task(
+ name="task.steve_jobs.process_message",
+ kwargs={"event": event},
+)
+
+
diff --git a/packit_service/constants.py b/packit_service/constants.py
index f5b3e1aa..21707465 100644
--- a/packit_service/constants.py
+++ b/packit_service/constants.py
@@ -18,7 +18,8 @@ DOCS_TESTING_FARM = f"{DOCS_URL}/testing-farm"
KOJI_PRODUCTION_BUILDS_ISSUE = "https://pagure.io/releng/issue/9801"

SANDCASTLE_WORK_DIR = "/tmp/sandcastle"
-SANDCASTLE_IMAGE = "quay.io/packit/sandcastle"
+#SANDCASTLE_IMAGE = "quay.io/packit/sandcastle"
+SANDCASTLE_IMAGE = "image-registry.openshift-image-registry.svc:5000/packit-dev-sandbox/sandcastle"
SANDCASTLE_DEFAULT_PROJECT = "myproject"
SANDCASTLE_PVC = "SANDCASTLE_PVC"

diff --git a/packit_service/worker/monitoring.py b/packit_service/worker/monitoring.py
index 05ce236c..26f189c3 100644
--- a/packit_service/worker/monitoring.py
+++ b/packit_service/worker/monitoring.py
@@ -165,6 +165,8 @@ class Pushgateway:
return

logger.info("Pushing the metrics to pushgateway.")
- push_to_gateway(
- self.pushgateway_address, job=self.worker_name, registry=self.registry
- )
+ try:
+ push_to_gateway(
+ self.pushgateway_address, job=self.worker_name, registry=self.registry
+ )
+ except: pass # gaierror in Openshift Local

Debug the worker with port forwarding​

oc port-forward pod/$(oc get pods -n myproject | awk '/^packit-worker/{print $1}') -n myproject 5678

If you use the microsoft debugpy for debugging probably you need something similar to the following in a file named .vscode/launch.json for Visual Studio Code to attach the breakpoint

        {
"name": "Python: Remote Attach packit code remotely",
"type": "python",
"request": "attach",
"connect": {
"host": "localhost",
"port": 5678
},
"justMyCode": false,
"pathMappings": [
{
"localRoot": "/your-packit-source-dir/packit",
"remoteRoot": "/usr/local/lib/python3.9/site-packages"
},
]
},

Debug sandcastle​

Create sandcastle volumes manually​

Create PersistentVolume1​

apiVersion: v1
kind: PersistentVolume
metadata:
name: sandcastle-volume-1
namespace: packit-dev-sandbox
labels:
type: local
spec:
claimRef:
name: sandcastle-repository-cache-packit-worker-0
namespace: packit-dev-sandbox
storageClassName: crc-csi-hostpath-provisioner
accessModes:
- ReadWriteOnce
capacity:
storage: 4Gi
hostPath:
path: "/tmp/sandbox1"
volumeMode: Filesystem
persistentVolumeReclaimPolicy: Recycle

Create PersistentVolume2 (and manually adjust the claimRef name once the sandcastle pod is running...)​

apiVersion: v1
kind: PersistentVolume
metadata:
name: sandcastle-volume-2
namespace: packit-dev-sandbox
labels:
type: local
spec:
claimRef:
name: sandcastle--tmp-sandcastle-20230913-075642340270-pvc
namespace: packit-dev-sandbox
storageClassName: crc-csi-hostpath-provisioner
accessModes:
- ReadWriteOnce
capacity:
storage: 3Gi
hostPath:
path: "/tmp/sandbox2"
volumeMode: Filesystem
persistentVolumeReclaimPolicy: Recycle