Add support for the RBAC feature. #177
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Weaviate Local Kubernetes Action | |
on: | |
pull_request: | |
types: [opened, synchronize] | |
jobs: | |
run-weaviate-local-k8s-basic: | |
runs-on: ubuntu-latest | |
name: Invoke weaviate-local-k8s action with basic parameters | |
env: | |
WORKERS: '3' | |
REPLICAS: '5' | |
WEAVIATE_VERSION: '1.26.3' | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v2 | |
- name: Deploy weaviate-local-k8s from current branch. | |
id: invoke-local-k8s | |
uses: ./ | |
with: | |
workers: ${{ env.WORKERS }} | |
replicas: ${{ env.REPLICAS }} | |
weaviate-version: ${{ env.WEAVIATE_VERSION }} | |
- name: Check the configured values | |
run: | | |
replicas=$(kubectl get sts weaviate -n weaviate -o=jsonpath="{.spec.replicas}") | |
if [[ "$replicas" -ne ${{ env.REPLICAS }} ]]; then | |
echo "Error: Replicas count is not equal to ${{ env.REPLICAS }}. Found $replicas" | |
exit 1 | |
fi | |
workers=$(kubectl get nodes --selector=node-role.kubernetes.io/control-plane!= --no-headers | wc -l) | |
if [[ "$workers" -ne ${{ env.WORKERS }} ]]; then | |
echo "Error: Workers count is not equal to ${{ env.WORKERS }}. Found $workers" | |
exit 1 | |
fi | |
versions=$(curl -s http://127.0.0.1:8080/v1/nodes | jq '.nodes[] | .version' | tr -d '"') | |
for version in `echo $versions | tr '\n' ' '`; do | |
if [[ "$version" != "${{ env.WEAVIATE_VERSION }}" ]]; then | |
echo "Error: Version is not equal to ${{ env.WEAVIATE_VERSION }}. Found $version" | |
exit 1 | |
fi | |
done | |
error=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:2112/metrics) | |
if [[ "$error" -ne 200 ]]; then | |
echo "Error: Weaviate metrics is not listening, returned $error" | |
exit 1 | |
fi | |
run-weaviate-local-k8s-all-params: | |
runs-on: ubuntu-latest | |
name: Invoke weaviate-local-k8s action passing all parameters | |
env: | |
WORKERS: '3' | |
REPLICAS: '6' | |
WEAVIATE_VERSION: '1.25.0' | |
WEAVIATE_PORT: '8081' | |
WEAVIATE_GRPC_PORT: '50052' | |
HELM_BRANCH: 'master' | |
ENABLE_BACKUP: 'true' | |
RBAC: 'true' | |
RBAC_CONFIG: './rbac-config.yaml' | |
VALUES_OVERRIDE: | | |
storage: | |
size: 50Gi | |
env: | |
ASYNC_INDEXING: true | |
LOG_LEVEL: debug | |
VALUES_INLINE: '--set env.PERSISTENCE_LSM_ACCESS_STRATEGY=pread' | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v2 | |
- name: Create RBAC config file | |
run: | | |
cat > rbac-config.yaml << 'EOF' | |
authentication: | |
anonymous_access: | |
enabled: false | |
apikey: | |
enabled: true | |
allowed_keys: | |
- admin-key | |
- reader-key | |
users: | |
- admin | |
- reader | |
roles: | |
- admin | |
- reader | |
oidc: | |
enabled: false | |
authorization: | |
admin_list: | |
enabled: true | |
users: | |
- admin | |
- reader | |
EOF | |
- name: Deploy weaviate-local-k8s from current branch. | |
id: invoke-local-k8s | |
uses: ./ | |
with: | |
workers: ${{ env.WORKERS }} | |
replicas: ${{ env.REPLICAS }} | |
weaviate-version: ${{ env.WEAVIATE_VERSION }} | |
weaviate-port: ${{ env.WEAVIATE_PORT }} | |
weaviate-grpc-port: ${{ env.WEAVIATE_GRPC_PORT }} | |
helm-branch: ${{ env.HELM_BRANCH }} | |
values-override: ${{ env.VALUES_OVERRIDE }} | |
enable-backup: ${{ env.ENABLE_BACKUP }} | |
values-inline: ${{ env.VALUES_INLINE }} | |
observability: 'true' | |
rbac: ${{ env.RBAC }} | |
rbac-config: ${{ env.RBAC_CONFIG }} | |
- name: Check the configured values | |
run: | | |
replicas=$(kubectl get sts weaviate -n weaviate -o=jsonpath="{.spec.replicas}") | |
if [[ "$replicas" -ne ${{ env.REPLICAS }} ]]; then | |
echo "Error: Replicas count is not equal to ${{ env.REPLICAS }}. Found $replicas" | |
exit 1 | |
fi | |
workers=$(kubectl get nodes --selector=node-role.kubernetes.io/control-plane!= --no-headers | wc -l) | |
if [[ "$workers" -ne ${{ env.WORKERS }} ]]; then | |
echo "Error: Workers count is not equal to ${{ env.WORKERS }}. Found $workers" | |
exit 1 | |
fi | |
versions=$(curl -H "Authorization: Bearer admin-key" -s http://127.0.0.1:${{ env.WEAVIATE_PORT }}/v1/nodes | jq '.nodes[] | .version' | tr -d '"') | |
for version in `echo $versions | tr '\n' ' '`; do | |
if [[ "$version" != "1.25.0" ]]; then | |
echo "Error: Version is not equal to 1.25.0. Found $version" | |
exit 1 | |
fi | |
done | |
error=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:9091/metrics) | |
if [[ "$error" -ne 200 ]]; then | |
echo "Error: Prometheus is not listening, returned $error" | |
exit 1 | |
fi | |
error=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/) | |
if [[ "$error" -ne 200 ]]; then | |
echo "Error: Grafana is not listening, returned $error" | |
exit 1 | |
fi | |
error=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:2112/metrics) | |
if [[ "$error" -ne 200 ]]; then | |
echo "Error: Weaviate metrics is not listening, returned $error" | |
exit 1 | |
fi | |
env_value=$(kubectl get sts weaviate -n weaviate -o=jsonpath='{.spec.template.spec.containers[0].env[?(@.name=="ASYNC_INDEXING")].value}') | |
if [[ "$env_value" != "true" ]]; then | |
echo "Error: env.ASYNC_INDEXING is not equal to true. Found $env_value" | |
exit 1 | |
fi | |
env_value=$(kubectl get sts weaviate -n weaviate -o=jsonpath='{.spec.template.spec.containers[0].env[?(@.name=="LOG_LEVEL")].value}') | |
if [[ "$env_value" != "debug" ]]; then | |
echo "Error: env.LOG_LEVEL is not equal to debug. Found $env_value" | |
exit 1 | |
fi | |
env_value=$(kubectl get sts weaviate -n weaviate -o=jsonpath='{.spec.template.spec.containers[0].env[?(@.name=="PERSISTENCE_LSM_ACCESS_STRATEGY")].value}') | |
if [[ "$env_value" != "pread" ]]; then | |
echo "Error: env.PERSISTENCE_LSM_ACCESS_STRATEGY is not equal to pread. Found $env_value" | |
exit 1 | |
fi | |
run-weaviate-local-k8s-which-fails: | |
runs-on: ubuntu-latest | |
name: Create a single-node Weaviate cluster with non existing image. | |
env: | |
WORKERS: '1' | |
REPLICAS: '1' | |
WEAVIATE_VERSION: 'idontexist_youdidntseeme' | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v2 | |
- name: Deploy weaviate-local-k8s from current branch. | |
id: invoke-local-k8s | |
uses: ./ | |
with: | |
workers: ${{ env.WORKERS }} | |
replicas: ${{ env.REPLICAS }} | |
weaviate-version: ${{ env.WEAVIATE_VERSION }} | |
continue-on-error: true | |
- name: Check that deployment failed | |
if: steps.invoke-local-k8s.outcome == 'success' | |
run: | | |
echo "The previous step should have failed, but it didn't" | |
exit 1 | |
- name: Check that the deployment failed | |
run: | | |
availableReplicas=$(kubectl get sts weaviate -n weaviate -o=jsonpath='{.status.availableReplicas}') | |
if [[ "$replicas" -ne "0" ]]; then | |
echo "Error: Replicas count should be 0. Found $replicas" | |
exit 1 | |
fi | |
run-weaviate-local-k8s-with-module: | |
runs-on: ubuntu-latest | |
name: Invoke weaviate-local-k8s action with text2vec-contextionary module | |
env: | |
WORKERS: '2' | |
REPLICAS: '3' | |
WEAVIATE_VERSION: '1.26.3' | |
MODULES: 'text2vec-contextionary' | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v2 | |
- name: Deploy weaviate-local-k8s from current branch. | |
id: invoke-local-k8s | |
uses: ./ | |
with: | |
workers: ${{ env.WORKERS }} | |
replicas: ${{ env.REPLICAS }} | |
weaviate-version: ${{ env.WEAVIATE_VERSION }} | |
modules: ${{ env.MODULES }} | |
- name: Check the configured values | |
run: | | |
replicas=$(kubectl get sts weaviate -n weaviate -o=jsonpath="{.status.availableReplicas}") | |
if [[ "$replicas" -ne ${{ env.REPLICAS }} ]]; then | |
echo "Error: Replicas count is not equal to ${{ env.REPLICAS }}. Found $replicas" | |
exit 1 | |
fi | |
workers=$(kubectl get nodes --selector=node-role.kubernetes.io/control-plane!= --no-headers | wc -l) | |
if [[ "$workers" -ne ${{ env.WORKERS }} ]]; then | |
echo "Error: Workers count is not equal to ${{ env.WORKERS }}. Found $workers" | |
exit 1 | |
fi | |
versions=$(curl -s http://127.0.0.1:8080}/v1/nodes | jq '.nodes[] | .version' | tr -d '"') | |
for version in `echo $versions | tr '\n' ' '`; do | |
if [[ "$version" != "${{ env.WEAVIATE_VERSION }}" ]]; then | |
echo "Error: Version is not equal to ${{ env.WEAVIATE_VERSION }}. Found $version" | |
exit 1 | |
fi | |
done | |
contextionary=$(kubectl get deployment contextionary -n weaviate -o=jsonpath="{.status.availableReplicas}") | |
if [[ "$contextionary" -ne "1" ]]; then | |
echo "Error: Contextionary replicas count is not equal to 1. Found $contextionary" | |
exit 1 | |
fi | |
error=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:2112/metrics) | |
if [[ "$error" -ne 200 ]]; then | |
echo "Error: Weaviate metrics is not listening, returned $error" | |
exit 1 | |
fi | |
run-weaviate-local-k8s-upgrade: | |
runs-on: ubuntu-latest | |
name: Invoke weaviate-local-k8s upgrade from non-RAFT to non-RAFT with basic parameters | |
env: | |
WORKERS: '2' | |
REPLICAS: '2' | |
WEAVIATE_VERSION: '1.26.2' | |
UPGRADE_VERSION: '1.26.3' | |
HELM_BRANCH: 'v16.8.8' | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v2 | |
- name: Deploy weaviate-local-k8s from current branch. | |
id: invoke-local-k8s | |
uses: ./ | |
with: | |
workers: ${{ env.WORKERS }} | |
replicas: ${{ env.REPLICAS }} | |
helm-branch: ${{ env.HELM_BRANCH }} | |
weaviate-version: ${{ env.WEAVIATE_VERSION }} | |
- name: Upgrade weaviate-local-k8s to non-RAFT from current branch. | |
uses: ./ | |
with: | |
operation: upgrade | |
workers: ${{ env.WORKERS }} | |
replicas: ${{ env.REPLICAS }} | |
helm-branch: ${{ env.HELM_BRANCH }} | |
weaviate-version: ${{ env.UPGRADE_VERSION }} | |
- name: Check the configured values | |
run: | | |
replicas=$(kubectl get sts weaviate -n weaviate -o=jsonpath="{.spec.replicas}") | |
if [[ "$replicas" -ne ${{ env.REPLICAS }} ]]; then | |
echo "Error: Replicas count is not equal to ${{ env.REPLICAS }}. Found $replicas" | |
exit 1 | |
fi | |
workers=$(kubectl get nodes --selector=node-role.kubernetes.io/control-plane!= --no-headers | wc -l) | |
if [[ "$workers" -ne ${{ env.WORKERS }} ]]; then | |
echo "Error: Workers count is not equal to ${{ env.WORKERS }}. Found $workers" | |
exit 1 | |
fi | |
versions=$(curl -s http://127.0.0.1:8080/v1/nodes | jq '.nodes[] | .version' | tr -d '"') | |
for version in `echo $versions | tr '\n' ' '`; do | |
if [[ "$version" != "${{ env.UPGRADE_VERSION }}" ]]; then | |
echo "Error: Version is not equal to ${{ env.UPGRADE_VERSION }}. Found $version" | |
exit 1 | |
fi | |
done | |
error=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:2112/metrics) | |
if [[ "$error" -ne 200 ]]; then | |
echo "Error: Weaviate metrics is not listening, returned $error" | |
exit 1 | |
fi | |
run-weaviate-local-k8s-raft-upgrade: | |
runs-on: ubuntu-latest | |
name: Invoke weaviate-local-k8s upgrade to RAFT with basic parameters | |
env: | |
WORKERS: '3' | |
REPLICAS: '5' | |
WEAVIATE_VERSION: '1.24.9' | |
UPGRADE_VERSION: '1.25.0' | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v2 | |
- name: Deploy weaviate-local-k8s from current branch. | |
id: invoke-local-k8s | |
uses: ./ | |
with: | |
workers: ${{ env.WORKERS }} | |
replicas: ${{ env.REPLICAS }} | |
weaviate-version: ${{ env.WEAVIATE_VERSION }} | |
helm-branch: 'v16.8.8' | |
- name: Upgrade weaviate-local-k8s to RAFT from current branch. | |
uses: ./ | |
with: | |
operation: upgrade | |
workers: ${{ env.WORKERS }} | |
replicas: ${{ env.REPLICAS }} | |
delete-sts: 'true' | |
weaviate-version: ${{ env.UPGRADE_VERSION }} | |
- name: Check the configured values | |
run: | | |
replicas=$(kubectl get sts weaviate -n weaviate -o=jsonpath="{.spec.replicas}") | |
if [[ "$replicas" -ne ${{ env.REPLICAS }} ]]; then | |
echo "Error: Replicas count is not equal to ${{ env.REPLICAS }}. Found $replicas" | |
exit 1 | |
fi | |
workers=$(kubectl get nodes --selector=node-role.kubernetes.io/control-plane!= --no-headers | wc -l) | |
if [[ "$workers" -ne ${{ env.WORKERS }} ]]; then | |
echo "Error: Workers count is not equal to ${{ env.WORKERS }}. Found $workers" | |
exit 1 | |
fi | |
versions=$(curl -s http://127.0.0.1:8080/v1/nodes | jq '.nodes[] | .version' | tr -d '"') | |
for version in `echo $versions | tr '\n' ' '`; do | |
if [[ "$version" != "${{ env.UPGRADE_VERSION }}" ]]; then | |
echo "Error: Version is not equal to ${{ env.UPGRADE_VERSION }}. Found $version" | |
exit 1 | |
fi | |
done | |
error=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:2112/metrics) | |
if [[ "$error" -ne 200 ]]; then | |
echo "Error: Weaviate metrics is not listening, returned $error" | |
exit 1 | |
fi | |
run-weaviate-local-k8s-backup: | |
runs-on: ubuntu-latest | |
name: Invoke weaviate-local-k8s action with support for backup | |
env: | |
WORKERS: '1' | |
REPLICAS: '5' | |
WEAVIATE_VERSION: '1.26.3' | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v2 | |
- name: Deploy weaviate-local-k8s from current branch. | |
id: invoke-local-k8s | |
uses: ./ | |
with: | |
workers: ${{ env.WORKERS }} | |
replicas: ${{ env.REPLICAS }} | |
enable-backup: 'true' | |
weaviate-version: ${{ env.WEAVIATE_VERSION }} | |
- name: Check the configured values | |
run: | | |
replicas=$(kubectl get sts weaviate -n weaviate -o=jsonpath="{.spec.replicas}") | |
if [[ "$replicas" -ne ${{ env.REPLICAS }} ]]; then | |
echo "Error: Replicas count is not equal to ${{ env.REPLICAS }}. Found $replicas" | |
exit 1 | |
fi | |
workers=$(kubectl get nodes --selector=node-role.kubernetes.io/control-plane!= --no-headers | wc -l) | |
if [[ "$workers" -ne ${{ env.WORKERS }} ]]; then | |
echo "Error: Workers count is not equal to ${{ env.WORKERS }}. Found $workers" | |
exit 1 | |
fi | |
versions=$(curl -s http://127.0.0.1:8080/v1/nodes | jq '.nodes[] | .version' | tr -d '"') | |
for version in `echo $versions | tr '\n' ' '`; do | |
if [[ "$version" != "${{ env.WEAVIATE_VERSION }}" ]]; then | |
echo "Error: Version is not equal to ${{ env.WEAVIATE_VERSION }}. Found $version" | |
exit 1 | |
fi | |
done | |
error=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:2112/metrics) | |
if [[ "$error" -ne 200 ]]; then | |
echo "Error: Weaviate metrics is not listening, returned $error" | |
exit 1 | |
fi | |
echo "Create a collection" | |
curl -X POST -H "Content-Type: application/json" \ | |
-d '{ | |
"class": "Article" | |
}' \ | |
http://localhost:8080/v1/schema | |
echo "Create a backup" | |
curl -X POST -H "Content-Type: application/json" \ | |
-d '{ | |
"id": "test-backup" | |
}' \ | |
http://localhost:8080/v1/backups/s3 | |
response=$(curl -s http://localhost:8080/v1/backups/s3/test-backup) | |
if echo "$response" | jq -e '.status == "STARTED" or .status == "SUCCEEDED"' > /dev/null 2>&1; then | |
echo "The backup has been started." | |
else | |
echo "The backup status is not STARTED/SUCCEEDED or the json output is not the expected." | |
exit 1 | |
fi |