Skip to content

skalenetwork/node-provisioning

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

SKALE and Fair Node Provisioning

Discord

This repo will help deploy and register multiple SKALE and Fair nodes in the cloud automatically.

NOTE: This is for QA and testing purposes only.

Fair Node Provisioning

Fair network creation

1. Prepare inventory

  1. Set node_type=fair_boot
  2. Set build_type=git (to use Docker image versions specified in the corresponding branch of the skale-node repository on GitHub), or build_type=source (to build from source). In the second case, set the appropriate local paths to the required cloned repositories and set
    container_configs_dir variable (usually it's /root/skale-node).
  3. Don't forget to set all other necessary variables like eth_private_key, endpoint, etc.

2. Setup Fair boot nodes

ansible-playbook -i inventory main.yaml

The following playbooks are processed here: deploy_contracts.yaml, sgx_sim.yaml, setup.yaml, validator.yaml, signature.yaml, link_addresses.yaml, register.yaml

3. Create schain

  1. Set the schain name (it must match the name specified in the fair_static_params.yaml file for the corresponding network in the relevant branch of the skale-node repository). For example, for the devnet, the typical name is fair-devnet1.
  2. Set the desired chain_type (for example, LARGE4 - for 4-nodes chain )
  3. Run the following playbook:
ansible-playbook -i inventory create_chain.yaml

4. Deploy Fair contracts

  1. Set fair_tag variable (Fair manager version)
  2. Set boot_endpoint variable (endpoint of schain that was created before)
  3. Run the following playbook:
ansible-playbook -i inventory deploy_fair_manager.yaml

5. Migrate Fair boot nodes

  1. Set node_type=fair
  2. Run the following playbook:
ansible-playbook -i inventory fair_migrate.yaml

6. Setup Fair nodes

  1. Set node_type=fair
  2. Run the following playbook:
ansible-playbook -i inventory main_fair.yaml

SKALE Node Provisioning

Host requirements

  • Terraform >= 0.12
  • Python >= 3.6

Supported providers

  • AWS

Usage

Secrets preparation

  1. Copy contents of the terraform.tfvars.template to the terraform.tfvars and fill all variables
  2. Set following variables to the environment:
PROVIDER - Cloud provider: `do` or `aws`
ENDPOINT - Endpoint of the ETH network with manager contract
NODES - Number of nodes to be created
SKALE_AMOUNT - Amount of SKALE tokens to transfer
ETH_AMOUNT- Amount of ETH to transfer
ETH_PRIVATE_KEY - Base ETH private key to send funds

Provision SKALE nodes in the cloud

bash run.sh

Setup on existent nodes from sources

Ansible directory contains ansible provision for setuping skale node system.

Steps to run provision

  1. Firstly you should create two nodes and attach external volume to it.
  2. Install ansible on your machine.
  3. Then you should copy inventory template from inventory/dev and fill it with absent fields.
  4. Also you should add information about host that you cerated before
  5. Run ansible-playbook -i path-to-your-inventory main.yaml

Other options

Recreates accounts from which sgx key will be configured.

ansible-playbook -i path-to-your-inventory wallet.yaml

Setups node on remove server:

  1. Uploads sources.
  2. Reinstalls skale-cli.
  3. Runs skale node init.
  4. Registers node on manager.
ansible-playbook -i path-to-your-inventory setup.yaml

Installs needed dependecies and setups os configs.

ansible-playbook -i path-to-your-inventory base.yaml

Destroys all containers, removes .skale, reruns setup.yaml steps.

ansible-playbook -i path-to-your-inventory restart.yaml 

Destroys all containers, removes .skale, reruns setup.yaml steps.

ansible-playbook -i path-to-your-inventory restart.yaml 

Recreates accounts and runs restart.yaml steps.

ansible-playbook -i path-to-your-inventory restart.yaml 

Tasks

Deploy SM

Required variables in the inventory:

manager_tag=''
eth_private_key=''
endpoint=''
deploy_gas_price=''

aws_key='' # for S3 upload
aws_secret='' # for S3 upload

Deploy and upload ABIs to AWS S3:

ansible-playbook -i inventory deploy_contracts.yaml

Deploy only:

ansible-playbook -i inventory deploy_contracts.yaml --tags deploy_contracts

Upload only (from helper-scripts/contracts_data/manager.json):

ansible-playbook -i inventory deploy_contracts.yaml --tags upload_contracts

Upload SSL certificates

  1. Copy cert.pem and privkey.pem files to the ansible/files directory
  2. Run:
ansible-playbook -i path-to-your-inventory ssl.yaml 

Upload authorized_keys to nodes

  1. add authorized_keys file with all id_rsa.pub what you want to add for access on nodes to the ansible/files directory
  2. Run:
ansible-playbook -i path-to-your-inventory upload_authorized_keys.yaml 

Run main script without IMA deployment

ansible-playbook -i inventory main.yaml --skip-tags deploy_ima,upload_ima

Run skaled monitor

  1. Create if not exists virtual env for python 3.7 or higher in root of project and activate she before script start
  2. Run from root of roject:
pip install -r skale-nodes/ansible/requirements.txt
  1. copy inventory-template like inventory and fill dev file with absent fields.
  2. Add node_ips.json file with all ips what you want (example {"node_name": "node_ip", ..., "node_name": "node_ip"}) to the ansible/files directory
  3. Go to skale-nodes/ansible dir and run:
bash utils/generate_hosts.sh
ansible-playbook -i inventory run_monitor.yaml

About

Provision SKALE nodes in the cloud for testing purposes

Topics

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Packages

No packages published

Contributors 11