diff --git a/Makefile b/Makefile index 925e9b7434..f2e57e238c 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/infra/ansible/playbooks/aggregator.yaml b/infra/ansible/playbooks/aggregator.yaml index 599f6e76ea..fe6e4ae43b 100644 --- a/infra/ansible/playbooks/aggregator.yaml +++ b/infra/ansible/playbooks/aggregator.yaml @@ -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/ @@ -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') }}" diff --git a/infra/ansible/playbooks/update/aggregator.yaml b/infra/ansible/playbooks/update/aggregator.yaml new file mode 100644 index 0000000000..52f38fd35a --- /dev/null +++ b/infra/ansible/playbooks/update/aggregator.yaml @@ -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 diff --git a/infra/ansible/playbooks/update/go.yaml b/infra/ansible/playbooks/update/go.yaml new file mode 100644 index 0000000000..12485aeb02 --- /dev/null +++ b/infra/ansible/playbooks/update/go.yaml @@ -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' diff --git a/infra/ansible/playbooks/update/ini/config-aggregator.ini b/infra/ansible/playbooks/update/ini/config-aggregator.ini new file mode 100644 index 0000000000..7816eb596f --- /dev/null +++ b/infra/ansible/playbooks/update/ini/config-aggregator.ini @@ -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 diff --git a/infra/ansible/playbooks/update/ini/config-aggregator.ini.example b/infra/ansible/playbooks/update/ini/config-aggregator.ini.example new file mode 100644 index 0000000000..6c01c1c1b3 --- /dev/null +++ b/infra/ansible/playbooks/update/ini/config-aggregator.ini.example @@ -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= diff --git a/infra/ansible/playbooks/update/templates/config-files/config-aggregator.yaml.j2 b/infra/ansible/playbooks/update/templates/config-files/config-aggregator.yaml.j2 new file mode 100644 index 0000000000..49bb8a3c4d --- /dev/null +++ b/infra/ansible/playbooks/update/templates/config-files/config-aggregator.yaml.j2 @@ -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) diff --git a/infra/ansible/playbooks/update/templates/services/aggregator.service.j2 b/infra/ansible/playbooks/update/templates/services/aggregator.service.j2 new file mode 100644 index 0000000000..eacf82989c --- /dev/null +++ b/infra/ansible/playbooks/update/templates/services/aggregator.service.j2 @@ -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 diff --git a/infra/ansible/stage_inventory.yaml b/infra/ansible/stage_inventory.yaml index df96e4d109..292ba06d6d 100644 --- a/infra/ansible/stage_inventory.yaml +++ b/infra/ansible/stage_inventory.yaml @@ -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: