/cosmos-ansible

Ansible scripts for spinning up Cosmos network configurations

Primary LanguageShellApache License 2.0Apache-2.0

Ansible Cosmos Network Creator

Lint Join RS Testnet

✨ An Ansible toolkit for Cosmos networks 💫

Use this toolkit to:

  • Join a testnet
  • Start a local testnet
  • Start a multi-node testnet

Waterdrops feeding seedlings

🌰 Requirements

  • Python 3
  • Ansible
    • Install Ansible with pip and not apt:
      pip install ansible
      

🌱 Quick Start

To join the Cosmos Hub release testnet:

  1. Clone this repository
  2. Run ansible-galaxy install -r requirements.yml to install dependencies
  3. Set up SSH access to the target machine
  4. Run the playbook
    ansible-playbook node.yml -i examples/inventory-release-testnet.yml -e 'target=SERVER_IP_OR_DOMAIN'
    
  5. Log into the target machine to follow the syncing process
    journalctl -fu cosmovisor
    

Watch the video below to see the playbook in action:

Join the Cosmos Hub Public Testnet

🌳 Explore Further

Playbook Tags

Use node_control.py to run only part of the node playbook:

./node_control.py [-i inventory] [-t target] operation

The inventory argument is optional and defaults to inventory.yml (e.g. ./node_control.py restart).

The target option is the server IP or domain.

The operation will apply to all the nodes in the inventory:

  • restart restarts the node binary/cosmovisor service
  • stop stops the node binary/cosmovisor service
  • start starts the node binary/cosmovisor service
  • reboot reboots the machine
  • reset runs node_binary unsafe-reset-all

Role Folder Structure

  • The node role provides the core functionality of this toolkit
  • Node setup: roles/node/tasks/main.yml
  • Default variables: roles/node/defaults/main.yml
  • Systemd services: roles/node/templates/
  • To add a variable to the node config files, add it to:
    • roles/node/templates/ansible_vars.json.j2

🌴 Automatic Tests

This repository runs different tests automatically as defined below.

Fresh State (weekly)

The fresh state test is run using GitHub Actions and results are displayed with a badge at the top of this readme.

Mainnet exported genesis (bi-weekly)

We export a genesis file from cosmoshub-4 and modify it using our tinkerer script. The exported and modified genesis files can be accessed here.

We run the stateful tests with the modified genesis file when there is a major version of Gaia that is higher than the major version running on cosmoshub-4.

Joining the Public Testnet (weekly)

We test joining the Cosmos Hub public testnet weekly using GitHub Actions and a badge is displayed at the top of this readme.

🔎 Code Standards

  • All Python code is formatted to PEP 8 and linted with pylint.
  • All YAML code is linted with yamllint.
  • See lint.sh and .config/ for details.