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
|
FROM tendermint/tendermint:develop
|
||||||
WORKDIR /
|
WORKDIR /
|
||||||
COPY ./tnode1 /tendermint
|
COPY ./tnode /tendermint
|
||||||
COPY tendermint_entrypoint.sh tendermint_entrypoint.sh
|
COPY tendermint_entrypoint.sh tendermint_entrypoint.sh
|
||||||
VOLUME /tmp/bigchain/tendermint /tendermint_node_data
|
VOLUME /tmp/bigchain/tendermint /tendermint_node_data
|
||||||
EXPOSE 46656 46657
|
EXPOSE 46656 46657
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# build mongodb image
|
# build mongodb image
|
||||||
docker build -t mongodb:bdb -f Dockerfile.mongo .
|
docker build -t mongodb:bdb-itest -f Dockerfile.mongo .
|
||||||
|
|
||||||
# build mongodb image
|
# build mongodb image
|
||||||
docker build -t tendermint:bdb -f Dockerfile.tendermint .
|
docker build -t tendermint:bdb-itest -f Dockerfile.tendermint .
|
||||||
|
|
||||||
# build bigchaindb image
|
# build bigchaindb image (execute in parent directory)
|
||||||
docker build -t bigchaindb:itest -f ../Dockerfile.itest .
|
cd .. && docker build -t bigchaindb:bdb-itest -f Dockerfile.itest .
|
||||||
|
|||||||
@ -42,7 +42,8 @@ class Network():
|
|||||||
|
|
||||||
nodes_online = 0
|
nodes_online = 0
|
||||||
while concurrent:
|
while concurrent:
|
||||||
if nodes_online == n:
|
print("Online nodes::", nodes_online)
|
||||||
|
if nodes_online >= n:
|
||||||
break
|
break
|
||||||
|
|
||||||
for i in range(0, n):
|
for i in range(0, n):
|
||||||
@ -52,12 +53,29 @@ class Network():
|
|||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
def stop(self, n=None):
|
def stop(self, n=None):
|
||||||
|
""" Stop n nodes are stopped """
|
||||||
if n is None:
|
if n is None:
|
||||||
n = self.max_size
|
n = self.max_size
|
||||||
|
|
||||||
|
n = min(n, self.max_size)
|
||||||
for i in range(0, n):
|
for i in range(0, n):
|
||||||
self.nodes[i].stop()
|
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):
|
def load_validators(count):
|
||||||
with open('validators.json') as json_data:
|
with open('validators.json') as json_data:
|
||||||
|
|||||||
@ -7,6 +7,8 @@ import kubernetes
|
|||||||
from kubernetes.client.rest import ApiException
|
from kubernetes.client.rest import ApiException
|
||||||
from kubernetes.stream import stream
|
from kubernetes.stream import stream
|
||||||
|
|
||||||
|
TENDERMINT_PORT = 46656
|
||||||
|
|
||||||
|
|
||||||
# TODO: create a default pod spec of BDB
|
# TODO: create a default pod spec of BDB
|
||||||
MONGODB_SPEC = {"name": "mongodb",
|
MONGODB_SPEC = {"name": "mongodb",
|
||||||
@ -25,13 +27,14 @@ BIGCHAINDB_SPEC = {"name": "bigchaindb",
|
|||||||
class Node():
|
class Node():
|
||||||
|
|
||||||
def __init__(self, tendermint_priv_validator=None, tendermint_genesis=None,
|
def __init__(self, tendermint_priv_validator=None, tendermint_genesis=None,
|
||||||
namespace='default', name=None):
|
namespace='default', name=None, seeds=[]):
|
||||||
|
|
||||||
kubernetes.config.load_kube_config()
|
kubernetes.config.load_kube_config()
|
||||||
config = kubernetes.client.Configuration()
|
config = kubernetes.client.Configuration()
|
||||||
config.assert_hostname = False
|
config.assert_hostname = False
|
||||||
kubernetes.client.Configuration.set_default(config)
|
kubernetes.client.Configuration.set_default(config)
|
||||||
|
|
||||||
|
self.seeds = seeds
|
||||||
self.api_instance = kubernetes.client.CoreV1Api(kubernetes.client.ApiClient(config))
|
self.api_instance = kubernetes.client.CoreV1Api(kubernetes.client.ApiClient(config))
|
||||||
self.namespace = namespace
|
self.namespace = namespace
|
||||||
self.name = name or uuid.uuid4().hex
|
self.name = name or uuid.uuid4().hex
|
||||||
@ -99,17 +102,31 @@ class Node():
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def uri(self):
|
def uri(self):
|
||||||
|
self.ip
|
||||||
|
|
||||||
|
@property
|
||||||
|
def ip(self):
|
||||||
if self.is_running:
|
if self.is_running:
|
||||||
resp = self.api_instance.read_namespaced_pod(self.name, self.namespace, exact=True)
|
resp = self.api_instance.read_namespaced_pod(self.name, self.namespace, exact=True)
|
||||||
return resp.status.pod_ip
|
return resp.status.pod_ip
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@property
|
||||||
|
def tendermint_uri(self):
|
||||||
|
ip = self.ip
|
||||||
|
if ip:
|
||||||
|
return '{}:{}'.format(ip, TENDERMINT_PORT)
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
def stop_tendermint(self):
|
def stop_tendermint(self):
|
||||||
self._exec_command('tendermint', 'pkill tendermint')
|
self._exec_command('tendermint', 'pkill tendermint')
|
||||||
|
|
||||||
def start_tendermint(self):
|
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):
|
def reset_tendermint(self):
|
||||||
self.stop_tendermint()
|
self.stop_tendermint()
|
||||||
@ -146,6 +163,11 @@ class Node():
|
|||||||
except ApiException as e:
|
except ApiException as e:
|
||||||
print("Exception when executing command: %s\n" % 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):
|
def _create_namespace(self, namespace):
|
||||||
namespace_spec = kubernetes.client.V1Namespace()
|
namespace_spec = kubernetes.client.V1Namespace()
|
||||||
namespace_spec.api_version = 'v1'
|
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