Skip to content

Add support for the RBAC feature. #174

Add support for the RBAC feature.

Add support for the RBAC feature. #174

Workflow file for this run

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'
VALUES_INLINE: '--set env.PERSISTENCE_LSM_ACCESS_STRATEGY=pread'
RBAC: 'true'
RBAC_CONFIG: './rbac-config.yaml'
VALUES_OVERRIDE: |
storage:
size: 50Gi
env:
ASYNC_INDEXING: true
LOG_LEVEL: debug
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