mirror of
https://github.com/bigchaindb/bigchaindb.git
synced 2024-10-13 13:34:05 +00:00
ND Api to connect nodes
This commit is contained in:
parent
2caf95bb43
commit
8f38020952
@ -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
|
||||
|
@ -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 .
|
||||
|
@ -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:
|
||||
|
@ -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'
|
||||
|
15
network_driver/tnode/config.toml
Normal file
15
network_driver/tnode/config.toml
Normal 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 = ""
|
1
network_driver/tnode/genesis.json
Normal file
1
network_driver/tnode/genesis.json
Normal 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":""}
|
1
network_driver/tnode/priv_validator.json
Normal file
1
network_driver/tnode/priv_validator.json
Normal 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"}}
|
Loading…
x
Reference in New Issue
Block a user