ND Api to connect nodes

This commit is contained in:
kansi 2018-01-17 14:41:40 +05:30
parent 2caf95bb43
commit 8f38020952
7 changed files with 65 additions and 8 deletions

View File

@ -1,6 +1,6 @@
FROM tendermint/tendermint:develop
WORKDIR /
COPY ./tnode1 /tendermint
COPY ./tnode /tendermint
COPY tendermint_entrypoint.sh tendermint_entrypoint.sh
VOLUME /tmp/bigchain/tendermint /tendermint_node_data
EXPOSE 46656 46657

View File

@ -1,10 +1,10 @@
#!/bin/bash
# build mongodb image
docker build -t mongodb:bdb -f Dockerfile.mongo .
docker build -t mongodb:bdb-itest -f Dockerfile.mongo .
# build mongodb image
docker build -t tendermint:bdb -f Dockerfile.tendermint .
docker build -t tendermint:bdb-itest -f Dockerfile.tendermint .
# build bigchaindb image
docker build -t bigchaindb:itest -f ../Dockerfile.itest .
# build bigchaindb image (execute in parent directory)
cd .. && docker build -t bigchaindb:bdb-itest -f Dockerfile.itest .

View File

@ -42,7 +42,8 @@ class Network():
nodes_online = 0
while concurrent:
if nodes_online == n:
print("Online nodes::", nodes_online)
if nodes_online >= n:
break
for i in range(0, n):
@ -52,12 +53,29 @@ class Network():
time.sleep(1)
def stop(self, n=None):
""" Stop n nodes are stopped """
if n is None:
n = self.max_size
n = min(n, self.max_size)
for i in range(0, n):
self.nodes[i].stop()
def ensure_connected(self):
"""Ensure that running nodes are connected"""
online_nodes = []
for i in range(0, self.max_size):
if self.nodes[i].is_running:
online_nodes.append(self.nodes[i])
for i in range(0, len(online_nodes)):
seeds = []
for j in range(i+1, len(online_nodes)):
seeds.append(online_nodes[j].tendermint_uri)
if len(seeds):
online_nodes[i].dial_seeds(seeds)
def load_validators(count):
with open('validators.json') as json_data:

View File

@ -7,6 +7,8 @@ import kubernetes
from kubernetes.client.rest import ApiException
from kubernetes.stream import stream
TENDERMINT_PORT = 46656
# TODO: create a default pod spec of BDB
MONGODB_SPEC = {"name": "mongodb",
@ -25,13 +27,14 @@ BIGCHAINDB_SPEC = {"name": "bigchaindb",
class Node():
def __init__(self, tendermint_priv_validator=None, tendermint_genesis=None,
namespace='default', name=None):
namespace='default', name=None, seeds=[]):
kubernetes.config.load_kube_config()
config = kubernetes.client.Configuration()
config.assert_hostname = False
kubernetes.client.Configuration.set_default(config)
self.seeds = seeds
self.api_instance = kubernetes.client.CoreV1Api(kubernetes.client.ApiClient(config))
self.namespace = namespace
self.name = name or uuid.uuid4().hex
@ -99,17 +102,31 @@ class Node():
@property
def uri(self):
self.ip
@property
def ip(self):
if self.is_running:
resp = self.api_instance.read_namespaced_pod(self.name, self.namespace, exact=True)
return resp.status.pod_ip
else:
return False
@property
def tendermint_uri(self):
ip = self.ip
if ip:
return '{}:{}'.format(ip, TENDERMINT_PORT)
else:
return False
def stop_tendermint(self):
self._exec_command('tendermint', 'pkill tendermint')
def start_tendermint(self):
self._exec_command('tendermint', 'tendermint node --proxy_app=dummy', tty=True)
seeds = ",".join(self.seeds)
command = 'tendermint node --p2p.seeds "{}"'.format(seeds)
self._exec_command('tendermint', command, tty=True)
def reset_tendermint(self):
self.stop_tendermint()
@ -146,6 +163,11 @@ class Node():
except ApiException as e:
print("Exception when executing command: %s\n" % e)
def dial_seeds(self, seeds):
self.seeds = seeds
self.stop_tendermint()
self.start_tendermint()
def _create_namespace(self, namespace):
namespace_spec = kubernetes.client.V1Namespace()
namespace_spec.api_version = 'v1'

View File

@ -0,0 +1,15 @@
# This is a TOML config file.
# For more information, see https://github.com/toml-lang/toml
proxy_app = "tcp://127.0.0.1:46658"
moniker = "anonymous"
fast_sync = true
db_backend = "leveldb"
log_level = "state:info,*:error"
[rpc]
laddr = "tcp://0.0.0.0:46657"
[p2p]
laddr = "tcp://0.0.0.0:46656"
seeds = ""

View File

@ -0,0 +1 @@
{"genesis_time":"0001-01-01T00:00:00Z","chain_id":"test-chain-WeowEL","validators":[{"pub_key":{"type":"ed25519","data":"2A780D17E84274F6FF88A91239E761F99C743E05349075F5A83831C30FB6CF9C"},"power":10,"name":""}],"app_hash":""}

View File

@ -0,0 +1 @@
{"address":"FCBC8AA81C7BBDB67B2DE8A60F7F0C064F4E2DC5","pub_key":{"type":"ed25519","data":"2A780D17E84274F6FF88A91239E761F99C743E05349075F5A83831C30FB6CF9C"},"last_height":0,"last_round":0,"last_step":0,"last_signature":null,"priv_key":{"type":"ed25519","data":"14AD125DFB50481FDBE61DAE5F6B63C4FA86127C75E6A3F8796680F4D47728652A780D17E84274F6FF88A91239E761F99C743E05349075F5A83831C30FB6CF9C"}}