mirror of
https://github.com/auricom/home-cluster.git
synced 2025-09-17 18:24:14 +02:00
feat: bookstack export job
This commit is contained in:
1
.github/lint/.yamllint.yaml
vendored
1
.github/lint/.yamllint.yaml
vendored
@@ -4,6 +4,7 @@ ignore: |
|
|||||||
.vscode/
|
.vscode/
|
||||||
*.sops.*
|
*.sops.*
|
||||||
ansible/roles/xanmanning.k3s/
|
ansible/roles/xanmanning.k3s/
|
||||||
|
cluster/base-custom/secrets
|
||||||
gotk-components.yaml
|
gotk-components.yaml
|
||||||
extends: default
|
extends: default
|
||||||
rules:
|
rules:
|
||||||
|
66
cluster/apps/data/bookstack/export-job.yaml
Normal file
66
cluster/apps/data/bookstack/export-job.yaml
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
---
|
||||||
|
apiVersion: batch/v1
|
||||||
|
kind: CronJob
|
||||||
|
metadata:
|
||||||
|
name: bookstack-books-export
|
||||||
|
namespace: data
|
||||||
|
spec:
|
||||||
|
schedule: "@daily"
|
||||||
|
jobTemplate:
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
name: bookstack-books-export
|
||||||
|
spec:
|
||||||
|
serviceAccountName: jobs
|
||||||
|
imagePullSecrets:
|
||||||
|
- name: regcred
|
||||||
|
containers:
|
||||||
|
- name: gitea-repositories-backup
|
||||||
|
image: registry.${SECRET_CLUSTER_DOMAIN}/homelab/home-cluster-jobs:1.1.0
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
command:
|
||||||
|
- "bin/sh"
|
||||||
|
- "-ec"
|
||||||
|
- |
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -o nounset
|
||||||
|
set -o errexit
|
||||||
|
|
||||||
|
mkdir -p ~/.ssh
|
||||||
|
cp /opt/id_rsa ~/.ssh/id_rsa
|
||||||
|
chmod 600 ~/.ssh/id_rsa
|
||||||
|
|
||||||
|
ssh -o StrictHostKeyChecking=no homelab@${LOCAL_LAN_TRUENAS} << 'EOF'
|
||||||
|
|
||||||
|
set -x
|
||||||
|
|
||||||
|
WORK_DIR="/mnt/storage/backups/bookstack"
|
||||||
|
|
||||||
|
SHELVES=$(curl --silent --location --request GET "https://bookstack.${SECRET_CLUSTER_DOMAIN}/api/shelves" --header "Authorization: Token ${SECRET_BOOKSTACK_TOKEN_ID}:${SECRET_BOOKSTACK_TOKEN_SECRET}" | jq --raw-output .data[].id)
|
||||||
|
|
||||||
|
for shelf in $SHELVES
|
||||||
|
do
|
||||||
|
shelf_slug=$(curl --silent --location --request GET "https://bookstack.${SECRET_CLUSTER_DOMAIN}/api/shelves/$shelf" --header "Authorization: Token ${SECRET_BOOKSTACK_TOKEN_ID}:${SECRET_BOOKSTACK_TOKEN_SECRET}" | jq --raw-output .slug)
|
||||||
|
mkdir -p $WORK_DIR/$shelf_slug
|
||||||
|
BOOKS=$(curl --silent --location --request GET "https://bookstack.${SECRET_CLUSTER_DOMAIN}/api/shelves/$shelf" --header "Authorization: Token ${SECRET_BOOKSTACK_TOKEN_ID}:${SECRET_BOOKSTACK_TOKEN_SECRET}" | jq --raw-output .books[].id)
|
||||||
|
for book in $BOOKS
|
||||||
|
do
|
||||||
|
book_slug=$(curl --silent --location --request GET "https://bookstack.${SECRET_CLUSTER_DOMAIN}/api/books/$book" --header "Authorization: Token ${SECRET_BOOKSTACK_TOKEN_ID}:${SECRET_BOOKSTACK_TOKEN_SECRET}" | jq --raw-output .slug)
|
||||||
|
echo "INFO: export book $book_slug..."
|
||||||
|
curl --silent --location --request GET "https://bookstack.${SECRET_CLUSTER_DOMAIN}/api/books/$book/export/html" --header "Authorization: Token ${SECRET_BOOKSTACK_TOKEN_ID}:${SECRET_BOOKSTACK_TOKEN_SECRET}" --output $WORK_DIR/$shelf_slug/$book_slug.html
|
||||||
|
done
|
||||||
|
done
|
||||||
|
EOF
|
||||||
|
|
||||||
|
curl -m 10 --retry 5 http://healthchecks.monitoring.svc.cluster.local:8000/ping/d671a835-0731-448a-b20b-284500e5753a
|
||||||
|
volumeMounts:
|
||||||
|
- name: secret
|
||||||
|
mountPath: /opt/id_rsa
|
||||||
|
subPath: deployment-rsa-priv-key
|
||||||
|
volumes:
|
||||||
|
- name: secret
|
||||||
|
secret:
|
||||||
|
secretName: drone-pipelines
|
||||||
|
restartPolicy: Never
|
@@ -1,5 +1,6 @@
|
|||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
kind: Kustomization
|
kind: Kustomization
|
||||||
resources:
|
resources:
|
||||||
|
- export-job.yaml
|
||||||
- helm-release.yaml
|
- helm-release.yaml
|
||||||
- volumes.yaml
|
- volumes.yaml
|
||||||
|
@@ -22,7 +22,7 @@ spec:
|
|||||||
set -o errexit
|
set -o errexit
|
||||||
|
|
||||||
# space delimited secrets to copy
|
# space delimited secrets to copy
|
||||||
secrets="${SECRET_CLUSTER_CERTIFICATE_DEFAULT} regcred"
|
secrets="${SECRET_CLUSTER_CERTIFICATE_DEFAULT} regcred drone-pipelines"
|
||||||
# source namespace to reflect secret from
|
# source namespace to reflect secret from
|
||||||
namespace_source="networking"
|
namespace_source="networking"
|
||||||
# space delimited namespace where to reflect the secrets to
|
# space delimited namespace where to reflect the secrets to
|
||||||
|
@@ -25,6 +25,8 @@ stringData:
|
|||||||
SECRET_AUTHENTIK_SMTP_PASSWORD: ENC[AES256_GCM,data:3GG9ga/EuoQYdk0wl0wUcQ==,iv:X9cr9jpQObF9RkAPSf0M/CBve9YvWXrVdeu6RoIrtEo=,tag:AF+vgtirdBJ2AYzMi/fEqA==,type:str]
|
SECRET_AUTHENTIK_SMTP_PASSWORD: ENC[AES256_GCM,data:3GG9ga/EuoQYdk0wl0wUcQ==,iv:X9cr9jpQObF9RkAPSf0M/CBve9YvWXrVdeu6RoIrtEo=,tag:AF+vgtirdBJ2AYzMi/fEqA==,type:str]
|
||||||
SECRET_BOOKSTACK_DB_PASSWORD: ENC[AES256_GCM,data:i9Ky7+e2UHfh14EP9wus8Q==,iv:6grPFBXTg+Oj/jShYgpM84k65r6bKvXFg5b9St3PeTE=,tag:kEab7xSmieYtdeg0zAEyXg==,type:str]
|
SECRET_BOOKSTACK_DB_PASSWORD: ENC[AES256_GCM,data:i9Ky7+e2UHfh14EP9wus8Q==,iv:6grPFBXTg+Oj/jShYgpM84k65r6bKvXFg5b9St3PeTE=,tag:kEab7xSmieYtdeg0zAEyXg==,type:str]
|
||||||
SECRET_BOOKSTACK_DB_ROOT_PASSWORD: ENC[AES256_GCM,data:4/o956Da0ckVLdxUqs1WWA==,iv:G8DddhYyMZKuGJyWnj+eOaNRiJm7oGetiIZlQgtRFEo=,tag:WX9+DDnA2UPm9nPRLYibXw==,type:str]
|
SECRET_BOOKSTACK_DB_ROOT_PASSWORD: ENC[AES256_GCM,data:4/o956Da0ckVLdxUqs1WWA==,iv:G8DddhYyMZKuGJyWnj+eOaNRiJm7oGetiIZlQgtRFEo=,tag:WX9+DDnA2UPm9nPRLYibXw==,type:str]
|
||||||
|
SECRET_BOOKSTACK_TOKEN_ID: ENC[AES256_GCM,data:d+OuZJN/NvKja9bUhLESl52MeuaC875DhuWDF2gCC+M=,iv:x/E2lfWnDxKWC317laRfSiqlXZ2saiqgoGV6P+sOchE=,tag:a+ZRy1Dm5TM4oQ5SklhGYA==,type:str]
|
||||||
|
SECRET_BOOKSTACK_TOKEN_SECRET: ENC[AES256_GCM,data:dInN0nIxi9t4zZyKe5TDLrxB2Q4CBvBmD5t2F6NB2ak=,iv:8DyybtQzxxPJrpUrZ6FRK41X7VeMFZ5PxhoYCvzSOSE=,tag:4N7ZLRwhacoNi9B/IlvIyQ==,type:str]
|
||||||
SECRET_BOTKUBE_DISCORD_BOTID: ENC[AES256_GCM,data:bK1J9v+/Dajd9qrvz3lH49GY,iv:Hq6cY96Te1frwXVf3HC3qgOiaCZW2hHCqjVvvslUGFg=,tag:Dq0cUemHKfcdpx9hLkUekQ==,type:str]
|
SECRET_BOTKUBE_DISCORD_BOTID: ENC[AES256_GCM,data:bK1J9v+/Dajd9qrvz3lH49GY,iv:Hq6cY96Te1frwXVf3HC3qgOiaCZW2hHCqjVvvslUGFg=,tag:Dq0cUemHKfcdpx9hLkUekQ==,type:str]
|
||||||
SECRET_BOTKUBE_DISCORD_TOKEN: ENC[AES256_GCM,data:pDPm3TYITWApPZRMcSH6ijtPQQuHSd/PNT2Wy23tUp7uzluhHS5hvlujTkjk7oRb95kE6Gi2D8yDmNg=,iv:HQyMQiaRsjNIfPUTjLRVL/zchSdXFmevxaeruwGx3tk=,tag:l+po8014SaZd61DxE1T43A==,type:str]
|
SECRET_BOTKUBE_DISCORD_TOKEN: ENC[AES256_GCM,data:pDPm3TYITWApPZRMcSH6ijtPQQuHSd/PNT2Wy23tUp7uzluhHS5hvlujTkjk7oRb95kE6Gi2D8yDmNg=,iv:HQyMQiaRsjNIfPUTjLRVL/zchSdXFmevxaeruwGx3tk=,tag:l+po8014SaZd61DxE1T43A==,type:str]
|
||||||
SECRET_CLUSTER_CERTIFICATE_DEFAULT: ENC[AES256_GCM,data:NlCiFO/3sseKI3fVzQ4ajeMOrg==,iv:seSVdR5wkR8sf/PKSy7T3P5oCkbJI4sMNC8XWSJUnh0=,tag:jSjCQVDNPQ7c8Dlg8yozPg==,type:str]
|
SECRET_CLUSTER_CERTIFICATE_DEFAULT: ENC[AES256_GCM,data:NlCiFO/3sseKI3fVzQ4ajeMOrg==,iv:seSVdR5wkR8sf/PKSy7T3P5oCkbJI4sMNC8XWSJUnh0=,tag:jSjCQVDNPQ7c8Dlg8yozPg==,type:str]
|
||||||
@@ -94,8 +96,8 @@ sops:
|
|||||||
azure_kv: []
|
azure_kv: []
|
||||||
hc_vault: []
|
hc_vault: []
|
||||||
age: []
|
age: []
|
||||||
lastmodified: "2021-08-11T14:46:04Z"
|
lastmodified: "2021-08-17T14:23:32Z"
|
||||||
mac: ENC[AES256_GCM,data:IE6CWaM241i7TsDxHHFYzYscwOLKfOYb3P6vDl+3Q5P89TRh9Fjx7ibPj2fsaSAJ7HegBbB1F9k75bO5uuW5OKPv7UWb1SkHR2+ArvmHaNObaN5fbr4kMBcCaC7XzlfFbnKz+MJfP0xfn6nbBk2hjX6F/jhMA/WNWaYLphJmNxA=,iv:KW/y96vqvgXJm9iP6E6NY25kRv8OUlCEwZy+iwAxQVw=,tag:Agy6b0qs7YSrJXss0D2aMA==,type:str]
|
mac: ENC[AES256_GCM,data:QkzSO6LiygY54LB50XD8Po1I6q5aPK84X1+C23sSPOCeBXnxFkYlJ/XkV1oGnzGvwel68ew9h7rO7VcaRDUz7z9EgGxmkD1vGEguisH75qQ5yhCMxiiOyaOufoCD2AEx0rNE3eiz086J+tGUAh6bRrIViOYr7Pf0vPvc0BYHt+I=,iv:mWsmogq2L1i/Ni/7/zWYBxUSmzGZZOScmh7SpUQYQTM=,tag:NZ9U0lF125Gz9reqtEGLmQ==,type:str]
|
||||||
pgp:
|
pgp:
|
||||||
- created_at: "2021-07-17T21:14:34Z"
|
- created_at: "2021-07-17T21:14:34Z"
|
||||||
enc: |
|
enc: |
|
||||||
|
@@ -2,7 +2,7 @@ kind: Secret
|
|||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
metadata:
|
metadata:
|
||||||
name: drone-pipelines
|
name: drone-pipelines
|
||||||
namespace: development
|
namespace: networking
|
||||||
stringData:
|
stringData:
|
||||||
registry-username: ENC[AES256_GCM,data:0feiw+FkNQ==,iv:qlqyZnDaxDWSotJudzuVBnGRv4Nm5BkzcYvtzdXGG/c=,tag:6LpLEQWy9Bl6NrpgqslXVQ==,type:str]
|
registry-username: ENC[AES256_GCM,data:0feiw+FkNQ==,iv:qlqyZnDaxDWSotJudzuVBnGRv4Nm5BkzcYvtzdXGG/c=,tag:6LpLEQWy9Bl6NrpgqslXVQ==,type:str]
|
||||||
registry-password: ENC[AES256_GCM,data:bXkbSETYKwDpoulIcEE=,iv:kbDngo9bEnY2wuyy42rXb+zUvgFLY3LEpHTmk2sXDog=,tag:Q2rIX1k5tNLLx7sTEOMPXQ==,type:str]
|
registry-password: ENC[AES256_GCM,data:bXkbSETYKwDpoulIcEE=,iv:kbDngo9bEnY2wuyy42rXb+zUvgFLY3LEpHTmk2sXDog=,tag:Q2rIX1k5tNLLx7sTEOMPXQ==,type:str]
|
||||||
@@ -16,8 +16,8 @@ sops:
|
|||||||
azure_kv: []
|
azure_kv: []
|
||||||
hc_vault: []
|
hc_vault: []
|
||||||
age: []
|
age: []
|
||||||
lastmodified: "2021-07-17T21:15:46Z"
|
lastmodified: "2021-08-17T15:11:07Z"
|
||||||
mac: ENC[AES256_GCM,data:gi+0ATruo1hPLHGXHXNYrKtfHWp55KxAQyK/A2//c3zZ8s7XamBW76dWbPp7PnjlAMtmSbpfwOX1c2+vxIGuhwj6V18q0Kuezzg2WJdbm3wU0Gb4b5O2d71g1s/Pnpyxy/UjFN8U2DjYS1ueZbJIsO54VTA4U9ZQRZ7DWLyy7u0=,iv:LPzjZb8bo24n1CowNSkQY2o4VmQqA8vTwhWVhb2usew=,tag:/Hh6rVVZnMhMZq9wuIiv2Q==,type:str]
|
mac: ENC[AES256_GCM,data:hjSULr6lAuXyU9VOWWcJI1tRzi+jgMiiupKeKPcb0sA3nD5TnqSezNNe2bAzxQeqm8QKcVc94ZiSRR8FYAtaMx4VI1/+qJiB2Pj08G69g6ZQCteTd1sZpQ180Vo7tVf2QD8OoHEbPfupVf4Yd6+K1p+jGpkjG4Fr0Pw8j0JgRFk=,iv:DckGGVxlMJu/KQsj937EoCXLA4Kk2GniRf+W2O4L5J8=,tag:edlCI7W7NOa1EzHriIQc5A==,type:str]
|
||||||
pgp:
|
pgp:
|
||||||
- created_at: "2021-07-17T21:15:45Z"
|
- created_at: "2021-07-17T21:15:45Z"
|
||||||
enc: |
|
enc: |
|
||||||
|
Reference in New Issue
Block a user