Signed-off-by: Julien Riou <julien@riou.xyz>
This commit is contained in:
parent
ad30a8307f
commit
9bed891272
47 changed files with 1680 additions and 2 deletions
43
roles/coller/README.md
Normal file
43
roles/coller/README.md
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
# ansible-role-coller
|
||||
|
||||
Ansible role to manage a [coller](https://git.riou.xyz/jriou/coller) instance.
|
||||
|
||||
## Installation
|
||||
|
||||
Clone the repository in your local Ansible roles directory:
|
||||
|
||||
```
|
||||
git clone https://git.riou.xyz/jriou/ansible-role-coller.git ~/.ansible/roles/coller
|
||||
```
|
||||
|
||||
See [Storing and finding
|
||||
roles](https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_reuse_roles.html#storing-and-finding-roles).
|
||||
|
||||
## Configuration
|
||||
|
||||
See [Variable
|
||||
precedence](https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_variables.html#ansible-variable-precedence)
|
||||
to find where you should put your own variables.
|
||||
|
||||
Then define at least `coller_db_password` with a strong and secure password,
|
||||
encrypted using
|
||||
[ansible-vault](https://docs.ansible.com/ansible/latest/cli/ansible-vault.html).
|
||||
|
||||
See list of [default variables](defaults/main.yml).
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
Example of a basic coller.yml playbook:
|
||||
|
||||
```yaml
|
||||
- hosts: coller
|
||||
roles:
|
||||
- coller
|
||||
```
|
||||
|
||||
Then run the playbook:
|
||||
|
||||
```
|
||||
ansible-playbook coller.yml
|
||||
```
|
||||
9
roles/coller/defaults/main.yml
Normal file
9
roles/coller/defaults/main.yml
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
coller_version: 1.3.1
|
||||
coller_config_dir: /etc/coller
|
||||
coller_port: 8080
|
||||
coller_manage_iptables: false
|
||||
coller_allowed_sources: []
|
||||
coller_db_name: coller
|
||||
coller_db_user: coller
|
||||
#coller_db_password:
|
||||
4
roles/coller/handlers/main.yml
Normal file
4
roles/coller/handlers/main.yml
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
- name: save iptables
|
||||
ansible.builtin.shell:
|
||||
cmd: netfilter-persistent save
|
||||
3
roles/coller/meta/main.yml
Normal file
3
roles/coller/meta/main.yml
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
dependencies:
|
||||
- role: geerlingguy.docker
|
||||
55
roles/coller/tasks/main.yml
Normal file
55
roles/coller/tasks/main.yml
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
---
|
||||
- name: check password
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- coller_db_password is defined
|
||||
|
||||
- name: download source code
|
||||
ansible.builtin.git:
|
||||
repo: https://git.riou.xyz/jriou/coller.git
|
||||
dest: /opt/coller
|
||||
version: "{{ coller_version }}"
|
||||
|
||||
- name: create directories
|
||||
ansible.builtin.file:
|
||||
path: "{{ item }}"
|
||||
state: directory
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0755"
|
||||
loop:
|
||||
- "{{ coller_config_dir }}"
|
||||
|
||||
- name: create docker-compose files
|
||||
ansible.builtin.template:
|
||||
src: "{{ item.src }}.j2"
|
||||
dest: "{{ coller_config_dir }}/{{ item.src }}"
|
||||
owner: root
|
||||
group: root
|
||||
mode: "{{ item.mode }}"
|
||||
loop:
|
||||
- src: docker-compose.yml
|
||||
mode: "0644"
|
||||
- src: db.env
|
||||
mode: "0600"
|
||||
|
||||
- name: create configuration file
|
||||
ansible.builtin.copy:
|
||||
content:
|
||||
database_type: postgres
|
||||
database_dsn: "host=db dbname={{ coller_db_name }} user={{ coller_db_user }} password={{ coller_db_password }}"
|
||||
dest: "{{ coller_config_dir }}/collerd.json"
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0640"
|
||||
no_log: true
|
||||
|
||||
- name: start service
|
||||
community.docker.docker_compose_v2:
|
||||
project_src: "{{ coller_config_dir }}"
|
||||
files:
|
||||
- docker-compose.yml
|
||||
|
||||
- name: manage iptables
|
||||
when: coller_manage_iptables
|
||||
ansible.builtin.include_tasks: manage-iptables.yml
|
||||
16
roles/coller/tasks/manage-iptables.yml
Normal file
16
roles/coller/tasks/manage-iptables.yml
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
---
|
||||
- name: install packages
|
||||
ansible.builtin.package:
|
||||
name: netfilter-persistent
|
||||
|
||||
- name: allow with iptables
|
||||
ansible.builtin.iptables:
|
||||
chain: INPUT
|
||||
protocol: tcp
|
||||
source: "{{ item }}"
|
||||
destination_ports:
|
||||
- "{{ coller_port }}"
|
||||
jump: ACCEPT
|
||||
comment: coller
|
||||
loop: "{{ coller_allowed_sources }}"
|
||||
notify: save iptables
|
||||
6
roles/coller/templates/db.env.j2
Normal file
6
roles/coller/templates/db.env.j2
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{{ ansible_managed | comment }}
|
||||
POSTGRES_USER={{ coller_db_user }}
|
||||
POSTGRES_PASSWORD={{ coller_db_password }}
|
||||
POSTGRES_DB={{ coller_db_name }}
|
||||
POSTGRES_INITDB_ARGS="--data-checksums"
|
||||
POSTGRES_HOST_AUTH_METHOD=scram-sha-256
|
||||
32
roles/coller/templates/docker-compose.yml.j2
Normal file
32
roles/coller/templates/docker-compose.yml.j2
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
---
|
||||
{{ ansible_managed | comment }}
|
||||
services:
|
||||
server:
|
||||
image: coller:{{ coller_version }}
|
||||
build: /opt/coller
|
||||
container_name: collerd
|
||||
restart: always
|
||||
networks:
|
||||
- coller
|
||||
ports:
|
||||
- "{{ coller_port }}:8080"
|
||||
volumes:
|
||||
- "{{ coller_config_dir }}/collerd.json:/etc/collerd.json:ro"
|
||||
command: collerd -config /etc/collerd.json
|
||||
|
||||
db:
|
||||
image: postgres:17
|
||||
hostname: db
|
||||
container_name: collerd_db
|
||||
restart: always
|
||||
env_file: {{ coller_config_dir }}/db.env
|
||||
networks:
|
||||
- coller
|
||||
volumes:
|
||||
- coller:/var/lib/postgresql/data
|
||||
|
||||
networks:
|
||||
coller:
|
||||
|
||||
volumes:
|
||||
coller:
|
||||
Loading…
Add table
Add a link
Reference in a new issue