Wijzigingen Forgejo-playbook

Datum: 2026-10-26 Aanleiding: ansible-playbook forgejo.yml faalde achtereenvolgens op de playbook-structuur, een ontbrekende helm-binary, een niet-bestaande chart-URL en een cluster zonder StorageClass.

Eindresultaat: Forgejo draait op de Talos-cluster.

OnderdeelWaarde
Helm-releaseforgejo in namespace forgejo, status deployed
Chartforgejo-17.3.1 (app 15.0.10)
OCI-chartoci://code.forgejo.org/forgejo-helm/forgejo
OpslagPVC gitea-shared-storage, Bound, 10Gi, local-path
Pod1/1 Running op talos-node-3
API-checkGET /api/v1/version → {"version":"15.0.10+gitea-1.22.0"}
helm op de containerv4.3.1
local-path-provisionerv0.0.37

1. Playbook-structuur (forgejo.yml)

Probleem

[ERROR]:'ansible.builtin.command'isnotavalidattributeforaPlay

De file bevatte een losse takenlijst. Een playbook moet een lijst van plays zijn; elke play heeft hosts: en een tasks:-blok.

Oplossing

De taken zijn ondergebracht in een play op k8s_management met become: true en gather_facts: false, plus environment.KUBECONFIG op play-niveau zodat alle taken en rollen dezelfde kubeconfig gebruiken.

2. Ontbrekende helm-binary (roles/tools)

Probleem

Modulefailed:Errorexecutingcommand:[Errno2]Nosuchfileordirectory:b'helm'

helm werd nergens geïnstalleerd; de tools-rol deed alleen talosctl en kubectl.

Oplossing — roles/tools/tasks/main.yml

Nieuwe sectie # --- helm --- die dezelfde aanpak volgt als kubectl:

Oplossing — versie-variabele

forgejo.yml neemt de tools-rol op, zodat een losse run helm zelf installeert.

3. Chart-URL bestaat niet (forgejo.yml)

Probleem

h→elfmairleepdotaoddfectocdhe-hrtetppos:h/t/tcposd:e/.fcoordgee.jfoo.rogregjchoarrgt/sc/hianrdtesx.yaml:404NotFound

De URL uit het oorspronkelijke playbook is geen chart-repository (meer). Forgejo publiceert de chart als OCI-artefact.

Oplossing

Gecontroleerd: helm show chart en helm template leveren chart 17.3.1 met een PVC van 10Gi.

4. Geen StorageClass (nieuwe rol local_path_storage)

Probleem

ppvocd//gfiotregae-jsohared-storagePPeennddiinngg<ugnebeonunsdtoirmamgeedcilaatses>PersistentVolumeClaims

De cluster heeft één node (talos-node-3) en geen dynamische provisioner.

Oplossing — nieuwe rol roles/local_path_storage

defaults/main.yml:

local_path_provisioner_version: v0.0.37
local_path_provisioner_namespace: local-path-storage
local_path_storage_class: local-path
local_path_provisioner_data_dir: /var/local-path-provisioner
local_path_provisioner_tolerations:
  - key: node-role.kubernetes.io/control-plane
    operator: Exists
    effect: NoSchedule
  - key: node-role.kubernetes.io/master
    operator: Exists
    effect: NoSchedule

tasks/main.yml (idempotent):

  1. controleert of StorageClass local-path bestaat;
  2. installeert zo nodig de upstream-manifest (.../local-path-provisioner/v0.0.37/deploy/local-path-storage.yaml);
  3. zet pod-security.kubernetes.io/enforce=privileged op de namespace local-path-storage;
  4. patcht config.json van de local-path-config-ConfigMap naar /var/local-path-provisioner (alleen als dat pad nog niet is ingesteld) en herstart de deployment;
  5. voegt tolerations voor de control-plane-taint toe (alleen als ze ontbreken);
  6. wacht met kubectl rollout status tot de provisioner gereed is.

Waarom deze twee extra stappen nodig waren

5. PVC met afwijkende storageClass (forgejo.yml)

spec.storageClassName is immutabel. De eerste PVC was aangemaakt zonder storageClass en kon dus niet naar local-path worden omgezet.

Oplossing

6. Forgejo-waarden (forgejo.yml)

Naast opslag en tolerantie zijn de volgende variabelen toegevoegd:

forgejo_namespace: forgejo
forgejo_chart: oci://code.forgejo.org/forgejo-helm/forgejo
forgejo_chart_version: ""           # leeg = nieuwste
forgejo_storage_size: 10Gi
forgejo_storage_class: local-path
forgejo_pvc_name: gitea-shared-storage
forgejo_kubeconfig: /root/.kube/config

De install-taak:

helm upgrade --install forgejo oci://code.forgejo.org/forgejo-helm/forgejo \
  --namespace forgejo --create-namespace \
  --set persistence.enabled=true \
  --set persistence.size=10Gi \
  --set persistence.storageClass=local-path \
  --set-json 'tolerations=[
    {"key":"node-role.kubernetes.io/control-plane","operator":"Exists","effect":"NoSchedule"},
    {"key":"node-role.kubernetes.io/master","operator":"Exists","effect":"NoSchedule"}
  ]'

Verder:

7. Documentatie (README.md)

8. Idempotentie en valkuilen

9. Openstaande punten / caveats

10. Gewijzigde bestanden

BestandWijziging
forgejo.ymlHerstructureerd naar play; OCI-chart; storageClass, tolerations, kubeconfig-check, namespace, PVC-cleanup, variabelen.
roles/tools/tasks/main.ymlHelm-sectie toegevoegd.
roles/tools/defaults/main.ymlhelm_version fallback.
group_vars/all.ymlhelm_version: "".
roles/local_path_storage/defaults/main.ymlNieuw: versie, namespace, class, data-pad, tolerations.
roles/local_path_storage/tasks/main.ymlNieuw: installatie + configuratie provisioner.
README.mdRol, layout, Forgejo-paragraaf, variabele, verificatie.
forgejo-playbook-wijzigingen.mdDit document.

11. Verificatiecommando’s

cd /usr/src/opentofu/ansible
ansible-playbook --syntax-check forgejo.yml
ansible-playbook forgejo.yml

ssh root@192.168.0.137 '
  helm version --short
  helm list -n forgejo
  kubectl -n forgejo get pvc,pods,svc
  kubectl -n local-path-storage get pods
  kubectl -n forgejo exec deploy/forgejo -- wget -qO- http://127.0.0.1:3000/api/v1/version
'