add tasks, defailts, and handlers for the role
Signed-off-by: Jakub Sokołowski <jakub@status.im>
This commit is contained in:
parent
89f7c9778d
commit
17ba3997aa
|
@ -0,0 +1,60 @@
|
||||||
|
---
|
||||||
|
# map of network IDs
|
||||||
|
miner_network_ids:
|
||||||
|
frontier: 1
|
||||||
|
morden: 2
|
||||||
|
ropsten: 3
|
||||||
|
rinkeby: 4
|
||||||
|
|
||||||
|
geth_cont_image: 'ethereum/client-go:v1.8.27'
|
||||||
|
geth_cont_name: 'geth'
|
||||||
|
|
||||||
|
geth_cont_vol: '/docker/{{ geth_cont_name }}'
|
||||||
|
geth_data_path: '{{ geth_cont_vol }}/data'
|
||||||
|
geth_keys_path: '{{ geth_cont_vol }}/keys'
|
||||||
|
geth_enode_file: '{{ geth_keys_path }}/enode'
|
||||||
|
geth_sync_check_script: '/usr/local/bin/check_geth_sync.sh'
|
||||||
|
# RPC port of administration
|
||||||
|
geth_rpc_addr: '127.0.0.1'
|
||||||
|
geth_rpc_port: 8545
|
||||||
|
geth_rcp_api: 'eth,net,web3,personal,shh'
|
||||||
|
geth_alias: 'geth'
|
||||||
|
# Sync mode: full, fast, light
|
||||||
|
geth_sync_mode: 'light'
|
||||||
|
# Peer discovery protocol
|
||||||
|
geth_v5disc_enabled: true
|
||||||
|
# Log level: 0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail
|
||||||
|
geth_log_level: 3
|
||||||
|
# 1=Frontier, 2=Morden (disused), 3=Ropsten, 4=Rinkeby
|
||||||
|
geth_network_name: 'ropsten'
|
||||||
|
geth_network_id: '{{ faucet_network_ids[faucet_network_name] | mandatory }}'
|
||||||
|
# Maximum percentage of time allowed for serving LES requests (0-90)
|
||||||
|
geth_light_serv: 90
|
||||||
|
# Maximum number of LES client peers (default: 100)
|
||||||
|
geth_light_peers: 200
|
||||||
|
# Port to listen on
|
||||||
|
geth_port: 30303
|
||||||
|
# Memory to use
|
||||||
|
geth_cache: 1536
|
||||||
|
# Address to advertise
|
||||||
|
geth_public_addr: '{{ ansible_host }}'
|
||||||
|
|
||||||
|
# security
|
||||||
|
geth_account_address: ~
|
||||||
|
geth_account_password: ~
|
||||||
|
|
||||||
|
# Consul config
|
||||||
|
geth_consul_tags:
|
||||||
|
- geth
|
||||||
|
- '{{ env }}.{{ stage }}'
|
||||||
|
- '{{ geth_network_name }}'
|
||||||
|
|
||||||
|
# resources limits to avoid killing the host
|
||||||
|
cont_mem_ratio: 0.7
|
||||||
|
cont_mem_limit: '{{ (ansible_memtotal_mb * cont_mem_ratio|float) | int }}'
|
||||||
|
cont_swap_limit: '{{ (cont_mem_limit|int) + (ansible_swaptotal_mb * cont_mem_ratio|float) | int }}'
|
||||||
|
|
||||||
|
# generic container beaviour
|
||||||
|
cont_state: started
|
||||||
|
cont_restart: false
|
||||||
|
cont_recreate: false
|
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
- name: Save iptables rules
|
||||||
|
shell: iptables-save > /etc/iptables/rules.v4
|
|
@ -0,0 +1,32 @@
|
||||||
|
---
|
||||||
|
- name: Geth | Create sync check script
|
||||||
|
copy:
|
||||||
|
dest: '{{ geth_sync_check_script }}'
|
||||||
|
mode: 0755
|
||||||
|
content: |
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
echo -n "Geth synced: "
|
||||||
|
RESP=$(curl -s -X POST -H 'Content-type:application/json' \
|
||||||
|
--data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' \
|
||||||
|
http://localhost:{{ faucet_geth_rpc_port }}/)
|
||||||
|
echo "${RESP}" | jq -e ".result == false" \
|
||||||
|
|| ( echo "${RESP}" | jq . ; exit 1 )
|
||||||
|
|
||||||
|
- name: Geth | Create Consul service definition
|
||||||
|
include_role: name=consul-service
|
||||||
|
vars:
|
||||||
|
consul_config_name: '{{ geth_cont_name | replace("-", "_") }}'
|
||||||
|
consul_services:
|
||||||
|
- name: '{{ geth_cont_name }}'
|
||||||
|
tags: '{{ geth_consul_tags }}'
|
||||||
|
port: '{{ geth_port }}'
|
||||||
|
meta:
|
||||||
|
env: '{{ env }}'
|
||||||
|
stage: '{{ stage }}'
|
||||||
|
node_addr: '{{ node_info.json.result.id }}'
|
||||||
|
node_enode: '{{ node_info.json.result.enode }}'
|
||||||
|
checks:
|
||||||
|
- id: '{{ geth_cont_name }}-rpc-status'
|
||||||
|
type: script
|
||||||
|
script: '{{ geth_sync_check_script }}'
|
|
@ -0,0 +1,44 @@
|
||||||
|
---
|
||||||
|
- name: Geth | Create the container
|
||||||
|
docker_container:
|
||||||
|
name: '{{ geth_cont_name }}'
|
||||||
|
image: '{{ geth_cont_image }}'
|
||||||
|
user: root
|
||||||
|
pull: true
|
||||||
|
restart_policy: always
|
||||||
|
state: '{{ cont_state }}'
|
||||||
|
recreate: '{{ cont_recreate }}'
|
||||||
|
restart: '{{ cont_restart }}'
|
||||||
|
# some limits due to statusd hogging resources
|
||||||
|
memory: '{{ cont_mem_limit }}m'
|
||||||
|
memory_swap: '{{ cont_swap_limit }}m'
|
||||||
|
ports:
|
||||||
|
- '{{ geth_port }}:{{ geth_port }}'
|
||||||
|
- '{{ geth_rpc_addr }}:{{ geth_rpc_port }}:{{ geth_rpc_port }}'
|
||||||
|
command: |
|
||||||
|
--networkid={{ geth_network_id }}
|
||||||
|
{% if geth_v5disc_enabled %}
|
||||||
|
--v5disc
|
||||||
|
{% endif %}
|
||||||
|
--syncmode={{ geth_sync_mode }}
|
||||||
|
{% if geth_sync_mode == 'light' %}
|
||||||
|
--lightserv={{ geth_light_serv }}
|
||||||
|
--lightpeers={{ geth_light_peers }}
|
||||||
|
{% endif %}
|
||||||
|
--verbosity={{ geth_log_level }}
|
||||||
|
--cache={{ geth_cache }}
|
||||||
|
--port={{ geth_port }}
|
||||||
|
--nat=extip:{{ geth_public_addr }}
|
||||||
|
--unlock={{ geth_account_address }}
|
||||||
|
--datadir=/data
|
||||||
|
--password=/keys/password
|
||||||
|
--keystore=/keys
|
||||||
|
--rpc
|
||||||
|
--rpcaddr=0.0.0.0
|
||||||
|
--rpcport={{ geth_rpc_port }}
|
||||||
|
--rpcvhosts={{ faucet_geth_alias }},localhost
|
||||||
|
--rpcapi={{ geth_rcp_api }}
|
||||||
|
volumes:
|
||||||
|
- '{{ geth_cont_vol }}/keys:/keys:rw'
|
||||||
|
# WARNING: This assumes /data is mounted, see bootstrap role
|
||||||
|
- '{{ geth_data_path }}:/data:rw'
|
|
@ -0,0 +1,12 @@
|
||||||
|
---
|
||||||
|
- name: Enable LES ports
|
||||||
|
iptables:
|
||||||
|
comment: '{{ geth_name }}'
|
||||||
|
jump: ACCEPT
|
||||||
|
action: insert
|
||||||
|
chain: DOCKER-USER
|
||||||
|
source: '0.0.0.0/0'
|
||||||
|
protocol: 'tcp'
|
||||||
|
destination_port: '{{ geth_port }}'
|
||||||
|
notify:
|
||||||
|
- Save iptables rules
|
|
@ -0,0 +1,44 @@
|
||||||
|
---
|
||||||
|
- name: Geth | Create keys directory
|
||||||
|
file:
|
||||||
|
path: '{{ geth_keys_path }}'
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- name: Geth | Find all account files
|
||||||
|
find:
|
||||||
|
paths: '{{ geth_keys_path }}'
|
||||||
|
patterns: 'UTC--*'
|
||||||
|
file_type: file
|
||||||
|
register: account_files
|
||||||
|
|
||||||
|
- name: Geth | Set password to be empty
|
||||||
|
copy:
|
||||||
|
dest: '{{ geth_keys_path }}/password'
|
||||||
|
content: '{{ geth_account_password | mandatory }}'
|
||||||
|
|
||||||
|
- name: Geth | Generate account
|
||||||
|
docker_container:
|
||||||
|
name: '{{ geth_cont_name }}'
|
||||||
|
image: '{{ geth_cont_image }}'
|
||||||
|
pull: true
|
||||||
|
auto_remove: yes
|
||||||
|
command: |
|
||||||
|
account new
|
||||||
|
--keystore=/keys
|
||||||
|
--password=/keys/password
|
||||||
|
volumes:
|
||||||
|
- '{{ geth_cont_vol }}/keys:/keys:rw'
|
||||||
|
when: account_files.files | length == 0
|
||||||
|
|
||||||
|
- name: Geth | Save account address
|
||||||
|
uri:
|
||||||
|
url: http://localhost:{{ geth_rpc_port }}/
|
||||||
|
method: POST
|
||||||
|
body: '{"id": 1, "method": "eth_accounts"}'
|
||||||
|
body_format: json
|
||||||
|
return_content: yes
|
||||||
|
register: geth_accounts
|
||||||
|
|
||||||
|
- name: Geth | Extract account address
|
||||||
|
set_fact:
|
||||||
|
geth_account_address: '{{ node_info.json.result | first }}'
|
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
- import_tasks: generate.yml
|
||||||
|
- import_tasks: container.yml
|
||||||
|
- import_tasks: firewall.yml
|
||||||
|
- import_tasks: save_enode.yml
|
||||||
|
- import_tasks: consul.yml
|
|
@ -0,0 +1,23 @@
|
||||||
|
---
|
||||||
|
- name: Geth | Wait for JSON RPC port to respond
|
||||||
|
wait_for:
|
||||||
|
host: 'localhost'
|
||||||
|
port: '{{ geth_rpc_port }}'
|
||||||
|
delay: 5
|
||||||
|
state: drained
|
||||||
|
|
||||||
|
- name: Geth | Get enode address
|
||||||
|
uri:
|
||||||
|
url: http://localhost:{{ geth_rpc_port }}/
|
||||||
|
method: POST
|
||||||
|
body: '{"id": 1, "method": "admin_nodeInfo"}'
|
||||||
|
body_format: json
|
||||||
|
return_content: yes
|
||||||
|
register: node_info
|
||||||
|
|
||||||
|
- name: 'Geth | Save enode address: {{ geth_enode_file }}'
|
||||||
|
copy:
|
||||||
|
dest: '{{ geth_enode_file }}'
|
||||||
|
content: '{{ node_info.json.result.enode }}'
|
||||||
|
owner:
|
||||||
|
mode: 0644
|
Loading…
Reference in New Issue