From be8f7062a46128fede2ba97ae88345a2c4d60502 Mon Sep 17 00:00:00 2001 From: Volodymyr Babak Date: Thu, 27 Jul 2017 20:37:00 +0300 Subject: [PATCH] Docker updates to new release features --- .../src/main/resources/thingsboard.yml | 4 +- .../cassandra/AbstractCassandraCluster.java | 2 +- .../test/resources/cassandra-test.properties | 4 +- docker/cassandra-setup/Dockerfile | 24 ++++++++++++ docker/cassandra-setup/Makefile | 12 ++++++ docker/cassandra-setup/install.sh | 33 ++++++++++++++++ docker/cassandra/Makefile | 2 +- docker/k8s/cassandra-setup.yaml | 39 +++++++++++++++++++ docker/k8s/tb.yaml | 18 +++++++-- docker/tb.env | 5 ++- docker/tb/Makefile | 2 +- docker/tb/run-application.sh | 4 +- 12 files changed, 137 insertions(+), 12 deletions(-) create mode 100644 docker/cassandra-setup/Dockerfile create mode 100644 docker/cassandra-setup/Makefile create mode 100755 docker/cassandra-setup/install.sh create mode 100644 docker/k8s/cassandra-setup.yaml diff --git a/application/src/main/resources/thingsboard.yml b/application/src/main/resources/thingsboard.yml index e57018d14a..d080f84b19 100644 --- a/application/src/main/resources/thingsboard.yml +++ b/application/src/main/resources/thingsboard.yml @@ -115,7 +115,9 @@ cassandra: # Thingsboard keyspace name keyspace_name: "${CASSANDRA_KEYSPACE_NAME:thingsboard}" # Specify node list - url: "${CASSANDRA_URL:127.0.0.1:9042}" + host: "${CASSANDRA_HOST:127.0.0.1}" + # Specify node list + post: "${CASSANDRA_PORT:9042}" # Enable/disable secure connection ssl: "${CASSANDRA_USE_SSL:false}" # Enable/disable JMX diff --git a/dao/src/main/java/org/thingsboard/server/dao/cassandra/AbstractCassandraCluster.java b/dao/src/main/java/org/thingsboard/server/dao/cassandra/AbstractCassandraCluster.java index 2b9000d7dd..d693802bfd 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/cassandra/AbstractCassandraCluster.java +++ b/dao/src/main/java/org/thingsboard/server/dao/cassandra/AbstractCassandraCluster.java @@ -44,7 +44,7 @@ public abstract class AbstractCassandraCluster { @Value("${cassandra.cluster_name}") private String clusterName; - @Value("${cassandra.url}") + @Value("${cassandra.host}:${cassandra.port}") private String url; @Value("${cassandra.compression}") private String compression; diff --git a/dao/src/test/resources/cassandra-test.properties b/dao/src/test/resources/cassandra-test.properties index 82fcbe1949..b9e2734279 100644 --- a/dao/src/test/resources/cassandra-test.properties +++ b/dao/src/test/resources/cassandra-test.properties @@ -2,7 +2,9 @@ cassandra.cluster_name=Thingsboard Cluster cassandra.keyspace_name=thingsboard -cassandra.url=127.0.0.1:9142 +cassandra.host=127.0.0.1 + +cassandra.port=9142 cassandra.ssl=false diff --git a/docker/cassandra-setup/Dockerfile b/docker/cassandra-setup/Dockerfile new file mode 100644 index 0000000000..f91f0f16cb --- /dev/null +++ b/docker/cassandra-setup/Dockerfile @@ -0,0 +1,24 @@ +# +# Copyright © 2016-2017 The Thingsboard Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +FROM openjdk:8-jre + +ADD install.sh /install.sh +ADD thingsboard.deb /thingsboard.deb + +RUN apt-get update \ + && apt-get install -y nmap \ + && chmod +x /install.sh diff --git a/docker/cassandra-setup/Makefile b/docker/cassandra-setup/Makefile new file mode 100644 index 0000000000..635b92fce0 --- /dev/null +++ b/docker/cassandra-setup/Makefile @@ -0,0 +1,12 @@ +VERSION=1.2.4 +PROJECT=thingsboard +APP=cassandra-setup + +build: + cp ../../application/target/thingsboard.deb . + docker build --pull -t ${PROJECT}/${APP}:${VERSION} -t ${PROJECT}/${APP}:latest . + rm thingsboard.deb + +push: build + docker push ${PROJECT}/${APP}:${VERSION} + docker push ${PROJECT}/${APP}:latest diff --git a/docker/cassandra-setup/install.sh b/docker/cassandra-setup/install.sh new file mode 100755 index 0000000000..87aaeed95f --- /dev/null +++ b/docker/cassandra-setup/install.sh @@ -0,0 +1,33 @@ +#!/bin/bash +# +# Copyright © 2016-2017 The Thingsboard Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + +dpkg -i /thingsboard.deb + +until nmap $CASSANDRA_HOST -p $CASSANDRA_PORT | grep "$CASSANDRA_PORT/tcp open" +do + echo "Wait for cassandra db to start..." + sleep 10 +done + +echo "Creating 'Thingsboard' schema and system data..." +if [ "$ADD_DEMO_DATA" == "true" ]; then + echo "plus demo data..." + /usr/share/thingsboard/bin/install/install.sh --loadDemo +elif [ "$ADD_DEMO_DATA" == "false" ]; then + /usr/share/thingsboard/bin/install/install.sh +fi diff --git a/docker/cassandra/Makefile b/docker/cassandra/Makefile index f277e9e543..ae82253eb7 100644 --- a/docker/cassandra/Makefile +++ b/docker/cassandra/Makefile @@ -7,4 +7,4 @@ build: push: build docker push ${PROJECT}/${APP}:${VERSION} - docker push ${PROJECT}/${APP}:latest + docker push ${PROJECT}/${APP}:latest diff --git a/docker/k8s/cassandra-setup.yaml b/docker/k8s/cassandra-setup.yaml new file mode 100644 index 0000000000..996ab1230e --- /dev/null +++ b/docker/k8s/cassandra-setup.yaml @@ -0,0 +1,39 @@ +# +# Copyright © 2016-2017 The Thingsboard Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apiVersion: v1 +kind: Pod +metadata: + name: cassandra-setup +spec: + containers: + - name: cassandra-setup + imagePullPolicy: Always + image: thingsboard/cassandra-setup:1.2.4 + env: + - name: ADD_DEMO_DATA + value: "true" + - name : CASSANDRA_HOST + value: "cassandra-headless" + - name : CASSANDRA_PORT + value: "9042" + - name : DATABASE_TYPE + value: "cassandra" + command: + - sh + - -c + - /install.sh + restartPolicy: Never diff --git a/docker/k8s/tb.yaml b/docker/k8s/tb.yaml index 45f987f04f..be22309090 100644 --- a/docker/k8s/tb.yaml +++ b/docker/k8s/tb.yaml @@ -50,7 +50,9 @@ metadata: data: zookeeper.enabled: "true" zookeeper.url: "zk-headless" - cassandra.url: "cassandra-headless:9042" + cassandra.host: "cassandra-headless" + cassandra.port: "9042" + database.type: "cassandra" --- apiVersion: apps/v1beta1 kind: StatefulSet @@ -100,11 +102,21 @@ spec: configMapKeyRef: name: tb-config key: zookeeper.url - - name : CASSANDRA_URL + - name : CASSANDRA_HOST valueFrom: configMapKeyRef: name: tb-config - key: cassandra.url + key: cassandra.host + - name : CASSANDRA_PORT + valueFrom: + configMapKeyRef: + name: tb-config + key: cassandra.port + - name: DATABASE_TYPE + valueFrom: + configMapKeyRef: + name: tb-config + key: database.type - name : RPC_HOST valueFrom: fieldRef: diff --git a/docker/tb.env b/docker/tb.env index c5d77c0ad1..89a7dda8e4 100644 --- a/docker/tb.env +++ b/docker/tb.env @@ -8,10 +8,11 @@ COAP_BIND_PORT=5683 ZOOKEEPER_URL=zk:2181 # type of database to use: sql[DEFAULT] or cassandra -DATABASE_TYPE=sql +DATABASE_TYPE=cassandra # cassandra db config -CASSANDRA_URL=cassandra:9042 +CASSANDRA_HOST=cassandra +CASSANDRA_PORT=9042 # postgres db config # SPRING_JPA_DATABASE_PLATFORM=org.hibernate.dialect.PostgreSQLDialect diff --git a/docker/tb/Makefile b/docker/tb/Makefile index b12e5a6b5d..267a1664de 100644 --- a/docker/tb/Makefile +++ b/docker/tb/Makefile @@ -9,4 +9,4 @@ build: push: build docker push ${PROJECT}/${APP}:${VERSION} - docker push ${PROJECT}/${APP}:latest + docker push ${PROJECT}/${APP}:latest diff --git a/docker/tb/run-application.sh b/docker/tb/run-application.sh index 274e255bdb..783b35b0c3 100755 --- a/docker/tb/run-application.sh +++ b/docker/tb/run-application.sh @@ -19,7 +19,7 @@ dpkg -i /thingsboard.deb if [ "$DATABASE_TYPE" == "cassandra" ]; then - until nmap cassandra -p 9042 | grep "9042/tcp open" + until nmap $CASSANDRA_HOST -p $CASSANDRA_PORT | grep "$CASSANDRA_PORT/tcp open" do echo "Wait for cassandra db to start..." sleep 10 @@ -39,7 +39,7 @@ fi if [ "$ADD_SCHEMA_AND_SYSTEM_DATA" == "true" ]; then echo "Creating 'Thingsboard' schema and system data..." if [ "$ADD_DEMO_DATA" == "true" ]; then - echo "Adding demo data..." + echo "plus demo data..." /usr/share/thingsboard/bin/install/install.sh --loadDemo elif [ "$ADD_DEMO_DATA" == "false" ]; then /usr/share/thingsboard/bin/install/install.sh