Merge pull request #68 from k9ert/master

docker improvements and tag support
This commit is contained in:
Stepan Snigirev 2020-02-19 11:24:50 +01:00 committed by GitHub
commit d5a5659867
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 33 additions and 9 deletions

View file

@ -40,6 +40,7 @@ addons:
- ccache
before_install:
- docker pull registry.gitlab.com/cryptoadvance/specter-desktop/python-bitcoind:latest
- set -o errexit; source ./tests/install_bitcoind.sh
script:
- pip install -e .

View file

@ -185,10 +185,11 @@ class BitcoindPlainController(BitcoindController):
class BitcoindDockerController(BitcoindController):
''' A class specifically controlling a docker-based bitcoind-container '''
def __init__(self,rpcport=18443):
def __init__(self,rpcport=18443, docker_tag="latest"):
self.btcd_container = None
super().__init__(rpcport=rpcport)
self.docker_exec = which('docker')
self.docker_tag=docker_tag
if self.docker_exec == None:
raise("Docker not existing!")
if self.detect_bitcoind_container(rpcport) != None:
@ -204,7 +205,8 @@ class BitcoindDockerController(BitcoindController):
'{}/tcp'.format(self.rpcconn.rpcport): self.rpcconn.rpcport
}
logging.debug("portmapping: {}".format(ports))
self.btcd_container = dclient.containers.run("registry.gitlab.com/k9ert/specter-desktop/python-bitcoind:latest", bitcoind_path, ports=ports, detach=True)
image = dclient.images.get("registry.gitlab.com/cryptoadvance/specter-desktop/python-bitcoind:{}".format(self.docker_tag))
self.btcd_container = dclient.containers.run("registry.gitlab.com/cryptoadvance/specter-desktop/python-bitcoind:{}".format(self.docker_tag), bitcoind_path, ports=ports, detach=True)
def cleanup_docker_bitcoind():
self.btcd_container.stop()
self.btcd_container.remove()
@ -217,6 +219,7 @@ class BitcoindDockerController(BitcoindController):
raise Exception("Couldn't find container or it died already. Check the logs!")
else:
self.rpcconn = rpcconn
return
def stop_bitcoind(self):

View file

@ -2,6 +2,7 @@
via docker.
'''
import os
import sys
import atexit
import logging
import shutil
@ -23,20 +24,39 @@ def cli():
@cli.command()
@click.option('--debug/--no-debug', default=False)
@click.option('--mining/--no-mining', default=True)
def bitcoind(debug,mining):
@click.option('--docker-tag', "docker_tag", default="latest")
def bitcoind(debug,mining, docker_tag):
mining_every_x_seconds = 15
if debug:
logging.getLogger().setLevel(logging.DEBUG)
click.echo(" --> starting or detecting container")
my_bitcoind = BitcoindDockerController()
my_bitcoind.start_bitcoind()
click.echo(" --> containerId: %s" % my_bitcoind.btcd_container.id)
click.echo(" --> url: %s" % my_bitcoind.rpcconn.render_url())
my_bitcoind = BitcoindDockerController(docker_tag=docker_tag)
try:
my_bitcoind.start_bitcoind()
except docker.errors.ImageNotFound:
click.echo(" --> Image with tag {} does not exist!".format(docker_tag))
click.echo(" --> Try to download first with docker pull registry.gitlab.com/cryptoadvance/specter-desktop/python-bitcoind:{}".format(docker_tag))
sys.exit(1)
tags_of_image = [ image.split(":")[-1] for image in my_bitcoind.btcd_container.image.tags]
if not docker_tag in tags_of_image:
click.echo(" --> The running docker container is not the tag you requested!")
click.echo(" --> please stop first with docker stop {}".format(my_bitcoind.btcd_container.id))
sys.exit(1)
click.echo(" --> containerImage: %s" % my_bitcoind.btcd_container.image.tags)
click.echo(" --> url: %s" % my_bitcoind.rpcconn.render_url())
click.echo(" --> user, password: bitcoin, secret")
click.echo(" --> host, port: localhost, 18443")
click.echo(" --> bitcoin-cli: bitcoin-cli -regtest -rpcuser=bitcoin -rpcpassword=secret getblockchaininfo ")
if mining:
click.echo(" --> Now, mining a block every %i seconds. Avoid it via --no-mining" % mining_every_x_seconds)
# Get each address some coins
for address in fetch_wallet_addresses_for_mining():
my_bitcoind.mine(address=address)
try:
for address in fetch_wallet_addresses_for_mining():
my_bitcoind.mine(address=address)
except FileNotFoundError:
# might happen if there no ~/.specter folder yet
pass
# make them spendable
my_bitcoind.mine(block_count=100)
click.echo(" --> ",nl=False)