test: add setup and docs for running API tests in K8s (#12107)

* test: add locak k8s setup

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

* chore: move k8s config files

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

* fix: add host alias

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

* fix: remove unsed dir

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

* ci: use script to expose external servers to the cluster

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

* ci: expose using existing script

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

* docs: add docs

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

* docs: refer k8s setup docs

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

* ci: specify namespace

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

* ci: create namespace

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

* docs: fix docs errors

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

* test: patch chart template only once

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

* docs: add toc and setup cleanup

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

* chore: remove deprecated --atomic helm option

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

* test: add k8s namespace wrapper option

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

* test: fix logs dir permissions

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

* docs: update docs

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

* test: fix host ip detection

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

* docs: add show-logs command and warning for external services

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>

---------

Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
This commit is contained in:
Sawjan Gurung
2026-03-19 15:26:57 +05:45
committed by GitHub
parent 2a163e7075
commit 9ac0452d61
24 changed files with 429 additions and 361 deletions

View File

@@ -3975,18 +3975,10 @@ def k3sCluster(name = OCIS_SERVER_NAME, ocm = False):
if ocm:
commands.extend([
# wait for peer
"echo 'Waiting for %s to be available...'" % peer_name,
"for i in {1..60}; do if getent hosts %s > /dev/null 2>&1; then break; fi; echo 'Waiting for %s... attempt '$i; sleep 2; done" % (peer_name, peer_name),
# get the IP of peer
"PEER_IP=$(getent hosts %s | awk '{ print $1 }')" % peer_name,
"echo \"%s IP: $PEER_IP\"" % peer_name,
# create namespace for ocis
"kubectl create namespace ocis --dry-run=client -o yaml | kubectl apply -f -",
# create service in the 'ocis' namespace
"cat <<EOF | kubectl apply -f -\napiVersion: v1\nkind: Service\nmetadata:\n name: %s\n namespace: ocis\nspec:\n type: ClusterIP\n clusterIP: None\n ports:\n - port: 443\n protocol: TCP\n---\napiVersion: v1\nkind: Endpoints\nmetadata:\n name: %s\n namespace: ocis\nsubsets:\n- addresses:\n - ip: $PEER_IP\n ports:\n - port: 443\n protocol: TCP\nEOF" % (peer_name, peer_name),
# verify
"kubectl get svc %s -n ocis" % peer_name,
"kubectl get endpoints %s -n ocis" % peer_name,
"until getent hosts %s >/dev/null 2>&1; do echo 'Waiting for %s...'; sleep 2; done" % (peer_name, peer_name),
# create namespace
"kubectl create namespace ocis || true",
"bash %s/tests/config/k8s/expose-external-svc.sh -n ocis %s:443" % (dirs["base"], peer_name),
])
commands.extend([
@@ -4025,7 +4017,7 @@ def prepareChartsK8s(environment = []):
"[ ! -d %s/ocis-charts ] && " % dirs["base"] +
"git clone --single-branch -b main --depth 1 https://github.com/owncloud/ocis-charts.git",
# prepare charts for the tests
"bash %s/tests/config/drone/k8s/setup.sh %s/ocis-charts" % (dirs["base"], dirs["base"]),
"bash %s/tests/config/k8s/setup.sh %s/ocis-charts" % (dirs["base"], dirs["base"]),
]
return [{
@@ -4070,10 +4062,6 @@ def deployOcisK8s(name = OCIS_SERVER_NAME):
"cd %s/ocis-charts" % dirs["base"],
# update external domain
"sed -i 's|externalDomain:.*|externalDomain: %s|' ./charts/ocis/ci/deployment-values.yaml" % name,
# [NOTE]
# Remove schema validation to add extra configs in values.yaml.
# Also this allows us to use fakeoffice as web-office server
"rm ./charts/ocis/values.schema.json || true",
# deploy ocis
"make helm-install-atomic",
],
@@ -4134,15 +4122,10 @@ def exposeNodePortsK8s(services = [], name = OCIS_SERVER_NAME):
}]
def exposeExternalServersK8s(servers = [], name = OCIS_SERVER_NAME):
commands = []
servers_arg = []
for server in servers:
server_name = server[0]
server_port = str(server[1])
commands.append("SERVER_IP=$(getent hosts %s | awk '{print $1}')" % server_name)
commands.append('echo -e "apiVersion: v1\nkind: Endpoints\nmetadata:\n name: %s\n namespace: ocis\n' % server_name +
'subsets:\n- addresses:\n - ip: $SERVER_IP\n ports:\n - port: %s" | kubectl apply -f -' % server_port)
commands.append('echo -e "apiVersion: v1\nkind: Service\nmetadata:\n name: %s\n namespace: ocis\n' % server_name +
'spec:\n ports:\n - port: %s\n targetPort: %s" | kubectl apply -f -' % (server_port, server_port))
servers_arg.append("%s:%s" % (server[0], str(server[1])))
servers_arg = ",".join(servers_arg)
return [{
"name": "expose-external-servers",
@@ -4150,5 +4133,6 @@ def exposeExternalServersK8s(servers = [], name = OCIS_SERVER_NAME):
"commands": [
"export KUBECONFIG=kubeconfig-$${DRONE_BUILD_NUMBER}-%s.yaml" % name,
"until test -f $${KUBECONFIG}; do sleep 1s; done",
] + commands,
"bash %s/tests/config/k8s/expose-external-svc.sh -n ocis %s" % (dirs["base"], servers_arg),
],
}]