Skip to content

Commit

Permalink
Image: adds cassandra (#1164)
Browse files Browse the repository at this point in the history
* attempt to add cassandra

Signed-off-by: Mritunjay <mritunjay.sharma@chainguard.dev>

* cassandra fixes

Signed-off-by: Mritunjay <mritunjay.sharma@chainguard.dev>

* testing with new chanegs

Signed-off-by: Mritunjay <mritunjay.sharma@chainguard.dev>

* using cassandra -f

Signed-off-by: Mritunjay <mritunjay.sharma@chainguard.dev>

* adding workdir

Signed-off-by: Mritunjay <mritunjay.sharma@chainguard.dev>

* fixes in tests

Signed-off-by: Mritunjay <mritunjay.sharma@chainguard.dev>

* removes bash

Signed-off-by: Mritunjay <mritunjay.sharma@chainguard.dev>

* adds k8s manifest and tests

Signed-off-by: Mritunjay <mritunjay.sharma@chainguard.dev>

* terraform fmts

Signed-off-by: Mritunjay <mritunjay.sharma@chainguard.dev>

* fixes template file

Signed-off-by: Mritunjay <mritunjay.sharma@chainguard.dev>

* uses kubectl manifest

Signed-off-by: Mritunjay <mritunjay.sharma@chainguard.dev>

* uses stateful_set resource and makes k8s provider to root main tf

Signed-off-by: Mritunjay <mritunjay.sharma@chainguard.dev>

* testing with k8s provider in tests/main.tf

Signed-off-by: Mritunjay <mritunjay.sharma@chainguard.dev>

* refactors namespace and services

Signed-off-by: Mritunjay <mritunjay.sharma@chainguard.dev>

* removes readiness probe

Signed-off-by: Mritunjay <mritunjay.sharma@chainguard.dev>

* minor refactors

Signed-off-by: Mritunjay <mritunjay.sharma@chainguard.dev>

---------

Signed-off-by: Mritunjay <mritunjay.sharma@chainguard.dev>
  • Loading branch information
mritunjaysharma394 authored Aug 11, 2023
1 parent bcfcc4e commit 4128e35
Show file tree
Hide file tree
Showing 7 changed files with 324 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
| [busybox](./images/busybox) | `cgr.dev/chainguard/busybox` | stable | [![](https://storage.googleapis.com/chainguard-images-build-outputs/badges/busybox.build.status.latest.alpine.svg)](https://registry-ui.chainguard.app/?image=cgr.dev/chainguard/busybox:latest.alpine) |
| [cadvisor](./images/cadvisor) | `cgr.dev/chainguard/cadvisor` | stable | [![](https://storage.googleapis.com/chainguard-images-build-outputs/badges/cadvisor.build.status.latest.svg)](https://registry-ui.chainguard.app/?image=cgr.dev/chainguard/cadvisor:latest) |
| [calico](./images/calico) | `cgr.dev/chainguard/calico` | stable | [![](https://storage.googleapis.com/chainguard-images-build-outputs/badges/calico.build.status.latest.node.svg)](https://registry-ui.chainguard.app/?image=cgr.dev/chainguard/calico:latest.node) |
| [cassandra](./images/cassandra) | `cgr.dev/chainguard/cassandra` | stable | [![](https://storage.googleapis.com/chainguard-images-build-outputs/badges/cassandra.build.status.latest.svg)](https://registry-ui.chainguard.app/?image=cgr.dev/chainguard/cassandra:latest) |
| [cc-dynamic](./images/cc-dynamic) | `cgr.dev/chainguard/cc-dynamic` | deprecated | [![](https://storage.googleapis.com/chainguard-images-build-outputs/badges/cc-dynamic.build.status.latest.svg)](https://registry-ui.chainguard.app/?image=cgr.dev/chainguard/cc-dynamic:latest) |
| [cedar](./images/cedar) | `cgr.dev/chainguard/cedar` | stable | [![](https://storage.googleapis.com/chainguard-images-build-outputs/badges/cedar.build.status.latest.svg)](https://registry-ui.chainguard.app/?image=cgr.dev/chainguard/cedar:latest) |
| [cert-manager](./images/cert-manager) | `cgr.dev/chainguard/cert-manager` | stable | [![](https://storage.googleapis.com/chainguard-images-build-outputs/badges/cert-manager.build.status.latest.svg)](https://registry-ui.chainguard.app/?image=cgr.dev/chainguard/cert-manager:latest) |
Expand Down
14 changes: 14 additions & 0 deletions images/cassandra/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!--monopod:start-->
# cassandra
| | |
| - | - |
| **Status** | stable |
| **OCI Reference** | `cgr.dev/chainguard/cassandra` |


* [View Image in Chainguard Academy](https://edu.chainguard.dev/chainguard/chainguard-images/reference/cassandra/overview/)
* [View Image Catalog](https://console.enforce.dev/images/catalog) for a full list of available tags.
*[Contact Chainguard](https://www.chainguard.dev/chainguard-images) for enterprise support, SLAs, and access to older tags.*

---
<!--monopod:end-->
50 changes: 50 additions & 0 deletions images/cassandra/configs/latest.apko.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
contents:
packages:
- cassandra
- python3
- busybox
- cassandra-compat
- bash
accounts:
groups:
- groupname: cassandra
gid: 999
users:
- username: cassandra
uid: 999
run-as: 999

work-dir: /

entrypoint:
command: cassandra -f
environment:
LANG: en_US.UTF-8
CASSANDRA_HOME: /opt/cassandra
PATH: /usr/sbin:/sbin:/usr/bin:/bin:/opt/cassandra/bin/

paths:
- path: /var/lib/cassandra
type: directory
permissions: 0o777
uid: 999
gid: 999
recursive: true
- path: /opt/cassandra
type: directory
permissions: 0o777
uid: 999
gid: 999
recursive: true
- path: /var/lib/cassandra
type: directory
permissions: 0o777
uid: 999
gid: 999
- path: /var/log/cassandra
type: directory
permissions: 0o777
uid: 999
gid: 999
recursive: true

3 changes: 3 additions & 0 deletions images/cassandra/image.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
versions:
- apko:
config: configs/latest.apko.yaml
54 changes: 54 additions & 0 deletions images/cassandra/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
terraform {
required_providers {
apko = { source = "chainguard-dev/apko" }
}
}

variable "target_repository" {
description = "The docker repo into which the image and attestations should be published."
}

module "latest" {
source = "../../tflib/publisher"

name = basename(path.module)

target_repository = var.target_repository
config = file("${path.module}/configs/latest.apko.yaml")
}

module "dev" { source = "../../tflib/dev-subvariant" }

module "latest-dev" {
source = "../../tflib/publisher"

name = basename(path.module)

target_repository = var.target_repository
# Make the dev variant an explicit extension of the
# locked original.
config = jsonencode(module.latest.config)
extra_packages = module.dev.extra_packages
}

module "version-tags" {
source = "../../tflib/version-tags"
package = "cassandra"
config = module.latest.config
}

module "test-latest" {
source = "./tests"
digest = module.latest.image_ref
}

module "tagger" {
source = "../../tflib/tagger"

depends_on = [module.test-latest]

tags = merge(
{ for t in toset(concat(["latest"], module.version-tags.tag_list)) : t => module.latest.image_ref },
{ for t in toset(concat(["latest"], module.version-tags.tag_list)) : "${t}-dev" => module.latest-dev.image_ref },
)
}
197 changes: 197 additions & 0 deletions images/cassandra/tests/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
terraform {
required_providers {
oci = { source = "chainguard-dev/oci" }
kubernetes = {
source = "hashicorp/kubernetes"
version = "~> 2.11.0"
}
}
}

variable "digest" {
description = "The image digest to run tests over."
}

data "oci_string" "ref" { input = var.digest }

resource "kubernetes_namespace" "cassandra" {
metadata {
name = "cassandra"
}
}

resource "kubernetes_service" "cassandra" {
metadata {
name = "cassandra"
namespace = "cassandra"

labels = {
app = "cassandra"
}
}

spec {
port {
port = 9042
}

selector = {
app = "cassandra"
}

cluster_ip = "None"
}
}

resource "kubernetes_stateful_set" "cassandra" {
metadata {
name = "cassandra"
namespace = kubernetes_namespace.cassandra.metadata[0].name

labels = {
app = "cassandra"
}
}

spec {
replicas = 1

selector {
match_labels = {
app = "cassandra"
}
}

template {
metadata {
labels = {
app = "cassandra"
}
}

spec {
container {
name = "cassandra"
image = "${data.oci_string.ref.registry_repo}:${data.oci_string.ref.pseudo_tag}"

port {
name = "intra-node"
container_port = 7000
}

port {
name = "tls-intra-node"
container_port = 7001
}

port {
name = "jmx"
container_port = 7199
}

port {
name = "cql"
container_port = 9042
}

env {
name = "MAX_HEAP_SIZE"
value = "512M"
}

env {
name = "HEAP_NEWSIZE"
value = "100M"
}

env {
name = "CASSANDRA_SEEDS"
value = "cassandra-0.cassandra.default.svc.cluster.local"
}

env {
name = "CASSANDRA_CLUSTER_NAME"
value = "K8Demo"
}

env {
name = "CASSANDRA_DC"
value = "DC1-K8Demo"
}

env {
name = "CASSANDRA_RACK"
value = "Rack1-K8Demo"
}

env {
name = "POD_IP"

value_from {
field_ref {
field_path = "status.podIP"
}
}
}

resources {
limits = {
cpu = "500m"

memory = "1Gi"
}

requests = {
cpu = "500m"

memory = "1Gi"
}
}

volume_mount {
name = "cassandra-data"
mount_path = "/cassandra_data"
}

lifecycle {
pre_stop {
exec {
command = ["/bin/sh", "-c", "nodetool drain"]
}
}
}

image_pull_policy = "Always"

security_context {
capabilities {
add = ["IPC_LOCK"]
}
}
}

termination_grace_period_seconds = 1800
}
}

volume_claim_template {
metadata {
name = "cassandra-data"
}

spec {
access_modes = ["ReadWriteOnce"]

resources {
requests = {
storage = "1Gi"
}
}

storage_class_name = "standard"
}
}

service_name = kubernetes_service.cassandra.metadata[0].name
}
}
5 changes: 5 additions & 0 deletions main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,11 @@ module "calico" {
target_repository = "${var.target_repository}/calico"
}

module "cassandra" {
source = "./images/cassandra"
target_repository = "${var.target_repository}/cassandra"
}

module "cc-dynamic" {
source = "./images/cc-dynamic"
target_repository = "${var.target_repository}/cc-dynamic"
Expand Down

0 comments on commit 4128e35

Please sign in to comment.