Skip to content

Commit 229ecc3

Browse files
ktgToshbrown
authored andcommitted
https support (#207)
* Add databox labels to services * Create certs with sha-256 * Add unsecure port to container manager * Tidying * Update Tests to Https * Fix multiple IPs in travis tests
1 parent cf50acf commit 229ecc3

File tree

10 files changed

+206
-183
lines changed

10 files changed

+206
-183
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ typings/
5757
# dotenv environment variables file
5858
.env
5959

60+
.idea/
61+
6062
certs/
6163

6264
databox-arbiter/

databox-components

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ core-export-service https://github.com/me-box/core-export-service.git master
33
store-json https://github.com/me-box/store-json.git master
44
core-store https://github.com/me-box/core-store.git master
55
platform-app-server https://github.com/me-box/platform-app-server.git master
6-
core-container-manager https://github.com/me-box/core-container-manager.git master
6+
core-container-manager https://github.com/ktg/core-container-manager master
77
core-network https://github.com/me-box/core-network.git master

databox-install-component

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,14 @@ usage() {
2929
seedManifest() {
3030
log "Uploading Manifest for ${1} ..."
3131
STATUS=$(curl --cookie-jar ./databox-jar -sL -w "%{http_code}\\n" http://127.0.0.1:8181/ -o /dev/null)
32-
test_assert $STATUS 200 "Seeding manifest"
32+
test_assert ${STATUS} 200 "Seeding manifest"
3333

3434
PAYLOAD=$(<${1}/databox-manifest.json)
3535
PAYLOAD="manifest=${PAYLOAD}"
3636

3737
EXPECTED='{"success":true}'
3838
RES=$(curl --cookie ./databox-jar -s -X POST -d "${PAYLOAD}" -L 'http://127.0.0.1:8181/app/post')
39-
test_assert $RES $EXPECTED "Uploading manifest"
39+
test_assert ${RES} ${EXPECTED} "Uploading manifest"
4040

4141
rm ./databox-jar
4242
}
@@ -51,15 +51,15 @@ installStores() {
5151

5252
buildImage() {
5353
cd ${1}
54-
log "[$(datef) $ME]: Starting build ${1} ..."
54+
log "Starting build ${1} ..."
5555
OUTPUT=$(docker build -t $1 -t $1:${DATABOX_VERSION} -f Dockerfile${DATABOX_ARCH} .)
5656
test_assert $? 0 "Build ${1}" "$OUTPUT"
5757
cd ..
5858
}
5959

6060
pullChanges() {
6161
cd ${1}
62-
log "[$(datef) $ME]: Pulling Changes ${1} ..."
62+
log "Pulling Changes ${1} ..."
6363
OUTPUT=$(git pull)
6464
test_assert $? 0 "Git pull ${1}" "$OUTPUT"
6565
cd ..
@@ -73,12 +73,12 @@ fi
7373

7474
COMPONENT=$1
7575

76-
if [[ $COMPONENT != *"/"* ]]; then
76+
if [[ ${COMPONENT} != *"/"* ]]; then
7777
COMPONENT="me-box/${COMPONENT}"
7878
fi
7979

8080
oIFS="$IFS"
81-
IFS=/ arr=( $COMPONENT )
81+
IFS=/ arr=( ${COMPONENT} )
8282
IFS="$oIFS"
8383
USER=${arr[0]}
8484
COMPONENT_NAME=${arr[1]}
@@ -87,13 +87,13 @@ if [ ! -d "./$COMPONENT_NAME" ]; then
8787
log "Getting the code..... "
8888
OUTPUT=$(git clone "https://github.com/${COMPONENT}.git")
8989
test_assert $? 0 "Pulling the code from https://github.com/${COMPONENT}.git \n\n ${OUTPUT}"
90-
buildImage $COMPONENT_NAME
91-
seedManifest $COMPONENT_NAME
90+
buildImage ${COMPONENT_NAME}
91+
seedManifest ${COMPONENT_NAME}
9292
installStores
9393
else
9494
log "${COMPONENT_NAME} already installed, rebuilding and reseeding"
95-
pullChanges $COMPONENT_NAME
96-
buildImage $COMPONENT_NAME
97-
seedManifest $COMPONENT_NAME
95+
pullChanges ${COMPONENT_NAME}
96+
buildImage ${COMPONENT_NAME}
97+
seedManifest ${COMPONENT_NAME}
9898
installStores
9999
fi

databox-start

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -55,23 +55,29 @@ assert_or_die $? 1 "Databox is already running!"
5555

5656
## extract a host interface IP address
5757
err "extracting host interface IP address ..."
58-
ips=($(ifconfig | sed -En 's/127.0.0.1//;s/172.//;s/169.//;s/.inet (addr:)?(([0-9]+.){3}[0-9]+).*/\2/p'))
59-
EXT_IP=$ips
58+
ips=($(ifconfig | grep "inet " | grep -v 127.0.0.1|awk 'match($0, /([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/) {print substr($0,RSTART,RLENGTH)}'))
59+
EXT_IP=${ips}
6060
if [[ "${#ips[@]}" -gt "1" ]]; then
6161
err "More than one IP found! Please select one:"
62-
select ip in ${ips[*]}; do
63-
case $ip in
64-
exit )
65-
die 0 "exiting ..."
66-
break
67-
;;
68-
69-
* )
70-
EXT_IP=$ip
71-
break
72-
;;
73-
esac
74-
done
62+
if [[ "${DATABOX_TESTING}" == 1 ]]
63+
then
64+
err "running in testing mode select second IP ${ips[1]}"
65+
EXT_IP=${ips[1]}
66+
else
67+
select ip in ${ips[*]}; do
68+
case ${ip} in
69+
exit )
70+
die 0 "exiting ..."
71+
break
72+
;;
73+
74+
* )
75+
EXT_IP=${ip}
76+
break
77+
;;
78+
esac
79+
done
80+
fi
7581
fi
7682
err "host interface IP address = ${EXT_IP}"
7783

@@ -111,24 +117,26 @@ then
111117
fi
112118

113119
err "Starting version ${DATABOX_VERSION}"
114-
export DOCKER_REPO=$DOCKER_REPO
115-
export DATABOX_VERSION=$DATABOX_VERSION
116-
export DATABOX_CORE_IMAGE_VERSION=$DATABOX_CORE_IMAGE_VERSION
120+
export DOCKER_REPO=${DOCKER_REPO}
121+
export DATABOX_VERSION=${DATABOX_VERSION}
122+
export DATABOX_CORE_IMAGE_VERSION=${DATABOX_CORE_IMAGE_VERSION}
117123

118124
function _exec {
119125
docker run \
120126
--net=host -ti --rm -v "$(pwd -P)":/cwd -w /cwd \
121-
$DARGS $NODE_IMAGE "$@"
127+
${DARGS} ${NODE_IMAGE} "$@"
122128
}
123129

124130
if [ ! -d "node_modules" ]; then
125131
_exec npm install -loglevel silent
126132
fi
127133

128-
err "starting the Databox swarm"
129-
docker swarm init --advertise-addr $EXT_IP > /dev/null
134+
err "Starting the Databox swarm"
135+
docker swarm init --advertise-addr ${EXT_IP} > /dev/null
130136
mkdir -p ./certs
131-
_exec node ./src/createCerts.js
137+
138+
err "Creating Certificates"
139+
_exec node ./src/createCerts.js ${ips[@]}
132140

133141
if [ "$DEV" == "1" ]
134142
then
@@ -139,7 +147,7 @@ then
139147
assert_or_die $? 0 "Problem building core images"
140148
fi
141149

142-
err "starting Databox"
150+
err "Starting Databox"
143151

144152
docker network create -d overlay --attachable databox-system-net
145153

@@ -153,13 +161,13 @@ assert_or_die $? 0 "Problem with docker stack deploy"
153161
if [ "$DEV" == "1" ]
154162
then
155163
#source ./databox-install-component driver-sensingkit
156-
echo "sleeping..."
164+
err "Sleeping..."
157165
sleep 10
158166
source ./databox-install-component driver-os-monitor
159167
source ./databox-install-component app-os-monitor
160168
fi
161169

162-
err "Databox started! Visit http://127.0.0.1:8989"
170+
err "Databox started! Visit http://localhost:8448"
163171
if [ -z "$DATABOX_TESTING" ]
164172
then
165173
docker service logs databox_container-manager -f

databox-stop

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,24 +29,25 @@ then
2929
fi
3030

3131
## stop Databox
32-
err "stopping Databox ..."
32+
err "Stopping Databox ..."
33+
export DOCKER_REPO=""
3334
docker stack rm databox
3435
docker-compose -f ./docker-databox-appstore.yaml down
3536

3637
rm -f .resolv.conf
37-
err "stopping and remvoing databox-bridge ..."
38+
err "Stopping and Removing databox-bridge ..."
3839
docker-compose -f ./docker-core-network.yaml down
39-
err "removing network databox-system-net ..."
40+
err "Removing network databox-system-net ..."
4041
docker network rm databox-system-net >/dev/null 2>&1
4142

42-
err "waiting ..."
43+
err "Waiting ..."
4344
sleep 10 # give docker some time to remove the networks etc
44-
err "forcing ..."
45+
err "Forcing ..."
4546
docker swarm leave --force
4647

4748
if [[ $(docker ps -aq -f status=created -f status=exited -f "label=databox.type") ]]
4849
then
49-
err "Removing and exited containers ..."
50+
err "Removing exited containers ..."
5051
docker rm $(docker ps -aq -f status=created -f status=exited -f "label=databox.type")
5152
fi
52-
err "done!"
53+
err "Done!"

databox-test

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,33 +34,33 @@ sleep 60
3434
docker ps
3535

3636
#can we see the CM UI
37-
STATUS=$(curl -sL -w "%{http_code}\\n" "http://127.0.0.1:8989/" -o /dev/null)
37+
STATUS=$(curl -sL --insecure -w "%{http_code}\\n" "https://127.0.0.1:8989/" -o /dev/null)
3838
test_assert $STATUS 200 "Is core-container-manager available?"
3939

4040
#is the arbiter up
41-
RES=$(curl -sL "http://127.0.0.1:8989/arbiter/status")
41+
RES=$(curl -sL --insecure "https://127.0.0.1:8989/arbiter/status")
4242
test_assert "$RES" "active" "Is the arbiter available?"
4343

4444
#is the arbiter /cat endpoint ok
4545
EXPECTED='{"catalogue-metadata":[{"rel":"urn:X-hypercat:rels:isContentType","val":"application/vnd.hypercat.catalogue+json"},{"rel":"urn:X-hypercat:rels:hasDescription:en","val":"Databox Root Catalogue"},{"rel":"urn:X-hypercat:rels:hasHomepage","val":"http://www.databoxproject.uk/"},{"rel":"urn:X-hypercat:rels:containsContentType","val":"application/vnd.hypercat.catalogue+json"},{"rel":"urn:Xhypercat:rels:supportsSearch","val":"urn:X-hypercat:search:simple"}],"items":[]}'
46-
RES=$(curl -sL "http://127.0.0.1:8989/arbiter/cat")
46+
RES=$(curl -sL --insecure "https://127.0.0.1:8989/arbiter/cat")
4747
test_assert "$RES" "$EXPECTED" "Is the arbiter cat endpoint is ok?"
4848

4949
#can we install the OS monitor driver
5050
PAYLOAD='{"manifest-version":1,"name":"driver-os-monitor","version":"0.1.0","description":"A Databox driver to monitor the local os","author":"Anthony Brown <[email protected]> ()","license":"MIT","databox-type":"driver","tags":["monitor","os"],"homepage":"https://github.com/me-box/driver-os-monitor","repository":{"type":"git","url":"git+https://github.com/me-box/driver-os-monitor.git"},"resource-requirements":{"store":"store-json"}}'
51-
RES=$(curl -s -H 'Content-Type: application/json' -X POST -d "${PAYLOAD}" -L 'http://127.0.0.1:8989/api/install')
51+
RES=$(curl -s --insecure -H 'Content-Type: application/json' -X POST -d "${PAYLOAD}" -L 'https://127.0.0.1:8989/api/install')
5252
EXPECTED='{"status":200,"msg":"Success"}'
5353
test_assert "$RES" "$EXPECTED" "Can we install the driver-os-monitor?"
5454

5555
#can we install the OS monitor app
5656
PAYLOAD='{"manifest-version":1,"name":"app-os-monitor","databox-type":"app","version":"0.1.0","description":"An app in golang to plot the output of the os monitor driver.","author":"Tosh Brown <[email protected]>","license":"MIT","tags":["template","app","nodejs"],"homepage":"https://github.com/me-box/app-os-monitor","repository":{"type":"git","url":"git+https://github.com/me-box/app-os-monitor"},"packages":[{"name":"OS monitor Plotter","purpose":"To visualize your databox load and free memory","install":"required","risks":"None.","benefits":"You can see the data!","datastores":["loadavg1","loadavg5","loadavg15","freemem"],"enabled":true}],"allowed-combinations":[],"datasources":[{"type":"loadavg1","required":true,"name":"loadavg1","clientid":"loadavg1","granularities":[],"hypercat":{"item-metadata":[{"rel":"urn:X-hypercat:rels:hasDescription:en","val":"Databox load average 1 minuet"},{"rel":"urn:X-hypercat:rels:isContentType","val":"text/json"},{"rel":"urn:X-databox:rels:hasVendor","val":"Databox Inc."},{"rel":"urn:X-databox:rels:hasType","val":"loadavg1"},{"rel":"urn:X-databox:rels:hasDatasourceid","val":"loadavg1"},{"rel":"urn:X-databox:rels:hasStoreType","val":"store-json"},{"rel":"urn:X-databox:rels:hasUnit","val":"%"}],"href":"https://driver-os-monitor-store-json:8080/loadavg1"}},{"type":"loadavg5","required":true,"name":"loadavg5","clientid":"loadavg5","granularities":[],"hypercat":{"item-metadata":[{"rel":"urn:X-hypercat:rels:hasDescription:en","val":"Databox load average 5 minuets"},{"rel":"urn:X-hypercat:rels:isContentType","val":"text/json"},{"rel":"urn:X-databox:rels:hasVendor","val":"Databox Inc."},{"rel":"urn:X-databox:rels:hasType","val":"loadavg5"},{"rel":"urn:X-databox:rels:hasDatasourceid","val":"loadavg5"},{"rel":"urn:X-databox:rels:hasStoreType","val":"store-json"},{"rel":"urn:X-databox:rels:hasUnit","val":"%"}],"href":"https://driver-os-monitor-store-json:8080/loadavg5"}},{"type":"loadavg15","required":true,"name":"loadavg15","clientid":"loadavg15","granularities":[],"hypercat":{"item-metadata":[{"rel":"urn:X-hypercat:rels:hasDescription:en","val":"Databox load average 15 minuets"},{"rel":"urn:X-hypercat:rels:isContentType","val":"text/json"},{"rel":"urn:X-databox:rels:hasVendor","val":"Databox Inc."},{"rel":"urn:X-databox:rels:hasType","val":"loadavg15"},{"rel":"urn:X-databox:rels:hasDatasourceid","val":"loadavg15"},{"rel":"urn:X-databox:rels:hasStoreType","val":"store-json"},{"rel":"urn:X-databox:rels:hasUnit","val":"%"}],"href":"https://driver-os-monitor-store-json:8080/loadavg15"}},{"type":"freemem","required":true,"name":"freemem","clientid":"freemem","granularities":[],"hypercat":{"item-metadata":[{"rel":"urn:X-hypercat:rels:hasDescription:en","val":"Free memory in bytes"},{"rel":"urn:X-hypercat:rels:isContentType","val":"text/json"},{"rel":"urn:X-databox:rels:hasVendor","val":"Databox Inc."},{"rel":"urn:X-databox:rels:hasType","val":"freemem"},{"rel":"urn:X-databox:rels:hasDatasourceid","val":"freemem"},{"rel":"urn:X-databox:rels:hasStoreType","val":"store-json"},{"rel":"urn:X-databox:rels:hasUnit","val":"bytes"}],"href":"https://driver-os-monitor-store-json:8080/freemem"}}],"export-whitelist":[{"url":"https://export.amar.io/","description":"Exports the calculated sentiment to amar.io"}],"resource-requirements":{}}'
57-
RES=$(curl -s -H 'Content-Type: application/json' -X POST -d "${PAYLOAD}" -L 'http://127.0.0.1:8989/api/install')
57+
RES=$(curl -s --insecure -H 'Content-Type: application/json' -X POST -d "${PAYLOAD}" -L 'https://127.0.0.1:8989/api/install')
5858
EXPECTED='{"status":200,"msg":"Success"}'
5959
test_assert "$RES" "$EXPECTED" "Can we install the app-os-monitor?"
6060

6161
#is the OS monitor app up
6262
sleep 30
63-
STATUS=$(curl -sL -w "%{http_code}\\n" "http://127.0.0.1:8989/app-os-monitor/ui" -o /dev/null)
63+
STATUS=$(curl -sL --insecure -w "%{http_code}\\n" "https://127.0.0.1:8989/app-os-monitor/ui" -o /dev/null)
6464
test_assert "$STATUS" 200 "Is the app-os-monitor/ui available?"
6565

6666
exit 0

docker-compose.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ services:
66
image: ${DOCKER_REPO}container-manager:${DATABOX_CORE_IMAGE_VERSION}
77
ports:
88
- '8989:8989'
9+
- '8448:8448'
910
volumes:
1011
- '/var/run/docker.sock:/var/run/docker.sock'
1112
- './docker-compose.yaml:/cfg/docker-compose.yaml'
@@ -29,6 +30,8 @@ services:
2930
- arbiter
3031
deploy:
3132
replicas: 1
33+
labels:
34+
databox.type: "system"
3235
placement:
3336
constraints:
3437
- 'node.role == manager'
@@ -44,6 +47,8 @@ services:
4447
- DATABOX_EXPORT_SERVICE_KEY
4548
deploy:
4649
replicas: 1
50+
labels:
51+
databox.type: "system"
4752
endpoint_mode: dnsrr
4853
placement:
4954
constraints:
@@ -64,6 +69,8 @@ services:
6469
- DATABOX_EXPORT_SERVICE_KEY
6570
deploy:
6671
replicas: 1
72+
labels:
73+
databox.type: "system"
6774
endpoint_mode: dnsrr
6875
placement:
6976
constraints:

scripts/utils.sh

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,14 @@
33
function red {
44
echo "\033[0;31m${1}\033[0m"
55
}
6+
67
function green {
78
echo "\033[0;32m${1}\033[0m"
89
}
910

10-
ME='databox-build-core'
11-
1211
function datef
1312
{
14-
date +'%Y-%m-%dT%H:%M:%S%z'
13+
date +'%Y-%m-%d %H:%M:%S'
1514
}
1615

1716
log() {

src/createCerts.js

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,30 @@ process.setMaxListeners(200);
33
const conman = require('./container-manager.js');
44
const Config = require('./config.json');
55
const httpsHelper = require('./https-helper');
6-
const DATABOX_DEV = process.env.DATABOX_DEV
7-
8-
var containerMangerUIServer = null;
96

107
httpsHelper.init()
118
.then(() => {
9+
let proms = Config.requiredArbiterSecrets.map((name) => {
10+
return conman.generateArbiterToken(name);
11+
});
1212

13-
let proms = Config.requiredArbiterSecrets.map((name)=>{
14-
return conman.generateArbiterToken(name);
15-
});
13+
proms = proms.concat(Config.requiredHTTPSecrets.map((name) => {
14+
return httpsHelper.createClientCert(name);
15+
}));
1616

17-
let proms1 = Config.requiredHTTPSecrets.map((name)=>{
18-
return httpsHelper.createClientCert(name);
19-
});
20-
21-
return Promise.all(proms1.concat(proms));
17+
const ips = process.argv.slice(2);
18+
if (ips.indexOf('127.0.0.1') === -1) {
19+
ips.push('127.0.0.1')
20+
}
21+
proms.push(httpsHelper.createClientCert('container-manager', ips));
2222

23+
return Promise.all(proms);
2324
})
24-
.then(()=>{
25+
.then(() => {
2526
console.log("Done!");
2627
})
27-
2828
.catch(err => {
2929
console.log(err);
3030
const stack = new Error().stack;
3131
console.log(stack);
3232
});
33-

0 commit comments

Comments
 (0)