Skip to content

Commit

Permalink
Added ansible playbooks to update a pre-deployed server.
Browse files Browse the repository at this point in the history
  • Loading branch information
samoht9277 committed Dec 9, 2024
1 parent f5e7347 commit c226382
Show file tree
Hide file tree
Showing 9 changed files with 215 additions and 18 deletions.
7 changes: 7 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -1170,6 +1170,13 @@ ansible_aggregator_deploy: ## Deploy the Operator. Parameters: INVENTORY
-e "ecdsa_keystore_path=$(ECDSA_KEYSTORE)" \
-e "bls_keystore_path=$(BLS_KEYSTORE)"

ansible_aggregator_update:
@if [ -z "$(INVENTORY)" ]; then \
echo "Error: INVENTORY must be set."; \
exit 1; \
fi
@ansible-playbook infra/ansible/playbooks/update/aggregator.yaml -i $(INVENTORY)

ansible_operator_create_env: ## Create empty variables files for the Operator deploy
@cp -n infra/ansible/playbooks/ini/config-operator.ini.example infra/ansible/playbooks/ini/config-operator.ini
@cp -n infra/ansible/playbooks/ini/config-register-operator.ini.example infra/ansible/playbooks/ini/config-register-operator.ini
Expand Down
16 changes: 0 additions & 16 deletions infra/ansible/playbooks/aggregator.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -50,20 +50,6 @@
group: '{{ ansible_user }}'
recurse: yes

- name: Copy ECDSA keystore to server
copy:
src: '{{ ecdsa_keystore_path }}'
dest: /home/{{ ansible_user }}/.keystores/aggregator.ecdsa
owner: '{{ ansible_user }}'
group: '{{ ansible_user }}'

- name: Copy BLS keystore to server
copy:
src: '{{ bls_keystore_path }}'
dest: /home/{{ ansible_user }}/.keystores/aggregator.bls
owner: '{{ ansible_user }}'
group: '{{ ansible_user }}'

- name: Build aggregator
shell:
chdir: /home/{{ ansible_user }}/repos/aggregator/aligned_layer/
Expand All @@ -80,9 +66,7 @@
eth_rpc_url_fallback: "{{ lookup('ini', 'eth_rpc_url_fallback', file='ini/config-aggregator.ini') }}"
eth_ws_url: "{{ lookup('ini', 'eth_ws_url', file='ini/config-aggregator.ini') }}"
eth_ws_url_fallback: "{{ lookup('ini', 'eth_ws_url_fallback', file='ini/config-aggregator.ini') }}"
ecdsa_private_key_store_path: "{{ lookup('ini', 'ecdsa_private_key_store_path', file='ini/config-aggregator.ini') }}"
ecdsa_private_key_store_password: "{{ lookup('ini', 'ecdsa_private_key_store_password', file='ini/config-aggregator.ini') }}"
bls_private_key_store_path: "{{ lookup('ini', 'bls_private_key_store_path', file='ini/config-aggregator.ini') }}"
bls_private_key_store_password: "{{ lookup('ini', 'bls_private_key_store_password', file='ini/config-aggregator.ini') }}"
enable_metrics: "{{ lookup('ini', 'enable_metrics', file='ini/config-aggregator.ini') }}"
metrics_ip_port_address: "{{ lookup('ini', 'metrics_ip_port_address', file='ini/config-aggregator.ini') }}"
Expand Down
83 changes: 83 additions & 0 deletions infra/ansible/playbooks/update/aggregator.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
- name: Run go playbook
ansible.builtin.import_playbook: go.yaml
vars:
host: aggregator

- hosts: aggregator
vars:
service: "aggregator"

tasks:
- name: Create directories
file:
path: "{{ item }}"
recurse: yes
state: directory
loop:
- /tmp/aggregator/aligned_layer
- /home/{{ ansible_user }}/repos/aggregator/aligned_layer/build
- /home/{{ ansible_user }}/config
- /home/{{ ansible_user }}/.config/systemd/user

- name: Clone Aligned repository on /tmp/
git:
repo: https://github.com/yetanotherco/aligned_layer.git
dest: /tmp/aggregator/aligned_layer/
version: v0.12.0

- name: Set permissions for cloned repository
file:
path: /home/{{ ansible_user }}/repos/{{ service }}/aligned_layer
mode: '0755'
owner: '{{ ansible_user }}'
group: '{{ ansible_user }}'
recurse: yes

