c4k-nextcloud/src/test/resources/local-integration-test
2021-12-15 18:59:46 +01:00
..
certificate.yaml Local integration test 2021-12-15 12:49:57 +00:00
integration-test.puml [skip ci] add puml for integrationtest 2021-12-15 18:59:46 +01:00
kubectl.sh Local integration test 2021-12-15 12:49:57 +00:00
localstack.yaml Local integration test 2021-12-15 12:49:57 +00:00
README.md Local integration test 2021-12-15 12:49:57 +00:00
setup-docker.sh Local integration test 2021-12-15 12:49:57 +00:00
setup-local-s3-on-k3d.sh Local integration test 2021-12-15 12:49:57 +00:00
setup-local-s3.sh Local integration test 2021-12-15 12:49:57 +00:00
setup-local.sh Local integration test 2021-12-15 12:49:57 +00:00
start-k3d.sh Local integration test 2021-12-15 12:49:57 +00:00
start-k3s.sh Local integration test 2021-12-15 12:49:57 +00:00

Usage

setup-local-s3.sh [BUCKET_NAME]:

  • [BUCKET_NAME] is optional, "mybucket" will be used if not specified
  • sets up a k3s instance
  • installs a localstack pod
  • creates http and https routing to localstack via localhost
  • saves the self-signed certificate as ca.crt
  • uses the certificate to initialize a restic repo at https://k3stesthost/BUCKET_NAME

Note: In case of not being able to connect to "k3stesthost/health", you might need to ensure that the ingress' ip matches with the required host names: k3stesthost and cloudhost. With sudo k3s kubectl get ingress you can view the ingress' ip (e.g. 10.0.2.15), then add a line to file "/etc/hosts" e.g. 10.0.2.15 k3stesthost cloudhost

start-k3s.sh:

  • creates and starts a k3s instance

k3s-uninstall.sh:

  • deletes everything k3s related

Other useful commands

  • sudo k3s kubectl get pods
  • curl k3stesthost/health expected: {"services": {"s3": "running"}, "features": {"persistence": "disabled", "initScripts": "initialized"}}

Requires AWS-CLI

  • create bucket aws --endpoint-url=http://k3stesthost s3 mb s3://mybucket
  • list buckets aws --endpoint-url=http://k3stesthost s3 ls
  • upload something aws --endpoint-url=http://k3stesthost s3 cp test.txt s3://mybucket
  • check files aws --endpoint-url=http://k3stesthost s3 ls s3://mybucket

Run docker locally

docker pull docker:19.03.12-dind
docker run -d --privileged --name integration-test docker:19.03.12-dind
docker exec integration-test sh -c "apk add bash"

Set up docker container integration-test:

docker cp  ../../../../../c4k-nextcloud/ integration-test:/
docker exec -it integration-test sh
cd /c4k-nextcloud/src/test/resources/local-integration-test
./setup-docker.sh

Deploy nextcloud

Requirements

  • leiningen (install with: sudo apt install leiningen )
  • In the project's root execute: lein uberjar
  • Change file "valid-config.edn" according to your settings (e.g. :fqdn "cloudhost" and :restic-repository "s3://k3stesthost:mybucket").

Deploy to k3s

  • Create and deploy the k8s yaml: java -jar target/uberjar/c4k-nextcloud-standalone.jar valid-config.edn valid-auth.edn | sudo k3s kubectl apply -f -

Some of the steps may take some min to be effective, but eventually nextcloud should be available at: https://cloudhost

Deploy to k3d

k3d is a k3s system which is running inside of a container. To install k3d run curl -s https://raw.githubusercontent.com/rancher/k3d/main/install.sh | bash or have a look at https://k3d.io/v5.0.3/ .

  • Start a k3d cluster to deploy s3, nextcloud and test backup and restore on it: ./setup-local-s3-on-k3d.sh

Some steps may take a couple of minutes to be effective, but eventually nextcloud should be available at: https://cloudhost

Remove k3d cluster

k3d cluster delete nextcloud

Test in local gitlab runner

See https://stackoverflow.com/questions/32933174/use-gitlab-ci-to-run-tests-locally

This needs to be done in the project root

docker run -d --name gitlab-runner --restart always -v $PWD:$PWD -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest

docker exec -it -w $PWD gitlab-runner gitlab-runner exec docker nextcloud-integrationtest --docker-privileged --docker-volumes '/var/run/docker.sock:/var/run/docker.sock'