From 69ffcc72228c7a42e68883ed92ec1f48743d685d Mon Sep 17 00:00:00 2001 From: Varun Joshi Date: Wed, 30 Mar 2016 22:13:19 +0530 Subject: [PATCH] Added a nulecule for Apache Cassandra --- cassandra-atomicapp/Dockerfile | 9 ++++ cassandra-atomicapp/Nulecule | 53 +++++++++++++++++++ cassandra-atomicapp/answers.conf.sample | 16 ++++++ .../artifacts/docker/cassandra_run | 12 +++++ .../artifacts/kubernetes/cassandra-rc.yaml | 43 +++++++++++++++ .../artifacts/kubernetes/cassandra-svc.yaml | 14 +++++ 6 files changed, 147 insertions(+) create mode 100644 cassandra-atomicapp/Dockerfile create mode 100644 cassandra-atomicapp/Nulecule create mode 100644 cassandra-atomicapp/answers.conf.sample create mode 100644 cassandra-atomicapp/artifacts/docker/cassandra_run create mode 100644 cassandra-atomicapp/artifacts/kubernetes/cassandra-rc.yaml create mode 100644 cassandra-atomicapp/artifacts/kubernetes/cassandra-svc.yaml diff --git a/cassandra-atomicapp/Dockerfile b/cassandra-atomicapp/Dockerfile new file mode 100644 index 0000000..fd6f0aa --- /dev/null +++ b/cassandra-atomicapp/Dockerfile @@ -0,0 +1,9 @@ +FROM projectatomic/atomicapp:0.4.4 + +MAINTAINER Varun Joshi + +LABEL io.projectatomic.nulecule.providers="docker,kubernetes" \ + io.projectatomic.nuleclue.specversion="0.0.2" + +ADD /Nulecule /Dockerfile /application-entity/ +ADD /artifacts /application-entity/artifacts diff --git a/cassandra-atomicapp/Nulecule b/cassandra-atomicapp/Nulecule new file mode 100644 index 0000000..fc4da6a --- /dev/null +++ b/cassandra-atomicapp/Nulecule @@ -0,0 +1,53 @@ +--- +specversion: 0.0.2 +id: cassandra-atomicapp + +metadata: + name: Cassandra App + appversion: 0.0.1 + description: Cassandra Atomic App + +graph: + - name: cassandra-app + params: + - name: image + description: The cassandra image + - name: hostport + description: The port where cassandra runs + default: 7000 + - name: listen_address + description: This variable is for controlling which IP address to listen for incoming connections on. + default: auto + - name: broadcast_address + description: This variable is for controlling which IP address to advertise to other nodes. + default: auto + - name: rpc_address + description: This variable is for controlling which address to bind the thrift rpc server to. + default: 0.0.0.0 + - name: start_rpc + description: This variable is for controlling if the thrift rpc server is started. + default: "" + - name: seeds + description: This variable is the comma-separated list of IP addresses used by gossip for bootstrapping new nodes joining a cluster. + default: "" + - name: cluster_name + description: This variable sets the name of the cluster and must be the same for all nodes in the cluster. + default: "" + - name: num_tokens + description: This variable sets number of tokens for this node. + default: "" + - name: dc + description: This variable sets the datacenter name of this node. + default: "" + - name: rack + description: This variable sets the rack name of this node. + default: "" + - name: endpoint_snitch + description: This variable sets the snitch implementation this node will use. + default: "" + artifacts: + docker: + - file://artifacts/docker/cassandra_run + kubernetes: + - file://artifacts/kubernetes/cassandra-rc.yaml + - file://artifacts/kubernetes/cassandra-svc.yaml diff --git a/cassandra-atomicapp/answers.conf.sample b/cassandra-atomicapp/answers.conf.sample new file mode 100644 index 0000000..71e0d56 --- /dev/null +++ b/cassandra-atomicapp/answers.conf.sample @@ -0,0 +1,16 @@ +[cassandra-app] +num_tokens = None +endpoint_snitch = "" +broadcast_address = auto +start_rpc = "" +image = "" +hostport = 7000 +dc = "" +cluster_name = "" +seeds = "" +rpc_address = 0.0.0.0 +listen_address = auto +rack = "" +[general] +namespace = default +provider = docker diff --git a/cassandra-atomicapp/artifacts/docker/cassandra_run b/cassandra-atomicapp/artifacts/docker/cassandra_run new file mode 100644 index 0000000..5d4e8c9 --- /dev/null +++ b/cassandra-atomicapp/artifacts/docker/cassandra_run @@ -0,0 +1,12 @@ +docker run -d -p 7000:$hostport + -e CASSANDRA_LISTEN_ADDRESS=$listen_address + -e CASSANDRA_BROADCAST_ADDRESS=$broadcast_address + -e CASSANDRA_RPC_ADDRESS=$rpc_address + -e CASSANDRA_START_RPC=$start_rpc + -e CASSANDRA_SEEDS=$seeds + -e CASSANDRA_CLUSTER_NAME=$cluster_name + -e CASSANDRA_NUM_TOKENS=$num_tokens + -e CASSANDRA_DC=$dc + -e CASSANDRA_RACK=$rack + -e CASSANDRA_ENDPOINT_SNITCH=$endpoint_snitch + $image diff --git a/cassandra-atomicapp/artifacts/kubernetes/cassandra-rc.yaml b/cassandra-atomicapp/artifacts/kubernetes/cassandra-rc.yaml new file mode 100644 index 0000000..95feff4 --- /dev/null +++ b/cassandra-atomicapp/artifacts/kubernetes/cassandra-rc.yaml @@ -0,0 +1,43 @@ +--- +apiVersion: v1 +kind: ReplicationController +metadata: + name: cassandra + labels: + name: cassandra +spec: + replicas: 1 + selector: + name: cassandra + template: + metadata: + labels: + name: cassandra + spec: + containers: + - name: cassandra + image: $image + ports: + - name: cassandra-server + containerPort: $hostport + env: + - name: CASSANDRA_LISTEN_ADDRESS + value: $listen_address + - name: CASSANDRA_BROADCAST_ADDRESS + value: $broadcast_address + - name: CASSANDRA_RPC_ADDRESS + value: $rpc_address + - name: CASSANDRA_START_RPC + value: $start_rpc + - name: CASSANDRA_SEEDS + value: $seeds + - name: CASSANDRA_CLUSTER_NAME + value: $cluster_name + - name: CASSANDRA_NUM_TOKENS + value: $num_tokens + - name: CASSANDRA_DC + value: $dc + - name: CASSANDRA_RACK + value: $rack + - name: CASSANDRA_ENDPOINT_SNITCH + value: $endpoint_snitch diff --git a/cassandra-atomicapp/artifacts/kubernetes/cassandra-svc.yaml b/cassandra-atomicapp/artifacts/kubernetes/cassandra-svc.yaml new file mode 100644 index 0000000..0949eb8 --- /dev/null +++ b/cassandra-atomicapp/artifacts/kubernetes/cassandra-svc.yaml @@ -0,0 +1,14 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: cassandra-svc + labels: + name: cassandra-svc +spec: + type: NodePort + ports: + - port: 7000 + targetPort: cassandra-server + selector: + name: cassandra