- name: Build aggregator on /tmp/
shell:
chdir: /tmp/aggregator/aligned_layer/
cmd: /usr/local/go/bin/go build -o /tmp/aggregator/aligned_layer/build/aligned-aggregator /tmp/aggregator/aligned_layer/aggregator/cmd/main.go

- name: Move compiled aggregator to user directory
copy:
src: /tmp/aggregator/aligned_layer/build/aligned-aggregator
dest: /home/{{ ansible_user }}/repos/aggregator/aligned_layer/build/aligned-aggregator
remote_src: true

- name: Remove Aligned repository on /tmp/
file:
path: /tmp/aggregator/aligned_layer/
state: absent

- name: Upload config file for aggregator
template:
src: config-files/config-aggregator.yaml.j2
dest: "/home/{{ ansible_user }}/config/config-aggregator.yaml"
force: yes
vars:
aligned_layer_deployment_config_file_path: "{{ lookup('ini', 'aligned_layer_deployment_config_file_path', file='ini/config-aggregator.ini') }}"
eigen_layer_deployment_config_file_path: "{{ lookup('ini', 'eigen_layer_deployment_config_file_path', file='ini/config-aggregator.ini') }}"
eth_rpc_url: "{{ lookup('ini', 'eth_rpc_url', file='ini/config-aggregator.ini') }}"
eth_rpc_url_fallback: "{{ lookup('ini', 'eth_rpc_url_fallback', file='ini/config-aggregator.ini') }}"
eth_ws_url: "{{ lookup('ini', 'eth_ws_url', file='ini/config-aggregator.ini') }}"
eth_ws_url_fallback: "{{ lookup('ini', 'eth_ws_url_fallback', file='ini/config-aggregator.ini') }}"
ecdsa_private_key_store_path: "{{ lookup('ini', 'ecdsa_private_key_store_path', file='ini/config-aggregator.ini') }}"
ecdsa_private_key_store_password: "{{ lookup('ini', 'ecdsa_private_key_store_password', file='ini/config-aggregator.ini') }}"
bls_private_key_store_path: "{{ lookup('ini', 'bls_private_key_store_path', file='ini/config-aggregator.ini') }}"
bls_private_key_store_password: "{{ lookup('ini', 'bls_private_key_store_password', file='ini/config-aggregator.ini') }}"
enable_metrics: "{{ lookup('ini', 'enable_metrics', file='ini/config-aggregator.ini') }}"
metrics_ip_port_address: "{{ lookup('ini', 'metrics_ip_port_address', file='ini/config-aggregator.ini') }}"
telemetry_ip_port_address: "{{ lookup('ini', 'telemetry_ip_port_address', file='ini/config-aggregator.ini') }}"

- name: Add service to systemd
template:
src: services/aggregator.service.j2
dest: "/home/{{ ansible_user }}/.config/systemd/user/aggregator.service"
force: yes

- name: Restart aggregator service
systemd_service:
name: aggregator
state: restarted
enabled: true
scope: user
48 changes: 48 additions & 0 deletions infra/ansible/playbooks/update/go.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# https://everythingcoding.in/go-setup-through-ansible/
- name: Go Setup
hosts: "{{ host }}"
vars:
version: 1.22.2

tasks:
- name: check if go is installed
stat:
path: /usr/local/go/bin/go
register: go_exists

- name: get golang download link
set_fact:
go_download_url: >-
{% if ansible_architecture == 'x86_64' %}
https://go.dev/dl/go{{ version }}.linux-amd64.tar.gz
{% elif ansible_architecture == 'aarch64' %}
https://go.dev/dl/go{{ version }}.linux-arm64.tar.gz
{% endif %}
- name: download Go tarball
when: not go_exists.stat.exists
get_url:
url: "{{ go_download_url }}"
dest: "/tmp/{{ go_download_url | basename }}"
mode: '0755'

- name: install Go
when: not go_exists.stat.exists
ansible.builtin.unarchive:
src: "/tmp/{{ go_download_url | basename }}"
dest: /usr/local/
remote_src: yes
become: yes
vars:
ansible_ssh_user: admin

