You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Greg Szabo 4e16ee6d78 Refactored Ansible, added tendermint and basecoin configuration and multiple playbooks 7 years ago
..
group_vars Refactored Ansible, added tendermint and basecoin configuration and multiple playbooks 7 years ago
img DigitalOcean example and genesis file creation added 7 years ago
inventory Refactored Ansible, added tendermint and basecoin configuration and multiple playbooks 7 years ago
roles Refactored Ansible, added tendermint and basecoin configuration and multiple playbooks 7 years ago
.gitignore DigitalOcean example and genesis file creation added 7 years ago
LICENSE DigitalOcean example and genesis file creation added 7 years ago
README.md Refactored Ansible, added tendermint and basecoin configuration and multiple playbooks 7 years ago
Vagrantfile DigitalOcean example and genesis file creation added 7 years ago
ansible.cfg DigitalOcean example and genesis file creation added 7 years ago
config.yml Refactored Ansible, added tendermint and basecoin configuration and multiple playbooks 7 years ago
install.yml Refactored Ansible, added tendermint and basecoin configuration and multiple playbooks 7 years ago
reinit.yml Refactored Ansible, added tendermint and basecoin configuration and multiple playbooks 7 years ago
reset.yml Refactored Ansible, added tendermint and basecoin configuration and multiple playbooks 7 years ago
restart.yml Refactored Ansible, added tendermint and basecoin configuration and multiple playbooks 7 years ago
start.yml Refactored Ansible, added tendermint and basecoin configuration and multiple playbooks 7 years ago
stop.yml Refactored Ansible, added tendermint and basecoin configuration and multiple playbooks 7 years ago

README.md

Ansible playbook for Tendermint

Ansible plus Tendermint

The playbooks in this folder run ansible roles which:

  • install and configure tendermint
  • install and configure basecoin
  • start/stop tendermint and basecoin

Prerequisites

  • Ansible 2.0 or higher
  • SSH key to the servers

Optional for DigitalOcean droplets:

  • DigitalOcean API Token
  • python dopy package

Head over to the Terraform folder for a description on how to get a DigitalOcean API Token.

Optional for Amazon AWS instances:

  • Amazon AWS API access key ID and secret access key.

The cloud inventory scripts come from the ansible team at https://github.com/ansible/ansible. You can get the latest version from the contrib/inventory folder.

Ansible setup

Ansible requires a "command machine" or "local machine" or "orchestrator machine" to run on. This can be your laptop or any machine that runs linux. (It does not have to be part of the cloud network that hosts your servers.)

Note: The below commands use the Ubuntu/Debian apt-get command. To make it compatible with RedHat/CentOS, replace it with yum.

sudo apt-get install ansible

To make life easier, you can start an SSH Agent and load your SSH key(s). This way ansible will have an uninterrupted way of connecting to tour servers.

ssh-agent > ~/.ssh/ssh.env
source ~/.ssh/ssh.env

ssh-add private.key

Subsequently, as long as the agent is running, you can use source ~/.ssh/ssh.env to load the keys to the current session.

Optional cloud dependencies

If you are using a cloud provider to host your servers, you need the below dependencies installed on your local machine.

DigitalOcean inventory dependencies:

sudo apt-get install python-pip
sudo pip install dopy

Amazon AWS inventory dependencies:

sudo apt-get install python-boto

Refreshing the DigitalOcean inventory

If you just finished creating droplets, the local DigitalOcean inventory cache is not up-to-date. To refresh it, run:

DO_API_TOKEN="<The API token received from DigitalOcean>"
python -u inventory/digital_ocean.py --refresh-cache 1> /dev/null

Refreshing the Amazon AWS inventory

If you just finished creating Amazon AWS EC2 instances, the local AWS inventory cache is not up-to-date. To refresh it, run:

AWS_ACCESS_KEY_ID='<The API access key ID received from Amazon>'
AWS_SECRET_ACCESS_KEY='<The API secret access key received from Amazon>'
python -u inventory/ec2.py --refresh-cache 1> /dev/null

Note you don't need the access key and secret key set, if you are running ansible on an Amazon AMI instance with the proper IAM permissions set.

Running the playbook

The playbook is locked down to only run if the environment variable TF_VAR_TESTNET_NAME is populated. This is a precaution so you don't accidentally run the playbook on all your servers.

The variable TF_VAR_TESTNET_NAME contains the testnet name which ansible translates into an ansible group. If you used Terraform to create the servers, it was the testnet name used there.

If the playbook cannot connect to the servers because of public key denial, your SSH Agent is not set up properly. Alternatively you can add the SSH key to ansible using the --private-key option.

DigitalOcean

DO_API_TOKEN="<The API token received from DigitalOcean>"
TF_VAR_TESTNET_NAME="testnet-servers"
ansible-playbook -i inventory/digital_ocean.py install.yml

Amazon AWS

AWS_ACCESS_KEY_ID='<The API access key ID received from Amazon>'
AWS_SECRET_ACCESS_KEY='<The API secret access key received from Amazon>'
TF_VAR_TESTNET_NAME="testnet-servers"
ansible-playbook -i inventory/ec2.py install.yml

Installing custom versions

By default ansible installs the tendermint and basecoin binary versions defined in its [default variables](#Default variables). If you built your own version of the binaries, you can tell ansible to install that instead.

GOPATH="<your go path>"
go get -u github.com/tendermint/tendermint/cmd/tendermint
go get -u github.com/tendermint/basecoin/cmd/basecoin

DO_API_TOKEN="<The API token received from DigitalOcean>"
TF_VAR_TESTNET_NAME="testnet-servers"
ansible-playbook -i inventory/digital_ocean.py install.yml -e tendermint_release_install=false -e basecoin_release_install=false

Starting the servers

To be continued...

Default variables

To be continued...