Skip to content

Commit b65f2f2

Browse files
committed
Add ansible role for xatu-cannon
1 parent 15d4087 commit b65f2f2

File tree

6 files changed

+149
-0
lines changed

6 files changed

+149
-0
lines changed

roles/xatu_cannon/README.md

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# ethpandaops.general.xatu_cannon
2+
3+
This role will run a [xatu cannon](https://github.com/ethpandaops/xatu) within a docker container.
4+
5+
## Requirements
6+
7+
You'll need docker on the target system. Make sure to install it upfront.
8+
9+
## Role Variables
10+
11+
Default variables are defined in [defaults/main.yaml](defaults/main.yaml)
12+
13+
## Dependencies
14+
15+
You'll need docker to run this role. One way of installing docker could be via ansible galaxy with the following dependencies set within `requirements.yaml`:
16+
17+
```yaml
18+
roles:
19+
- src: geerlingguy.docker
20+
version: latest
21+
- src: geerlingguy.pip
22+
version: latest
23+
```
24+
25+
## Example Playbook
26+
27+
Your playbook could look like this:
28+
29+
```yaml
30+
- hosts: localhost
31+
become: true
32+
roles:
33+
- role: geerlingguy.docker
34+
- role: geerlingguy.pip
35+
pip_install_packages:
36+
- name: docker
37+
- role: ethpandaops.general.xatu_cannon
38+
```

roles/xatu_cannon/defaults/main.yaml

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
xatu_cannon_cleanup: false
2+
3+
xatu_cannon_user: "xatu-cannon"
4+
5+
xatu_cannon_container_name: "xatu-cannon"
6+
xatu_cannon_container_image: "ethpandaops/xatu:latest"
7+
xatu_cannon_container_env: {}
8+
xatu_cannon_container_ports: []
9+
xatu_cannon_container_volumes:
10+
- "{{ xatu_cannon_paths_config }}/config.yaml:/config.yaml:ro"
11+
12+
xatu_cannon_container_stop_timeout: "120"
13+
xatu_cannon_container_networks: []
14+
15+
xatu_cannon_paths_config: /etc/xatu-cannon/
16+
17+
xatu_cannon_container_command:
18+
- cannon
19+
- --config=/config.yaml
20+
21+
xatu_cannon_config_name: "{{ inventory_hostname }}"
22+
xatu_cannon_config_beacon_uri: your-beacon-node:4000
23+
xatu_cannon_config_server_address: remote-xatu-server:1234
24+
xatu_cannon_config_server_tls_enabled: true
25+
xatu_cannon_config_server_auth_user: xatu-user
26+
xatu_cannon_config_server_auth_password: xatu-password
27+
xatu_cannon_config_coordinator_address: remote-xatu-server:1234
28+
xatu_cannon_config_coordinator_tls_enabled: true
29+
xatu_cannon_config_coordinator_authorization: coordinator-secret
30+
xatu_cannon_config_network_name_override: ""
31+
32+
xatu_cannon_config: |
33+
logging: "info"
34+
metricsAddr: ":9090"
35+
name: "{{ xatu_cannon_config_name }}"
36+
ethereum:
37+
beaconNodeAddress: {{ xatu_cannon_config_beacon_uri }}
38+
overrideNetworkName: {{ xatu_cannon_config_network_name_override }}
39+
coordinator:
40+
address: {{ xatu_cannon_config_coordinator_address }}
41+
tls: {{ xatu_cannon_config_coordinator_tls_enabled }}
42+
headers:
43+
authorization: "Bearer {{ xatu_cannon_config_coordinator_authorization | b64encode }}"
44+
outputs:
45+
- name: grpc
46+
type: xatu
47+
config:
48+
address: {{ xatu_cannon_config_server_address }}
49+
tls: {{ xatu_cannon_config_server_tls_enabled }}
50+
headers:
51+
authorization: "Basic {{ (xatu_cannon_config_server_auth_user + ":" + xatu_cannon_config_server_auth_password) | b64encode }}"

roles/xatu_cannon/handlers/main.yaml

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
- name: Restart xatu cannon container
2+
community.docker.docker_container:
3+
name: "{{ xatu_cannon_container_name }}"
4+
state: started
5+
restart: true

roles/xatu_cannon/tasks/cleanup.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
- name: Remove xatu cannon container
2+
community.docker.docker_container:
3+
name: "{{ xatu_cannon_container_name }}"
4+
state: absent

roles/xatu_cannon/tasks/main.yaml

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
- name: Setup xatu cannon
2+
ansible.builtin.import_tasks: setup.yaml
3+
when: not xatu_cannon_cleanup
4+
5+
- name: Cleanup xatu cannon
6+
ansible.builtin.import_tasks: cleanup.yaml
7+
when: xatu_cannon_cleanup

roles/xatu_cannon/tasks/setup.yaml

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
- name: Add xatu cannon user
2+
ansible.builtin.user:
3+
name: "{{ xatu_cannon_user }}"
4+
shell: /bin/nologin
5+
6+
- name: Get xatu cannon uid
7+
ansible.builtin.getent:
8+
database: passwd
9+
key: "{{ xatu_cannon_user }}"
10+
register: xatu_cannon_user_getent
11+
12+
- name: Create xatu cannon dirs
13+
ansible.builtin.file:
14+
path: "{{ item }}"
15+
state: directory
16+
mode: '0777'
17+
owner: "{{ xatu_cannon_user }}"
18+
group: "{{ xatu_cannon_user }}"
19+
loop:
20+
- "{{ xatu_cannon_paths_config }}"
21+
22+
- name: Create xatu cannon config
23+
ansible.builtin.copy:
24+
content: "{{ xatu_cannon_config }}"
25+
dest: "{{ xatu_cannon_paths_config }}/config.yaml"
26+
owner: "{{ xatu_cannon_user }}"
27+
group: "{{ xatu_cannon_user }}"
28+
mode: '0640'
29+
notify: Restart xatu cannon container
30+
31+
- name: Run xatu cannon container
32+
community.docker.docker_container:
33+
name: "{{ xatu_cannon_container_name }}"
34+
image: "{{ xatu_cannon_container_image }}"
35+
image_name_mismatch: recreate
36+
user: "{{ xatu_cannon_user_getent.ansible_facts.getent_passwd[xatu_cannon_user][1] }}"
37+
state: started
38+
restart_policy: always
39+
stop_timeout: "{{ xatu_cannon_container_stop_timeout }}"
40+
ports: "{{ xatu_cannon_container_ports }}"
41+
volumes: "{{ xatu_cannon_container_volumes }}"
42+
env: "{{ xatu_cannon_container_env }}"
43+
networks: "{{ xatu_cannon_container_networks }}"
44+
command: "{{ xatu_cannon_container_command }}"

0 commit comments

Comments
 (0)