Skip to content

Commit 102ec17

Browse files
committed
feat(roles): add litestream
1 parent 5a0d02b commit 102ec17

File tree

5 files changed

+117
-0
lines changed

5 files changed

+117
-0
lines changed

Diff for: README.md

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ A collection of reusable ansible components used by the EthPandaOps team.
3939
- [docker_nginx_proxy](roles/docker_nginx_proxy)
4040
- [bootstrap](roles/bootstrap)
4141
- [oh_my_zsh](roles/oh_my_zsh)
42+
- [litestream](roles/litestream)
4243

4344
## Usage
4445

Diff for: roles/litestream/README.md

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# ethpandaops.general.litestream
2+
3+
This role will run [litestream](https://github.com/benbjohnson/litestream) 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.litestream
38+
```

Diff for: roles/litestream/defaults/main.yaml

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
litestream_user: "litestream"
2+
3+
litestream_container_name: "litestream"
4+
litestream_container_image: "litestream/litestream"
5+
litestream_container_env:
6+
LITESTREAM_ACCESS_KEY_ID: ""
7+
LITESTREAM_SECRET_ACCESS_KEY: ""
8+
litestream_container_ports: []
9+
# - "127.0.0.1:9090:9090" # metrics
10+
litestream_container_volumes:
11+
- "{{ litestream_paths_config }}/litestream.yml:/etc/litestream.yml"
12+
- "{{ litestream_paths_data }}:/data"
13+
14+
litestream_container_stop_timeout: "120"
15+
litestream_container_networks: []
16+
17+
litestream_paths_data: /data/path/to/your/sqlite_directory
18+
19+
litestream_paths_config: /etc/litestream/
20+
21+
litestream_container_command:
22+
- 'replicate'
23+
24+
# https://litestream.io/reference/config/
25+
litestream_config: |
26+
addr: ":9090"
27+
dbs:
28+
- path: /data/db.sqlite
29+
replicas:
30+
- url: s3://mybkt.litestream.io/db1

Diff for: roles/litestream/handlers/main.yaml

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

Diff for: roles/litestream/tasks/main.yaml

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
- name: Add litestream user
2+
ansible.builtin.user:
3+
name: "{{ litestream_user }}"
4+
shell: /bin/nologin
5+
6+
- name: Get litestream uid
7+
ansible.builtin.getent:
8+
database: passwd
9+
key: "{{ litestream_user }}"
10+
register: litestream_user_getent
11+
12+
- name: Create litestream dirs
13+
ansible.builtin.file:
14+
path: "{{ item }}"
15+
state: directory
16+
mode: '0777'
17+
owner: "{{ litestream_user }}"
18+
group: "{{ litestream_user }}"
19+
loop:
20+
- "{{ litestream_paths_config }}"
21+
22+
- name: Create litestream config
23+
ansible.builtin.copy:
24+
content: "{{ litestream_config }}"
25+
dest: "{{ litestream_paths_config }}/litestream.yml"
26+
owner: "{{ litestream_user }}"
27+
group: "{{ litestream_user }}"
28+
mode: '0664'
29+
notify: Restart litestream container
30+
31+
- name: Run litestream container
32+
community.docker.docker_container:
33+
name: "{{ litestream_container_name }}"
34+
image: "{{ litestream_container_image }}"
35+
user: "{{ litestream_user_getent.ansible_facts.getent_passwd[litestream_user][1] }}"
36+
state: started
37+
restart_policy: always
38+
stop_timeout: "{{ litestream_container_stop_timeout }}"
39+
ports: "{{ litestream_container_ports }}"
40+
volumes: "{{ litestream_container_volumes }}"
41+
env: "{{ litestream_container_env }}"
42+
networks: "{{ litestream_container_networks }}"
43+
command: "{{ litestream_container_command }}"

0 commit comments

Comments
 (0)