diff --git a/images/cassandra/README.md b/images/cassandra/README.md index 37072ceec6..ae373da4c3 100644 --- a/images/cassandra/README.md +++ b/images/cassandra/README.md @@ -26,4 +26,50 @@ docker pull cgr.dev/chainguard/cassandra:latest + +## Deploying +Deploy a new instance of Cassandra using this image: + +```bash +docker run -d \ + --name cassandra \ + -e CASSANDRA_START_RPC=true \ + -p 9042:9042 cgr.dev/chainguard/cassandra:latest +``` + +You can use `nodetool status` command to check if Cassandra is running properly. +Note, it'll take a couple of minutes for Cassandra to become fully operational: + +```bash +docker exec -it cassandra nodetool status + +Datacenter: datacenter1 +======================= +Status=Up/Down +|/ State=Normal/Leaving/Joining/Moving +-- Address Load Tokens Owns (effective) Host ID Rack +UN 127.0.0.1 104.38 KiB 16 100.0% 0e75f72d-d273-4fac-807e-2b230583458c rack1 +``` + +`cqlsh` is available on the image: + +```bash +docker exec -i cassandra cqlsh -e " +CREATE KEYSPACE testkeyspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1}; +USE testkeyspace; +CREATE TABLE users (user_id UUID PRIMARY KEY, name text); +INSERT INTO users (user_id, name) VALUES (uuid(), 'Chainguard'); +SELECT * FROM users; +" + + user_id | name +--------------------------------------+------------ + 3f13c6b4-4a22-4de7-a1f6-a3ac6e887ddb | Chainguard + 67e3be15-07f9-4dd6-b9b9-c00037d705ac | Chainguard + +(2 rows) +``` + +For more information, refer to the [Cassandra documentation](https://cassandra.apache.org/_/quickstart.html). + diff --git a/images/cassandra/tests/main.tf b/images/cassandra/tests/main.tf index 300c90f938..10248d4a7a 100644 --- a/images/cassandra/tests/main.tf +++ b/images/cassandra/tests/main.tf @@ -1,6 +1,8 @@ terraform { required_providers { - oci = { source = "chainguard-dev/oci" } + oci = { source = "chainguard-dev/oci" } + imagetest = { source = "chainguard-dev/imagetest" } + kubernetes = { source = "hashicorp/kubernetes" version = "~> 2.28.1" @@ -197,3 +199,32 @@ resource "kubernetes_stateful_set" "cassandra" { service_name = kubernetes_service.cassandra.metadata[0].name } } + +data "imagetest_inventory" "this" {} + +resource "imagetest_harness_docker" "docker" { + name = "cassandra" + inventory = data.imagetest_inventory.this + + mounts = [{ + source = path.module + destination = "/tests" + }] + + envs = { + IMAGE_NAME : var.digest + } +} + +resource "imagetest_feature" "basic" { + harness = imagetest_harness_docker.docker + name = "Basic" + description = "Run Cassandra functionality tests." + + steps = [ + { + name = "Cassandra tests" + cmd = "/tests/run-tests.sh" + } + ] +} diff --git a/images/cassandra/tests/run-tests.sh b/images/cassandra/tests/run-tests.sh new file mode 100755 index 0000000000..8c14ebebb0 --- /dev/null +++ b/images/cassandra/tests/run-tests.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash + +set -o errexit -o nounset -o pipefail -x + +# Start a Cassandra container +CASSANDRA_CONTAINER=$(docker run -d -e CASSANDRA_START_RPC=true $IMAGE_NAME) + +# Wait for Cassandra to start +MAX_RETRIES=10 +RETRY_INTERVAL=10 + +for ((i=0; i