mirror of https://github.com/poanetwork/gecko.git
ansible: Add service_playbook.yml & supporting roles
This playbook - Installs Gecko dependencies - Clones & builds ava-build/gecko - Creates an ava user - Installs Gecko in /usr/bin - Creates and installs a staking certificate - Installs Gecko as a Systemd service called "ava" - Configures /var/lib/ava/db as the database - Configures /var/log/ava as the log destination - Starts the service
This commit is contained in:
parent
bba45ed183
commit
99ca4a50af
|
@ -18,6 +18,7 @@ jobs:
|
||||||
scripts/ansible/kill_playbook.yml
|
scripts/ansible/kill_playbook.yml
|
||||||
scripts/ansible/ping_playbook.yml
|
scripts/ansible/ping_playbook.yml
|
||||||
scripts/ansible/restart_playbook.yml
|
scripts/ansible/restart_playbook.yml
|
||||||
|
scripts/ansible/service_playbook.yml
|
||||||
scripts/ansible/update_playbook.yml
|
scripts/ansible/update_playbook.yml
|
||||||
|
|
||||||
args:
|
args:
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
ava_nodes:
|
||||||
|
hosts:
|
||||||
|
localhost:
|
|
@ -0,0 +1,16 @@
|
||||||
|
- name: Install deps
|
||||||
|
become: true
|
||||||
|
apt:
|
||||||
|
name:
|
||||||
|
# Build
|
||||||
|
- cmake
|
||||||
|
- curl
|
||||||
|
- g++
|
||||||
|
- golang-go # Assumes Ubuntu 20.04, where this installs Go 1.13
|
||||||
|
- libssl-dev
|
||||||
|
- libuv1-dev
|
||||||
|
- make
|
||||||
|
# Staking key management
|
||||||
|
- openssl
|
||||||
|
- python3-cryptography
|
||||||
|
state: present
|
|
@ -0,0 +1,3 @@
|
||||||
|
staking_tls_key_file: "{{ repo_folder }}/keys/staker.key"
|
||||||
|
staking_tls_csr_file: "{{ repo_folder }}/keys/staker.csr"
|
||||||
|
staking_tls_cert_file: "{{ repo_folder }}/keys/staker.crt"
|
|
@ -0,0 +1,31 @@
|
||||||
|
- name: Create staker key
|
||||||
|
openssl_privatekey:
|
||||||
|
path: "{{ staking_tls_key_file }}"
|
||||||
|
type: RSA
|
||||||
|
size: 4096
|
||||||
|
|
||||||
|
- name: Create staker certificate request
|
||||||
|
openssl_csr:
|
||||||
|
path: "{{ staking_tls_csr_file }}"
|
||||||
|
C: US
|
||||||
|
ST: NY
|
||||||
|
O: Avalabs
|
||||||
|
CN: ava
|
||||||
|
privatekey_path: "{{ staking_tls_key_file }}"
|
||||||
|
digest: sha256
|
||||||
|
# genStaker.sh doesn't include a subjectAltName in the signing request.
|
||||||
|
# If subject_alt_name isn't specified, then Ansible defaults to using
|
||||||
|
# the CN as the SAN.
|
||||||
|
use_common_name_for_san: false
|
||||||
|
|
||||||
|
# genStaker.sh generates a certificate valid for 365250 days (1000 years).
|
||||||
|
# That duration is not replicated here, because specifying a relative
|
||||||
|
# time to ownca_not_after would make this task non-idempotent.
|
||||||
|
- name: Create staker certificate
|
||||||
|
openssl_certificate:
|
||||||
|
path: "{{ staking_tls_cert_file }}"
|
||||||
|
csr_path: "{{ staking_tls_csr_file }}"
|
||||||
|
ownca_path: "{{ repo_folder }}/keys/rootCA.crt"
|
||||||
|
ownca_privatekey_path: "{{ repo_folder }}/keys/rootCA.key"
|
||||||
|
ownca_digest: sha256
|
||||||
|
provider: ownca
|
|
@ -0,0 +1,6 @@
|
||||||
|
ava_daemon_bin_dir: "/usr/bin"
|
||||||
|
ava_daemon_data_dir: "/var/lib/{{ ava_daemon_user }}"
|
||||||
|
ava_daemon_db_dir: "{{ ava_daemon_data_dir }}/db"
|
||||||
|
ava_daemon_keys_dir: "{{ ava_daemon_data_dir }}/keys"
|
||||||
|
ava_daemon_log_dir: "/var/log/ava"
|
||||||
|
ava)daemon_plugin_dir: "/usr/lib/ava/plugins"
|
|
@ -0,0 +1,68 @@
|
||||||
|
- name: Create directories
|
||||||
|
become: true
|
||||||
|
file:
|
||||||
|
path: "{{ item.path }}"
|
||||||
|
owner: "{{ item.owner | default(ava_daemon_user) }}"
|
||||||
|
group: "{{ item.group | default(ava_daemon_group) }}"
|
||||||
|
mode: "{{ item.mode }}"
|
||||||
|
recurse: "{{ item.recurse | default(omit) }}"
|
||||||
|
state: directory
|
||||||
|
loop:
|
||||||
|
- path: "{{ ava_daemon_data_dir }}"
|
||||||
|
mode: u=rwX,go=rX
|
||||||
|
- path: "{{ ava_daemon_keys_dir }}"
|
||||||
|
mode: u=rX,go=
|
||||||
|
- path: "{{ ava_daemon_log_dir }}"
|
||||||
|
mode: u=rwX,go=rX
|
||||||
|
- path: "{{ ava_daemon_plugin_dir }}"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: u=rwX,go=rX
|
||||||
|
recurse: true
|
||||||
|
loop_control:
|
||||||
|
label: "{{ item.path }}"
|
||||||
|
notify:
|
||||||
|
- Restart AVA service
|
||||||
|
|
||||||
|
- name: Install binary
|
||||||
|
become: true
|
||||||
|
copy:
|
||||||
|
src: "{{ ava_binary }}"
|
||||||
|
dest: "{{ ava_daemon_bin_dir }}/ava"
|
||||||
|
remote_src: true
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: u=rwx,go=rx
|
||||||
|
notify:
|
||||||
|
- Restart AVA service
|
||||||
|
|
||||||
|
- name: Install plugins
|
||||||
|
become: true
|
||||||
|
copy:
|
||||||
|
src: "{{ item.path }}"
|
||||||
|
dest: "{{ ava_daemon_plugin_dir }}"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: u=rwx,go=rx
|
||||||
|
remote_src: true
|
||||||
|
loop:
|
||||||
|
- path: "{{ repo_folder }}/build/plugins/evm"
|
||||||
|
notify:
|
||||||
|
- Restart AVA service
|
||||||
|
|
||||||
|
- name: Install staking files
|
||||||
|
become: true
|
||||||
|
copy:
|
||||||
|
src: "{{ item.src }}"
|
||||||
|
dest: "{{ ava_daemon_keys_dir }}"
|
||||||
|
owner: "{{ ava_daemon_user }}"
|
||||||
|
group: "{{ ava_daemon_group }}"
|
||||||
|
mode: "{{ item.mode }}"
|
||||||
|
remote_src: true
|
||||||
|
loop:
|
||||||
|
- src: "{{ staking_tls_key_file }}"
|
||||||
|
mode: u=r,go=
|
||||||
|
- src: "{{ staking_tls_cert_file }}"
|
||||||
|
mode: ugo=r
|
||||||
|
notify:
|
||||||
|
- Restart AVA service
|
|
@ -0,0 +1,5 @@
|
||||||
|
ava_daemon_bin_dir: "/usr/bin"
|
||||||
|
ava_daemon_data_dir: "/var/lib/{{ ava_daemon_user }}"
|
||||||
|
ava_daemon_keys_dir: "{{ ava_daemon_data_dir }}/keys"
|
||||||
|
ava_daemon_plugin_dir: "/usr/lib/ava/plugins"
|
||||||
|
log_level: info
|
|
@ -0,0 +1,10 @@
|
||||||
|
- name: Reload systemd
|
||||||
|
become: true
|
||||||
|
systemd:
|
||||||
|
daaemon_reload: true
|
||||||
|
|
||||||
|
- name: Restart AVA service
|
||||||
|
become: true
|
||||||
|
service:
|
||||||
|
name: ava
|
||||||
|
state: restarted
|
|
@ -0,0 +1,21 @@
|
||||||
|
- name: Configure AVA service
|
||||||
|
become: true
|
||||||
|
template:
|
||||||
|
src: ava.service
|
||||||
|
dest: /etc/systemd/system
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: u=rw,go=r
|
||||||
|
notify:
|
||||||
|
- Reload systemd
|
||||||
|
- Restart AVA service
|
||||||
|
|
||||||
|
- name: Enable AVA service
|
||||||
|
become: true
|
||||||
|
systemd:
|
||||||
|
name: ava
|
||||||
|
state: started
|
||||||
|
enabled: true
|
||||||
|
daemon_reload: true
|
||||||
|
notify:
|
||||||
|
- Restart AVA service
|
|
@ -0,0 +1,23 @@
|
||||||
|
# {{ ansible_managed }}
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=AVA test node
|
||||||
|
Documentation=https://docs.ava.network/
|
||||||
|
After=network.target
|
||||||
|
StartLimitIntervalSec=0
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory={{ ava_daemon_data_dir }}
|
||||||
|
Restart=always
|
||||||
|
RestartSec=1
|
||||||
|
User={{ ava_daemon_user }}
|
||||||
|
ExecStart={{ ava_daemon_bin_dir }}/ava \
|
||||||
|
--public-ip="{{ ansible_facts.default_ipv4.address }}" \
|
||||||
|
--db-dir="{{ ava_daemon_db_dir }}" \
|
||||||
|
--plugin-dir="{{ ava_daemon_plugin_dir }}" \
|
||||||
|
--log-dir="{{ ava_daemon_log_dir }}" \
|
||||||
|
--log-level="{{ log_level }}"
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
|
@ -0,0 +1 @@
|
||||||
|
log_level: info
|
|
@ -0,0 +1,2 @@
|
||||||
|
ava_daemon_user: ava
|
||||||
|
ava_daemon_group: "{{ ava_daemon_user }}"
|
|
@ -0,0 +1,15 @@
|
||||||
|
- name: Create AVA daemon group
|
||||||
|
become: true
|
||||||
|
group:
|
||||||
|
name: "{{ ava_daemon_group }}"
|
||||||
|
system: true
|
||||||
|
|
||||||
|
- name: Create AVA daemon user
|
||||||
|
become: true
|
||||||
|
user:
|
||||||
|
name: "{{ ava_daemon_user }}"
|
||||||
|
group: "{{ ava_daemon_group }}"
|
||||||
|
home: "{{ ava_daemon_data_dir }}"
|
||||||
|
shell: /bin/false
|
||||||
|
skeleton: false
|
||||||
|
system: true
|
|
@ -0,0 +1,4 @@
|
||||||
|
- name: Set GOPATH
|
||||||
|
lineinfile:
|
||||||
|
path: ~/.bashrc
|
||||||
|
line: GOPATH=$HOME/go
|
|
@ -0,0 +1,10 @@
|
||||||
|
- name: Configure AVA service
|
||||||
|
hosts: ava_nodes
|
||||||
|
roles:
|
||||||
|
- name: ava-base
|
||||||
|
- name: gopath
|
||||||
|
- name: ava-build
|
||||||
|
- name: ava-certs
|
||||||
|
- name: ava-user
|
||||||
|
- name: ava-install
|
||||||
|
- name: ava-service
|
Loading…
Reference in New Issue