- name: update user PATH
when: not go_exists.stat.exists
lineinfile:
path: "/home/{{ ansible_user }}/.bashrc"
line: "{{ item }}"
state: present
with_items:
- 'export PATH=$PATH:/usr/local/go/bin'
- 'export GOPATH=$HOME/go'
- 'export PATH=$PATH:$GOPATH/bin'
14 changes: 14 additions & 0 deletions infra/ansible/playbooks/update/ini/config-aggregator.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
[global]
aligned_layer_deployment_config_file_path=/home/dev/repos/aggregator/aligned_layer/contracts/script/output/devnet/alignedlayer_deployment_output.json
eigen_layer_deployment_config_file_path=/home/dev/repos/aggregator/aligned_layer/contracts/script/output/devnet/eigenlayer_deployment_output.json
eth_rpc_url=http://100.71.4.115:8545
eth_rpc_url_fallback=http://100.71.4.115:8550
eth_ws_url=ws://100.71.4.115:8546
eth_ws_url_fallback=ws://100.71.4.115:8551
ecdsa_private_key_store_path=/home/dev/repos/aggregator/aligned_layer/config-files/anvil.aggregator.ecdsa.key.json
ecdsa_private_key_store_password=
bls_private_key_store_path=/home/dev/repos/aggregator/aligned_layer/config-files/anvil.aggregator.bls.key.json
bls_private_key_store_password=
enable_metrics=true
metrics_ip_port_address=100.106.174.11:9091
telemetry_ip_port_address=100.96.200.99:4001
14 changes: 14 additions & 0 deletions infra/ansible/playbooks/update/ini/config-aggregator.ini.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
[global]
aligned_layer_deployment_config_file_path=
eigen_layer_deployment_config_file_path=
eth_rpc_url=
eth_rpc_url_fallback=
eth_ws_url=
eth_ws_url_fallback=
ecdsa_private_key_store_path=
ecdsa_private_key_store_password=
bls_private_key_store_path=
bls_private_key_store_password=
enable_metrics=
metrics_ip_port_address=
telemetry_ip_port_address=
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Common variables for all the services
# 'production' only prints info and above. 'development' also prints debug
environment: "production"
aligned_layer_deployment_config_file_path: "{{ aligned_layer_deployment_config_file_path }}"
eigen_layer_deployment_config_file_path: "{{ eigen_layer_deployment_config_file_path }}"
eth_rpc_url: "{{ eth_rpc_url }}"
eth_rpc_url_fallback: "{{ eth_rpc_url_fallback }}"
eth_ws_url: "{{ eth_ws_url }}"
eth_ws_url_fallback: "{{ eth_ws_url_fallback }}"
eigen_metrics_ip_port_address: "localhost:9090"

## ECDSA Configurations
ecdsa:
private_key_store_path: "{{ ecdsa_private_key_store_path }}"
private_key_store_password: "{{ ecdsa_private_key_store_password }}"

## BLS Configurations
bls:
private_key_store_path: "{{ bls_private_key_store_path }}"
private_key_store_password: "{{ bls_private_key_store_password }}"

## Aggregator Configurations
aggregator:
server_ip_port_address: localhost:8090
bls_public_key_compendium_address:
avs_service_manager_address:
enable_metrics: {{ enable_metrics }}
metrics_ip_port_address: "{{ metrics_ip_port_address }}"
telemetry_ip_port_address: "{{ telemetry_ip_port_address }}"
garbage_collector_period: 2m #The period of the GC process. Suggested value for Prod: '168h' (7 days)
garbage_collector_tasks_age: 20 #The age of tasks that will be removed by the GC, in blocks. Suggested value for prod: '216000' (30 days)
garbage_collector_tasks_interval: 10 #The interval of queried blocks to get an old batch. Suggested value for prod: '900' (3 hours)
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
[Unit]
Description=Aggregator
After=network.target

[Service]
Type=simple
WorkingDirectory=/home/{{ ansible_user }}/repos/aggregator/aligned_layer/aggregator
ExecStart=/home/{{ ansible_user }}/repos/aggregator/aligned_layer/build/aligned-aggregator --config /home/{{ ansible_user }}/config/config-aggregator.yaml
Restart=always
RestartSec=1
StartLimitBurst=100
LimitNOFILE=100000

[Install]
WantedBy=multi-user.target
4 changes: 2 additions & 2 deletions infra/ansible/stage_inventory.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
aggregator:
hosts:
aligned-holesky-aggregator-1:
ansible_host: aligned-holesky-stage-1-aggregator
ansible_host: aligned-holesky-stage-2-aggregator
admin_user: admin
ansible_user: app
ansible_user: dev
ansible_python_interpreter: /usr/bin/python3
batcher:
hosts:
Expand Down

0 comments on commit c226382

Please sign in to comment.